| (This wiki page applies to people migrating code written before December 2017. It is unlikely to still be relevant.) |
| |
| ## Introduction |
| |
| Prior to [#13492](https://github.com/flutter/flutter/pull/13492) (merged on 2017-12-13), Flutter tooling created projects whose Android part used Gradle 3.3 and the Android Studio Gradle plugin version 2.3.3. |
| |
| After #13492, Flutter tooling creates projects based on Gradle 4.1 and the Android Studio Gradle plugin version 3.0.1. |
| |
| This page describes how you can manually upgrade your Flutter projects from the old mode to the new one. This may be needed to consume new-mode Flutter plugins. |
| |
| Where in doubt, please consult https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html. |
| |
| ## Upgrading a Flutter app project |
| |
| 1. In `android/gradle/wrapper/gradle-wrapper.properties`, replace `3.3` with `4.1` in the last line. |
| 1. In `android/build.gradle`, replace |
| ```gradle |
| repositories { |
| jcenter() |
| maven { |
| url "https://maven.google.com" |
| } |
| } |
| ``` |
| by |
| ```gradle |
| repositories { |
| google() |
| jcenter() |
| } |
| ``` |
| twice. |
| |
| Also replace |
| ```gradle |
| dependencies { |
| classpath 'com.android.tools.build:gradle:2.3.3' |
| } |
| ``` |
| by |
| ```gradle |
| dependencies { |
| classpath 'com.android.tools.build:gradle:3.0.1' |
| } |
| ``` |
| |
| Finally, replace |
| ```gradle |
| subprojects { |
| project.buildDir = "${rootProject.buildDir}/${project.name}" |
| project.evaluationDependsOn(':app') |
| } |
| ``` |
| by |
| ```gradle |
| subprojects { |
| project.buildDir = "${rootProject.buildDir}/${project.name}" |
| } |
| subprojects { |
| project.evaluationDependsOn(':app') |
| } |
| ``` |
| This change prevents a "Gradle build failed to produce an Android package" error message when your app |
| depends on plugins whose name comes before "app" in lexicographic order. |
| 1. In `android/app/build.gradle`, replace version `25` by `27` and `25.0.3` by `27.0.3` (three places total). |
| |
| If you are using a version of Flutter from before [#13558](https://github.com/flutter/flutter/pull/13558), |
| add the following to the `android`,`buildTypes` section: |
| |
| ```yaml |
| profile { |
| matchingFallbacks = ['debug', 'release'] |
| } |
| ``` |
| |
| Replace configurations named `compile` by `api` (or `implementation`) and `provided` by |
| `compileOnly` in the `dependencies` section. You may also want to update dependencies with newer |
| versions as applicable. In the default project templates generated by Flutter tooling we have replaced |
| ```gradle |
| dependencies { |
| androidTestCompile 'com.android.support:support-annotations:25.4.0' |
| androidTestCompile 'com.android.support.test:runner:0.5' |
| androidTestCompile 'com.android.support.test:rules:0.5' |
| } |
| ``` |
| by |
| ```gradle |
| dependencies { |
| testImplementation 'junit:junit:4.12' |
| androidTestImplementation 'com.android.support.test:runner:1.0.1' |
| androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' |
| } |
| ``` |
| loosely following the lead of Android Studio. |
| |
| ## Upgrading a Flutter plugin project |
| |
| 1. Upgrade the `example/` Flutter app project as indicated above. |
| 1. Remove the Gradle wrapper files and folder (`gradlew`, `gradlew.bat`, `gradle/`) from the top-level |
| `android` folder, if present. The Gradle wrapper is used by the `example` app only, and it should |
| already contain these files. |
| 1. In `android/build.gradle`, replace |
| ```gradle |
| repositories { |
| jcenter() |
| maven { |
| url "https://maven.google.com" |
| } |
| } |
| ``` |
| by |
| ```gradle |
| repositories { |
| google() |
| jcenter() |
| } |
| ``` |
| twice. |
| |
| Also replace |
| ```gradle |
| dependencies { |
| classpath 'com.android.tools.build:gradle:2.3.3' |
| } |
| ``` |
| by |
| ```gradle |
| dependencies { |
| classpath 'com.android.tools.build:gradle:3.0.1' |
| } |
| ``` |
| |
| Replace version `25` by `27` and `25.0.3` by `27.0.3`. |
| |
| Lastly, replace configurations named `compile` by `api` (or `implementation`) and `provided` by `compileOnly` |
| in any custom `dependencies` section. |