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

Posted

技术标签:

【中文标题】Android 架构组件:依赖版本的 Gradle 同步错误【英文标题】:Android Architecture Components: Gradle sync error for dependency version 【发布时间】:2018-10-05 08:56:40 【问题描述】:

我正在尝试将 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 依赖 'android.arch.lifecycle:runtime' 对于编译 (1.0.0) 和运行时 (1.1.1) 类路径有不同的版本。您应该通过 DependencyResolution 手动设置相同的版本

删除第一行 (extensions) 解决了这个问题,表明错误来自那里,但我不知道为什么。

【问题讨论】:

将 ` implementation "android.arch.lifecycle:runtime:1.1.1"` 添加到您的依赖项中 很遗憾,不,这并不能解决问题。 依赖解析强制使用版本gist.github.com/cr7pt0gr4ph7/6cd6339eabc2056bc3e7 【参考方案1】:

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

这是,由于内部 api(传递)导入,android.arch.lifecycle:runtime:1.0.0 在依赖树中传播,所以在我的情况下,我只需将扩展库包含为“api”而不是“实现”,以便它将其版本覆盖到最高版本(1.1.1)。

总之,改变

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

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

【讨论】:

救命稻草,不知道为什么在某些地方没有记录 这里一样(另一个救生员)。 在更改后的构建时间方面,'api' 的效率低于 'implementation'【参考方案2】:

在您的主要build.gradle 文件中

allprojects 
    ...

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


这将强制执行版本1.1.1

【讨论】:

这对我有用。我无法弄清楚较低的依赖项在哪里,因为它是旧库中的大多数 Lilley。【参考方案3】:

显然support-v4 引起了冲突。在这个问题的情况下,Gradle 依赖任务无法正常工作,但对于遇到此问题的其他任何人:

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

【讨论】:

我也是这种情况,设置上面的 resolutionStrategy 解决了问题。【参考方案4】:

@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"

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于Android 架构组件:依赖版本的 Gradle 同步错误的主要内容,如果未能解决你的问题,请参考以下文章

Android使用Gradle统一配置依赖版本

Android使用Gradle统一配置依赖版本

Android Gradle 插件组件化中的 Gradle 构建脚本实现 ① ( 组件化简介 | 创建组件化应用 | 依赖库模块 / 应用模块 切换设置 )

Android Gradle 插件Android 依赖管理 ⑤ ( Gradle 依赖优化 | 命令行查看依赖模块 | 依赖冲突问题 | 依赖传递冲突 | 分库冲突 | 依赖分组不同导致冲突 )

Android Gradle 插件Gradle 依赖管理 ⑤ ( dependencies 依赖项拆分 | 依赖组 | 依赖名称 | 依赖版本号 | 动态指定依赖版本号 | 使用命令行查看模块 )

Android 组件化路由组件 ( 页面跳转参数依赖注入 )