Android 依赖 '..' 对于编译 (..) 和运行时 (..) 类路径有不同的版本
Posted
技术标签:
【中文标题】Android 依赖 \'..\' 对于编译 (..) 和运行时 (..) 类路径有不同的版本【英文标题】:Android dependency '..' has different version for the compile (..) and runtime (..) classpathAndroid 依赖 '..' 对于编译 (..) 和运行时 (..) 类路径有不同的版本 【发布时间】:2018-04-26 05:42:50 【问题描述】:我迁移到 android Studio 3 和 Gradle 4。然后我将 build.gradle 文件中的 compile
更改为 implementation
。但我得到了错误:
Error:Execution failed for task ':app:preDebugBuild'.
> Android dependency 'com.google.firebase:firebase-core' has different version for the compile (9.0.0) and runtime (11.6.0) classpath. You should manually set the same version via DependencyResolution
当我将 implementation
更改为 api
时,错误消失了。但这不是解决方案。我有应用程序模块和一个库模块。 App build.gradle 只有一个依赖:
implementation project(':common-lib')
apply plugin: 'com.google.gms.google-services'
正确放置在应用程序 build.gradle 文件的底部(该项目在迁移到 Gradle 4 之前工作)
来自 gradlew 应用程序的依赖项:依赖项(文本剪辑):
编译
debugAndroidTestCompileClasspath - Resolved configuration for compilation for variant: debugAndroidTest
+--- com.google.firebase:firebase-core:9.0.0
| \--- com.google.firebase:firebase-analytics:9.0.0
| +--- com.google.android.gms:play-services-basement:9.0.0
| | \--- com.android.support:support-v4:23.0.0
| | \--- com.android.support:support-annotations:23.0.0
| +--- com.google.firebase:firebase-common:9.0.0
| | +--- com.google.android.gms:play-services-basement:9.0.0 (*)
| | \--- com.google.android.gms:play-services-tasks:9.0.0
| | \--- com.google.android.gms:play-services-basement:9.0.0 (*)
| \--- com.google.firebase:firebase-analytics-impl:9.0.0
| +--- com.google.android.gms:play-services-base:9.0.0
| | +--- com.google.android.gms:play-services-basement:9.0.0 (*)
| | +--- com.google.firebase:firebase-common:9.0.0 (*)
| | \--- com.google.android.gms:play-services-tasks:9.0.0 (*)
| +--- com.google.android.gms:play-services-basement:9.0.0 (*)
| +--- com.google.firebase:firebase-iid:9.0.0
| | +--- com.google.android.gms:play-services-basement:9.0.0 (*)
| | \--- com.google.firebase:firebase-common:9.0.0 (*)
| \--- com.google.firebase:firebase-common:9.0.0 (*)
\--- project :common-lib
(............)
运行时
debugAndroidTestRuntimeClasspath - Resolved configuration for runtime for variant: debugAndroidTest
+--- com.google.firebase:firebase-core:9.0.0 -> 11.6.0
| \--- com.google.firebase:firebase-analytics:11.6.0
| +--- com.google.android.gms:play-services-basement:11.6.0
| | +--- com.android.support:support-v4:25.2.0 -> 26.1.0
| | | +--- com.android.support:support-compat:26.1.0
| | | | +--- com.android.support:support-annotations:26.1.0
| | | | \--- android.arch.lifecycle:runtime:1.0.0
| | | | +--- android.arch.lifecycle:common:1.0.0
| | | | \--- android.arch.core:common:1.0.0
| | | +--- com.android.support:support-media-compat:26.1.0
| | | | +--- com.android.support:support-annotations:26.1.0
| | | | \--- com.android.support:support-compat:26.1.0 (*)
| | | +--- com.android.support:support-core-utils:26.1.0
| | | | +--- com.android.support:support-annotations:26.1.0
| | | | \--- com.android.support:support-compat:26.1.0 (*)
| | | +--- com.android.support:support-core-ui:26.1.0
| | | | +--- com.android.support:support-annotations:26.1.0
| | | | \--- com.android.support:support-compat:26.1.0 (*)
| | | \--- com.android.support:support-fragment:26.1.0
| | | +--- com.android.support:support-compat:26.1.0 (*)
| | | +--- com.android.support:support-core-ui:26.1.0 (*)
| | | \--- com.android.support:support-core-utils:26.1.0 (*)
| | \--- com.google.android.gms:play-services-basement-license:11.6.0
| +--- com.google.firebase:firebase-common:11.6.0
| | +--- com.google.android.gms:play-services-basement:11.6.0 (*)
| | +--- com.google.android.gms:play-services-tasks:11.6.0
| | | +--- com.google.android.gms:play-services-basement:11.6.0 (*)
| | | \--- com.google.android.gms:play-services-tasks-license:11.6.0
| | \--- com.google.firebase:firebase-common-license:11.6.0
| +--- com.google.firebase:firebase-analytics-impl:11.6.0
| | +--- com.google.android.gms:play-services-basement:11.6.0 (*)
| | +--- com.google.firebase:firebase-iid:11.6.0
| | | +--- com.google.android.gms:play-services-basement:11.6.0 (*)
| | | +--- com.google.firebase:firebase-common:11.6.0 (*)
| | | +--- com.google.android.gms:play-services-tasks:11.6.0 (*)
| | | \--- com.google.firebase:firebase-iid-license:11.6.0
| | +--- com.google.firebase:firebase-common:11.6.0 (*)
| | +--- com.google.android.gms:play-services-tasks:11.6.0 (*)
| | \--- com.google.firebase:firebase-analytics-impl-license:11.6.0
| \--- com.google.firebase:firebase-analytics-license:11.6.0
\--- project :common-lib
(.............)
已编辑:
应用依赖
dependencies
implementation project(':common-lib')
common-lib 依赖项
dependencies
//android firebase
implementation "com.google.firebase:firebase-core:$firebase_version"
implementation "com.google.firebase:firebase-crash:$firebase_version"
implementation "com.google.firebase:firebase-messaging:$firebase_version"
implementation "com.google.firebase:firebase-ads:$firebase_version"
//android support
implementation "com.android.support:appcompat-v7:$support_version"
implementation "com.android.support:design:$support_version"
implementation "com.android.support:cardview-v7:$support_version"
implementation "com.android.support:percent:$support_version"
//others
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.hannesdorfmann:adapterdelegates3:3.0.1'
implementation 'net.danlew:android.joda:2.9.9'
implementation 'org.ocpsoft.prettytime:prettytime:4.0.1.Final'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.github.simbiose:Encryption:2.0.1'
//server
implementation files('libs/xxx.jar')
implementation files('libs/yyy.jar')
implementation files('libs/zzz.jar')
//tests
testImplementation 'junit:junit:4.12'
版本:
ext
firebase_version = '11.6.0'
support_version = '26.1.0'
【问题讨论】:
发布你的 app 依赖和你的 lib 依赖。 @Ibrahim 发布 您的 app 依赖项中包含com.google.firebase:firebase
库?
【参考方案1】:
以前,您似乎隐含地依赖 common-lib 模块将 Firebase SDK 导出到您的应用程序模块。现在您已从“编译”更改为“实现”,您不再导出这些 SDK。所以,现在发生的事情是这样的:google-services 插件正在将 v9.0.0 的 firebase-core 添加到您的应用模块中,因为它不再看到它出现在您的应用模块的可见类路径中。
您应该能够通过手动将 firebase-core 添加到正确版本的应用模块来解决此问题。或者,您可以继续将 Firebase SDK 从您的库模块导出到您的应用模块,方法是切换到“api”依赖项而不是“实现”依赖项。
【讨论】:
google-services
插件是否将firebase-core
添加到应用程序依赖项中?如果我将firebase-core
v.9 包含到依赖项中,这将是相同的行为吗?
这就是它的工作原理,是的。手动将正确的版本添加到您的应用中以强制所有版本匹配。【参考方案2】:
这对我有用:
将以下代码添加到您的构建脚本中
subprojects
project.configurations.all
resolutionStrategy.eachDependency details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') )
details.useVersion "version which should be used - in your case 11.6.0"
最好的问候,
艾迪
【讨论】:
不起作用,给出一个新错误“ > 无法为 org.gradle.api.Project 类型的项目 ':app' 获取未知属性 'resolutionStrategy'。”【参考方案3】:在*** gradle 文件上更改 google-services 的版本为我解决了这个问题。似乎旧版本间接注入 firebase-core 版本并显式更新 firebase 版本会产生冲突
classpath 'com.google.gms:google-services:4.0.2' // Just updated the version here.
【讨论】:
【参考方案4】:我将 compileSdkVersion 和 targetSdkVersion 升级到 28,我也遇到了同样的错误。
我将 app.gradle 中的所有依赖项版本升级到 28.0.0,并将项目 .gradle 文件中的 com.android.tools.build:gradle 升级到 3.3.2
即类路径 'com.android.tools.build:gradle:3.3.2'
此项目同步成功后
【讨论】:
【参考方案5】:subprojects
project.configurations.all
resolutionStrategy.eachDependency details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') )
details.useVersion "26.1.0"
将此代码放入您的项目gradle中
【讨论】:
以上是关于Android 依赖 '..' 对于编译 (..) 和运行时 (..) 类路径有不同的版本的主要内容,如果未能解决你的问题,请参考以下文章