【问题标题】:Gradle error after upgrading to AndoidX the latest Android Gradle Plugin升级到 AndoidX 最新的 Android Gradle 插件后出现 Gradle 错误
【发布时间】:2020-01-08 19:52:18
【问题描述】:

升级到最新的 AndroidX 库和 Android Gradle 插件后,当我在我的项目上运行 lint 时,lint 构建失败。

这一切都始于最新的 Android Gradle 插件在构建我的项目时抱怨程序类型已经存在:com.google.common.util.concurrent.ListenableFuture

以下是错误:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:lint'.
> Could not resolve all artifacts for configuration ':app:debugAndroidTestRuntimeClasspath'.
   > Could not resolve com.google.guava:guava:23.6-android.
     Required by:
         project :app
      > Cannot find a version of 'com.google.guava:guava' that satisfies the version constraints: 
           Dependency path 'Code Base:app:unspecified' --> 'androidx.test.ext:truth:1.1.0' --> 'com.google.guava:guava:26.0-android'
           Dependency path 'Code Base:app:unspecified' --> 'com.google.truth:truth:0.42' --> 'com.google.guava:guava:25.1-android'
           Dependency path 'Code Base:app:unspecified' --> 'androidx.room:room-guava:2.1.0-alpha03' --> 'com.google.guava:guava:23.6-android'
           Dependency path 'Code Base:app:unspecified' --> 'com.google.api-client:google-api-client:1.25.0' --> 'com.google.guava:guava:20.0'
           Dependency path 'Code Base:app:unspecified' --> 'androidx.test.ext:truth:1.1.0' --> 'com.google.truth:truth:0.42' --> 'com.google.guava:guava:25.1-android'
           Constraint path 'Code Base:app:unspecified' --> 'com.google.guava:guava' strictly '23.6-android' because of the following reason: debugRuntimeClasspath uses version 23.6-android
           Constraint path 'Code Base:app:unspecified' --> 'com.google.guava:guava' strictly '23.6-android' because of the following reason: debugRuntimeClasspath uses version 23.6-android
           Constraint path 'Code Base:app:unspecified' --> 'com.google.guava:guava' strictly '23.6-android' because of the following reason: debugRuntimeClasspath uses version 23.6-android
           Constraint path 'Code Base:app:unspecified' --> 'com.google.guava:guava' strictly '23.6-android' because of the following reason: debugRuntimeClasspath uses version 23.6-android

   > Could not resolve org.checkerframework:checker-compat-qual:2.0.0.
     Required by:
         project :app
      > Cannot find a version of 'org.checkerframework:checker-compat-qual' that satisfies the version constraints: 
           Dependency path 'Code Base:app:unspecified' --> 'com.google.truth:truth:0.42' --> 'org.checkerframework:checker-compat-qual:2.5.3'
           Dependency path 'Code Base:app:unspecified' --> 'androidx.test.ext:truth:1.1.0' --> 'com.google.guava:guava:26.0-android' --> 'org.checkerframework:checker-compat-qual:2.5.2'
           Dependency path 'Code Base:app:unspecified' --> 'androidx.test.ext:truth:1.1.0' --> 'com.google.truth:truth:0.42' --> 'org.checkerframework:checker-compat-qual:2.5.3'
           Constraint path 'Code Base:app:unspecified' --> 'org.checkerframework:checker-compat-qual' strictly '2.0.0' because of the following reason: debugRuntimeClasspath uses version 2.0.0
           Constraint path 'Code Base:app:unspecified' --> 'org.checkerframework:checker-compat-qual' strictly '2.0.0' because of the following reason: debugRuntimeClasspath uses version 2.0.0
           Constraint path 'Code Base:app:unspecified' --> 'org.checkerframework:checker-compat-qual' strictly '2.0.0' because of the following reason: debugRuntimeClasspath uses version 2.0.0
           Constraint path 'Code Base:app:unspecified' --> 'org.checkerframework:checker-compat-qual' strictly '2.0.0' because of the following reason: debugRuntimeClasspath uses version 2.0.0

   > Could not resolve com.google.errorprone:error_prone_annotations:2.1.3.
     Required by:
         project :app

我尝试了以下内容,但它不起作用:

subprojects {
    project.configurations.all {

        exclude group: 'com.google.guava', module: 'failureaccess'


        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "26.1.0"
            }

            if('guava' == details.requested.name) {
                details.useVersion '27.0-android'
            }

        }
    }
}

我可以知道错误的含义以及如何解决吗? 谢谢。

【问题讨论】:

  • 这本身并不是一个 lint 错误。 Lint 只是试图编译你所有的模块和测试,你在 Guava 上遇到了依赖冲突。我更新了你的一些原始问题。

标签: android android-studio guava androidx


【解决方案1】:

检查您没有重复的变体依赖项。例如:

implementation 'com.google.truth:truth:0.42' 
...
androidTestImplementation 'com.google.truth:truth:0.42' 

【讨论】:

    【解决方案2】:

    我也在尝试解决这个问题,对我来说这是由于新的 Google 地方库:

    implementation "com.google.android.libraries.places:places:1.0.0"

    导致androidTest 下的测试失败。

    作为一种解决方法,我将此添加到build.gradle

    configurations {
        androidTestImplementation.exclude module: 'guava'
        androidTestImplementation.exclude module: 'error_prone_annotations'
        androidTestImplementation.exclude module: 'checker-qual'
    }
    

    修复了 lint 和 Android 测试。不过还不确定后果。

    编辑:在您的情况下,您可能需要输入 checker-compat-qual 而不是 checker-qual

    【讨论】:

    • 您好 limdale,感谢您的大力帮助。您的解决方案适用于我解决我的 android 测试错误。对于那些遇到与我相同的错误的人......最终我把它放在我的 build.gradle 配置中 { androidTestImplementation.exclude 模块:'guava' androidTestImplementation.exclude 模块:'error_prone_annotations' androidTestImplementation.exclude 模块:'checker-compat-qual ' all*.exclude 组:'com.google.guava',模块:'listenablefuture' }
    【解决方案3】:

    改变

    details.useVersion '27.0-android'
    

    details.useVersion '23.6-android'
    

    因为错误消息Could not resolve com.google.guava:guava:23.6-android. 告诉它需要版本23.6-android

    【讨论】:

    • 如果与当前帖子无关,请关闭当前问题并针对新错误发布单独的问题。我会去新线程看看。谢谢
    • 您好,感谢您的回复。我已经尝试并创建了另一组新的错误:出了什么问题:无法确定任务':app:lint'的依赖关系。 > 无法解析配置“:app:releaseRuntimeClasspath”的所有任务依赖关系。 > 无法解析 com.google.firebase:firebase-iid:[17.0.4]。 ... > 无法解析 com.google.android.gms:play-services-measurement-base:[16.3.0]。 要求:project :app > com.google.firebase :firebase-core:16.0.7 > ** 如何解决上述错误? **
    • 查看这个关于google play services version issue的帖子
    • 更新:清除缓存后,清理项目并再次运行上面的答案(即更改为23.6-android),我恢复了原来的错误,仍然说...无法解决com.google.guava:guava:23.6-android.
    【解决方案4】:

    把这个放在 App 模块中的 Build.gradle 上

    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
    

    【讨论】:

    • 这不是 lint 问题,而是依赖冲突
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2019-03-07
    • 2021-12-02
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多