RedBassett
RedBassett

Reputation: 3587

Android Architecture Components: Gradle sync error for dependency version

I'm trying to add ViewModel and LiveData to a Kotlin app. I have the following dependencies added to my module's build.gradle:

implementation "android.arch.lifecycle:extensions:1.1.1"
kapt "android.arch.lifecycle:compiler:1.1.1"
testImplementation "android.arch.core:core-testing:1.1.1"

I'm given the following error:

Android dependency 'android.arch.lifecycle:runtime' has different version for the compile (1.0.0) and runtime (1.1.1) classpath. You should manually set the same version via DependencyResolution

Removing the first line (extensions) fixes the issue, indicating that the error is coming from there, but I can't figure out why.

Upvotes: 19

Views: 19336

Answers (5)

Adam Johns
Adam Johns

Reputation: 36373

I searched for all dependencies with ./gradlew :app:dependencies as @RedBassett mentioned. I noticed the incompatible version of android.arch.core:runtime that Gradle was complaining about was stemming from my version of com.android.support:appcompat-v7, so I just updated that version to the latest and everything worked.

Upvotes: 0

Sahil Patel
Sahil Patel

Reputation: 734

@RedBassett is right. However I was still having some problem excluding android.arch.lifecycle related sub dependencies.

In my case the conflict was caused in com.android.support:appcompat-v7:27.1.1.

This is how my gradle dependency looks like after excluding it.

implementation ('com.android.support:appcompat-v7:27.1.1') {
    exclude group: 'android.arch.lifecycle'
}


api "android.arch.lifecycle:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"

Also, you will have to add this exclude in every imported module.

Upvotes: 1

Rubén Viguera
Rubén Viguera

Reputation: 3624

As @RedBassett mentions Support libraries depends on this lightweight import (runtime library) as explained at android developers documentation.

This is, android.arch.lifecycle:runtime:1.0.0 is spreading up in the dependency tree as a result of an internal api (transitive) import so in my case I only had to include extensions library as "api" instead of "implementation" so that it will override its version to the highest (1.1.1).

In conclusion, change

implementation "android.arch.lifecycle:extensions:1.1.1"

to

api "android.arch.lifecycle:extensions:1.1.1"

Upvotes: 48

sergej shafarenka
sergej shafarenka

Reputation: 20426

In your main build.gradle file

allprojects {
    ...

    configurations {
        all {
            resolutionStrategy {
                force "android.arch.lifecycle:runtime:1.1.1"
            }
        }
    }

}

This will enforce version 1.1.1

Upvotes: 24

RedBassett
RedBassett

Reputation: 3587

Apparently support-v4 was causing the conflict. In the case of this question, the Gradle dependency task wasn't working correctly, but for anyone else who runs into this issue:

./gradlew :app:dependencies will show the sub-dependencies used by your dependencies. Search the output of this command (changing app for your module name) for the dependency causing the conflict.

Upvotes: 7

Related Questions