Flutter: AndroidX migration
I recently upgraded firebase_auth and my project stopped compiling because they've migrated to AndroidX, meaning I had to migrate my whole project as well. Here's how I did it.
After upgrading firebase_auth version past , I started getting this compile error:
~/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+5/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:9: error: cannot find symbol
import androidx.annotation.NonNull;
^
symbol: class NonNull
location: package androidx.annotation
~/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.11.1+5/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java:10: error: cannot find symbol
import androidx.annotation.Nullable;
^
...
BUILD FAILED in 28s
*******************************************************************************************
The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
See https://goo.gl/CP92wY for more information on the problem and how to fix it.
*******************************************************************************************
Finished with error: Gradle task assembleDebug failed with exit code 1
The first thing the page on Flutter migration to AndroidX tells you to do is to set compileSdkVersion
to at least 28 in app/build.gradle
.
Migrating automatically
Then you open the android
subfolder in Android Studio, and click Refactor, Migrate to AndroidX.
![](https://www.wafrat.com/content/images/2019/06/Screen-Shot-2019-06-04-at-11.53.03-AM--2-.png)
However, it required me to migrate gradle to 3.2 at least. To do so, I had to check versions at https://developer.android.com/studio/releases/gradle-plugin#updating-gradle.
To upgrade the gradle dependency to 3.4.0, I modified the gradle wrapper version in android/gradle/wrapper/gradle-wrapper.properties
to 5.1.1:
...
distributionUrl = https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
...
and the build.gradle
:
...
classpath 'com.android.tools.build:gradle:3.4.0'
...
To make sure it downloaded the new gradle, I triggered a build. Now the Gradle plugin complained that I need to update the Kotlin plugin:
The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.10 and higher.
The following dependencies do not satisfy the required version:
root project 'android' -> org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.30
I checked https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-gradle-plugin to find the latest version and changed build.gradle
to:
buildscript {
ext.kotlin_version = '1.3.31'
...
Now the compilation went a bit further and failed with:
Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.10.
I had to change this dependency in app/build.gradle
to:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
...
After that the compilation went a bit further still and failed with the initial error: cannot find symbol class NonNull
error related to Firebase.
Despite trying repeatedly to "Migrate AndroidX automatically", it would tell me there is nothing to migrate. So I had to resort to manual migration.
Manual migration
https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility and https://developer.android.com/jetpack/androidx/migrate list out the package mappings. I ended up changing the only two dependencies to the Android Support library I had in app/build.gradle
:
dependencies {
...
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
...
and appending to gradle.properties
:
android.enableJetifier=true
android.useAndroidX=true
Finally the project compiled! Hopefully Flutter updates the new project templates so the migration is already done for us.