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 依赖 '..' 对于编译 (..) 和运行时 (..) 类路径有不同的版本的主要内容,如果未能解决你的问题,请参考以下文章

6.2、Android Studio 添加编译依赖

自行搭建Android4.4编译环境

Android 依赖 'android.arch.lifecycle:runtime' 的编译和运行时版本不同

译Gradle 的依赖关系处理不当,可能导致你编译异常

android 依赖项更改后 Flutter 项目无法编译

Android APT编译时技术 ( 编译时注解 和 注解处理器 依赖库 )