Reputation: 3587
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
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
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
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
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
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