In project 'app' a resolved Google Play services library dependency depends on another at an exact version

There are many answers here for individual solutions that do not really get down to the problem. Here is how to solve this in general:

As the original log output suggests, it is useful to run the build in the terminal with the following command:

./gradlew --info assembleDebug

This will give you a list of all dependencies that are involved in the conflict. It looks similar to this (I removed the package name stuff to make it a bit more readable):

Dependency Resolution Help: Displaying all currently known paths to any version of the dependency: Artifact(groupId=com.google.firebase, artifactId=firebase-iid)

-- task/module dep -> [email protected]
---- firebase-analytics:17.2.0 library depends -> [email protected]
------ play-services-measurement-api:17.2.0 library depends -> [email protected]

-- task/module dep -> [email protected]
---- firebase-core:17.2.0 library depends -> [email protected]
------ firebase-analytics:17.2.0 library depends -> [email protected]
-------- play-services-measurement-api:17.2.0 library depends -> [email protected]

-- task/module dep -> [email protected]
---- play-services-measurement-api:17.2.0 library depends -> [email protected]

-- task/module dep -> [email protected]

-- task/module dep -> [email protected]
---- firebase-messaging:17.1.0 library depends -> firebase-iid@[16.2.0]

-- task/module dep -> com.pressenger:[email protected]
---- com.pressenger:sdk:4.8.0 library depends -> [email protected]
------ firebase-messaging:17.1.0 library depends -> firebase-iid@[16.2.0]

From this list you get to know 2 things:

  1. Where is the conflicting depedency found
  2. What versions of the conflicting dependency are set up

In my case the conflicting dependency is firebase-iid: It's either @19.0.0 or @16.2.0

To fix this you must define the top-level dependency of the wrong firebase-iid explicitly in your build.gralde.

So in the upper log you can see that there are 2 examples of an out-dated version of [email protected]. One comes from -- task/module dep -> [email protected] the other one from a third-party library (pressenger). We don't have influence on the third-party library, so nothing to do here. But for the other dependency, we have to declare it explicitly with the correct version:

implementation 'com.google.firebase:firebase-messaging:20.0.0'

Now the build works again. Happy ending :)


There's a known bug with Google Services 4.2.0 that may cause this. Downgrading your google-services version to 4.1.0 in your project's build.gradle may resolve the issue

buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.1.0' //decreased from 4.2.0
    }
}

The problem was it was missing a dependency. Adding com.google.firebase:firebase-auth solved the issue.

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.firebase:firebase-firestore:17.1.5'

//    implementation'com.google.firebase:firebase-core:16.0.6'
//    implementation'com.google.firebase:firebase-storage:16.0.5'

    implementation'com.google.firebase:firebase-auth:16.1.0' => add this line
    implementation 'com.firebaseui:firebase-ui-auth:4.2.0'
}