Android 架构组件:Gradle 依赖版本同步错误

Android Architecture Components: Gradle sync error for dependency version

我正在尝试将 ViewModel 和 LiveData 添加到 Kotlin 应用程序。我将以下依赖项添加到我的模块的 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"

我收到以下错误:

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

删除第一行 (extensions) 修复了问题,表明错误来自那里,但我不明白为什么。

显然是 support-v4 引起了冲突。对于这个问题,Gradle 依赖任务没有正常工作,但对于遇到这个问题的任何其他人:

./gradlew :app:dependencies 将显示您的依赖项使用的子依赖项。搜索此命令的输出(将 app 更改为您的模块名称)以查找导致冲突的依赖项。

在您的主 build.gradle 文件中

allprojects {
    ...

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

}

这将强制执行版本 1.1.1

正如@RedBassett 提到的那样,支持库依赖于此轻量级导入(运行时库),如 android developers documentation 所述。

这是 android.arch.lifecycle:runtime:1.0.0 由于内部 api(传递)导入而在依赖树中传播,所以在我的例子中我只需要包括扩展库作为 "api" 而不是 "implementation" 以便它将其版本覆盖到最高 (1.1.1)。

总之,改变

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

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

@RedBassett 是对的。但是我仍然有一些问题排除 android.arch.lifecycle 相关的子依赖项。

就我而言,冲突是在 com.android.support:appcompat-v7:27.1.1 中引起的。

这就是我的 gradle 依赖项在排除后的样子。

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"

此外,您必须在每个导入的模块中添加此排除项。

我用 ./gradlew :app:dependencies 搜索了所有依赖项,正如@RedBassett 提到的那样。我注意到 Gradle 抱怨的 android.arch.core:runtime 版本不兼容源于我的 com.android.support:appcompat-v7 版本,所以我将该版本更新到最新版本并且一切正常。