android - 如何解决由 gradle 插件创建的依赖冲突?

标签 android firebase android-gradle-plugin google-play-services android-8.0-oreo

我正在尝试为 Android O 更新我的应用程序,这样做需要更新以支持库 26。

我的compileSdkVersion是26,targetSdkVersion是26,buildToolsVersion是26.0.1,支持库版本是26.0.1,play services/firebase messaging是11.0.4。我正在使用 Android Studio 3.0 b2 和 android gradle 插件 3.0.0-beta2。看来此版本对支持库冲突更为敏感。

我不得不手动排除支持依赖项以解决冲突,因为播放服务和 firebase 链接针对旧版本的支持库:

implementation("com.google.android.gms:play-services-auth:$playServicesVersion",{
    exclude group: 'com.android.support'
})

implementation("com.google.android.gms:play-services-identity:$playServicesVersion",{
    exclude group: 'com.android.support'
})

implementation("com.google.android.gms:play-services-base:$playServicesVersion",{
    exclude group: 'com.android.support'
})

implementation("com.google.android.gms:play-services-analytics:$playServicesVersion",{
    exclude group: 'com.android.support'
})

implementation("com.google.firebase:firebase-messaging:$playServicesVersion",{
    exclude group: 'com.android.support'
})

implementation("com.google.firebase:firebase-analytics:$playServicesVersion",{
    exclude group: 'com.android.support'
})

这解决了我所有的依赖冲突,除了一个。

Google Play 服务/Firebase 需要使用 google-services gradle 插件来解析生成的 .json 文件并在应用中包含必要的 key / secret 。我的 build.grade 有一个像这样的 buildscript block :

buildscript {
    repositories {
        maven { url "https://maven.google.com" }
        jcenter()
    }

    dependencies {
        classpath "com.google.gms:google-services:3.1.0"
    }
}

在脚本的末尾,我应用了插件。注释掉 apply 和 classpath 后,一切都可以正确编译。然而,google-services 3.1.0 似乎添加了对支持库版本 25.2.0 的依赖,我一直无法弄清楚如何覆盖它。消息是:

  • What went wrong: Execution failed for task ':app:preDevelopmentDebugBuild'.

    Android dependency 'com.android.support:support-v4' has different version for the compile (25.2.0) and runtime (26.0.1) classpath. You should manually set the same version via DependencyResolution

请注意,我什至无法降级到支持库 25.4.0,因为我遇到了同样的错误(只需将上面消息中的 26.0.1 替换为 25.4.0)。唯一可用的版本是 25.2.0

运行 ./gradlew app:dependencies 并包含类路径依赖项,给我这个:

compile - Compile dependencies for 'main' sources (deprecated: use 'implementation' instead).
\--- com.google.firebase:firebase-core:11.0.4
     \--- com.google.firebase:firebase-analytics:[11.0.4] -> 11.0.4
          +--- com.google.firebase:firebase-analytics-impl:[11.0.4] -> 11.0.4
          |    +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4
          |    |    \--- com.android.support:support-v4:25.2.0
          |    |         +--- com.android.support:support-compat:25.2.0
          |    |         |    \--- com.android.support:support-annotations:25.2.0
          |    |         +--- com.android.support:support-media-compat:25.2.0
          |    |         |    +--- com.android.support:support-annotations:25.2.0
          |    |         |    \--- com.android.support:support-compat:25.2.0 (*)
          |    |         +--- com.android.support:support-core-utils:25.2.0
          |    |         |    +--- com.android.support:support-annotations:25.2.0
          |    |         |    \--- com.android.support:support-compat:25.2.0 (*)
          |    |         +--- com.android.support:support-core-ui:25.2.0
          |    |         |    +--- com.android.support:support-annotations:25.2.0
          |    |         |    \--- com.android.support:support-compat:25.2.0 (*)
          |    |         \--- com.android.support:support-fragment:25.2.0
          |    |              +--- com.android.support:support-compat:25.2.0 (*)
          |    |              +--- com.android.support:support-media-compat:25.2.0 (*)
          |    |              +--- com.android.support:support-core-ui:25.2.0 (*)
          |    |              \--- com.android.support:support-core-utils:25.2.0 (*)
          |    +--- com.google.firebase:firebase-iid:[11.0.4] -> 11.0.4
          |    |    +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*)
          |    |    \--- com.google.firebase:firebase-common:[11.0.4] -> 11.0.4
          |    |         +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*)
          |    |         \--- com.google.android.gms:play-services-tasks:[11.0.4] -> 11.0.4
          |    |              \--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*)
          |    +--- com.google.firebase:firebase-common:[11.0.4] -> 11.0.4 (*)
          |    \--- com.google.android.gms:play-services-tasks:[11.0.4] -> 11.0.4 (*)
          +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*)
          \--- com.google.firebase:firebase-common:[11.0.4] -> 11.0.4 (*)

最佳答案

configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '26.0.1'
                }
            }
        }
    }

像这样,您的支持库应该都使用相同的版本编译。只需将模块级 Gradle 构建脚本中的代码段添加到依赖项即可。

关于android - 如何解决由 gradle 插件创建的依赖冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45675715/

相关文章:

android - Firebase OnSuccessListener 在应该失败时被调用

java - 单击 recyclerView 中的下一个按钮后加载下一个项目

Firebase 规则自行重置

java - 如何设置 vector 资源的颜色?

java - Retrofit 2 展开信封错误

Android 10 - 作为存储在应用主目录中的子进程启动可执行文件的替代方法

android - 错误 :com. android.builder.dexing.DexArchiveBuilderException : Failed to process guava-21. 0.jar Android 3.1 Dev Channel

Android注解和单元测试

添加新库后,Android Studio 构建速度变慢?

android - 为什么有些手机出现 "This app has been built with an incorrect configuration"错误?