Incompatible firebase libraries

Viewed 4616

I use the latest version of com.google.firebase:firebase-core:16.0.3 and the latest version of com.google.firebase:firebase-messaging:17.3.1. But they depend on the different versions of com.google.firebase:firebase-iid dependency (16.0.0 and 17.0.1):

firebase-core:16.0.3 depends on firebase-iid:16.0.0:

com.google.firebase:firebase-core:16.0.3
+--- com.google.firebase:firebase-analytics:16.0.3
|    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    +--- com.google.android.gms:play-services-measurement-api:[16.0.1] -> 16.0.1
|    |    +--- com.google.android.gms:play-services-ads-identifier:15.0.1
|    |    |    \--- com.google.android.gms:play-services-basement:[15.0.1,16.0.0) -> 15.0.1 (*)
|    |    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    |    +--- com.google.android.gms:play-services-measurement-base:[16.0.2] -> 16.0.2
|    |    +--- com.google.android.gms:play-services-stats:15.0.1
|    |    |    \--- com.google.android.gms:play-services-basement:[15.0.1] -> 15.0.1 (*)
|    |    +--- com.google.android.gms:play-services-tasks:15.0.1 (*)
|    |    +--- com.google.firebase:firebase-analytics-impl:[16.2.1] -> 16.2.1
|    |    |    +--- com.google.android.gms:play-services-ads-identifier:15.0.1 (*)
|    |    |    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    |    |    +--- com.google.android.gms:play-services-measurement-base:[16.0.2] -> 16.0.2
|    |    |    +--- com.google.android.gms:play-services-stats:15.0.1 (*)
|    |    |    +--- com.google.android.gms:play-services-tasks:15.0.1 (*)
|    |    |    +--- com.google.firebase:firebase-common:16.0.1
|    |    |    |    +--- com.google.android.gms:play-services-basement:15.0.1 (*)
|    |    |    |    \--- com.google.android.gms:play-services-tasks:15.0.1 (*)
|    |    |    \--- com.google.firebase:firebase-iid:16.0.0

firebase-messaging:17.3.1 depends on firebase-iid:17.0.1:

com.google.firebase:firebase-messaging:17.3.1
+--- com.google.android.gms:play-services-basement:15.0.1 (*)
+--- com.google.android.gms:play-services-tasks:15.0.1 (*)
+--- com.google.firebase:firebase-common:16.0.1 (*)
+--- com.google.firebase:firebase-iid:[17.0.1] -> 17.0.1 (*)

Therefore android google play services plugin fails with this error: "The library com.google.firebase:firebase-iid is being requested by various other libraries at [[17.0.1,17.0.1]], but resolves to 16.0.0. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.".

Is this a bug? Are there any solutions to fix this problem?

3 Answers

I got similar issue after updating to com.google.gms:google-services:4.0.1.

I have fixed by adding

com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

in app/build.gradle file after apply plugin: com.google.gms.google-services.

it looks like this

{
    dependencies {
     //......
    }

    apply plugin: 'com.google.gms.google-services'
    com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true
}

Use the latest update for firebase-messaging (17.3.2), this update fixes this particular incompatibility issue.

You can check the version check implementation.
https://github.com/firebase/firebase-android-sdk/blob/15be8218dbb890dbc79deb858addece0ad255831/firebase-installations/customer-lint-checks/src/main/java/com/google/firebase/installations/lint/IncompatibleIidVersionDetector.kt#L98
It seems that the iid version should be 20.1 or higher.

And to find the libraries that need to be updated to update the iid, you can find the firebase libraries that depend on the iid by doing the following:
./gradlew -q app:dependencyInsight --configuration debugCompileClasspath --dependency firebase-iid

Related