Android Studio的play-services-ads:12.0.1与appcompat-v7:27.1.0存在冲突。

4

我正在使用 Google ADS SDK 构建一个应用程序,一切都很正常,直到今天接到通知更新 Android Studio。随着更新,我也被提示将 Gradle 更新到 4.4 版本,并将所有支持库版本更新为 27.1.0。

implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.google.android.gms:play-services-ads:12.0.1'

然后我遇到了Gradle错误,显示“Android依赖'com.android.support:support-v4'在编译(26.1.0)和运行时(27.1.0)类路径中具有不同版本。您应该通过DependencyResolution手动设置相同的版本。”
我搜索了我的代码,没有一个单词可以匹配“26.1.0”。我也尝试删除所有的build/gradle缓存,但仍然无法解决这个问题。所以我使用“gradlew.bat -q dependencies”来发现似乎ADS库有错误的依赖。
这两行非常可疑:
+--- com.android.support:support-v4:26.1.0
+--- com.android.support:support-media-compat:26.1.0

与其他依赖项设置相比较

+--- project :MyAdsProject
+--- com.android.support:appcompat-v7:27.1.0
|    +--- com.android.support:support-annotations:27.1.0
|    +--- com.android.support:support-core-utils:27.1.0
|    |    +--- com.android.support:support-annotations:27.1.0
|    |    \--- com.android.support:support-compat:27.1.0
|    |         +--- com.android.support:support-annotations:27.1.0
|    |         \--- android.arch.lifecycle:runtime:1.1.0
|    |              +--- android.arch.lifecycle:common:1.1.0
|    |              \--- android.arch.core:common:1.1.0
|    +--- com.android.support:support-fragment:27.1.0
|    |    +--- com.android.support:support-compat:27.1.0 (*)
|    |    +--- com.android.support:support-core-ui:27.1.0
|    |    |    +--- com.android.support:support-annotations:27.1.0
|    |    |    +--- com.android.support:support-compat:27.1.0 (*)
|    |    |    \--- com.android.support:support-core-utils:27.1.0 (*)
|    |    +--- com.android.support:support-core-utils:27.1.0 (*)
|    |    +--- com.android.support:support-annotations:27.1.0
|    |    +--- android.arch.lifecycle:livedata-core:1.1.0
|    |    |    +--- android.arch.lifecycle:common:1.1.0
|    |    |    +--- android.arch.core:common:1.1.0
|    |    |    \--- android.arch.core:runtime:1.1.0
|    |    |         \--- android.arch.core:common:1.1.0
|    |    \--- android.arch.lifecycle:viewmodel:1.1.0
|    +--- com.android.support:support-vector-drawable:27.1.0
|    |    +--- com.android.support:support-annotations:27.1.0
|    |    \--- com.android.support:support-compat:27.1.0 (*)
|    \--- com.android.support:animated-vector-drawable:27.1.0
|         +--- com.android.support:support-vector-drawable:27.1.0 (*)
|         \--- com.android.support:support-core-ui:27.1.0 (*)
\--- com.google.android.gms:play-services-ads:12.0.1
     +--- com.google.android.gms:play-services-ads-lite:12.0.1
     |    +--- com.google.android.gms:play-services-basement:12.0.1
     |    |    +--- com.android.support:support-v4:26.1.0
     |    |    |    +--- com.android.support:support-compat:26.1.0 -> 27.1.0 (*)
     |    |    |    +--- com.android.support:support-media-compat:26.1.0
     |    |    |    |    +--- com.android.support:support-annotations:26.1.0 -> 27.1.0
     |    |    |    |    \--- com.android.support:support-compat:26.1.0 -> 27.1.0 (*)
     |    |    |    +--- com.android.support:support-core-utils:26.1.0 -> 27.1.0 (*)
     |    |    |    +--- com.android.support:support-core-ui:26.1.0 -> 27.1.0 (*)
     |    |    |    \--- com.android.support:support-fragment:26.1.0 -> 27.1.0 (*)
     |    |    \--- com.google.android.gms:play-services-basement-license:12.0.1
     |    \--- com.google.android.gms:play-services-ads-lite-license:12.0.1
     +--- com.google.android.gms:play-services-basement:12.0.1 (*)
     +--- com.google.android.gms:play-services-gass:12.0.1
     |    +--- com.google.android.gms:play-services-basement:12.0.1 (*)
     |    \--- com.google.android.gms:play-services-gass-license:12.0.1
     \--- com.google.android.gms:play-services-ads-license:12.0.1

有人知道如何摆脱这个问题吗?ADS 12.0.1已经是最新版本了。

2个回答

5
在你的应用级别的build.gradle文件中:
android {
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-v4:27.1.1'
    }
}

这将告诉您的gradle配置强制选择并应用support-v4:27.1.1在所有导入它的地方!
希望这可以帮助您!

谢谢,它运行良好。那么,26.1.0 -> 27.1.0 (*) 是否意味着它依赖于 26.1.0+,但 26.1.0 只是指确切的版本?这是 ADS SDK 的一个错误吗? - Robin
不,这意味着它找到了版本26.1.0和27.1.0,但应用的版本是27.1.0,因为您已经指定了支持appcompat。 - Sneh Pandya
我尝试添加自己的依赖项(虽然在我的代码中没有引用),并删除resolutionStrategy.force配置,它仍然可以工作。所以我猜想,我得到错误的原因是因为我从未指定supportv4和mediacompat的任何依赖关系,因此它使用ADS SDK的默认配置,即26.1.0。对吗? - Robin
确切地说,当我们没有明确指定依赖项并且如果它找到相同的内部依赖项,则会使用已经找到的依赖项。 - Sneh Pandya
我曾经遇到过同样的问题,但是使用play-services-location 12.0.1解决了它。谢谢。就个人而言,我认为这是一种错误,多年来我一直在开发Android并每隔几个月升级库,从未遇到过这种情况。我甚至有另一个具有相同依赖项的项目,而且没有必要进行此修复即可正常工作。自API 27和/或AS 3.1以来,发生了一些奇怪或不同的事情。 - Nublodeveloper

0

我可以通过将这个添加到我的依赖项来解决这个问题。

implementation 'com.android.support:support-v4:28.0.0'

或者

在你的应用 gradle 中添加这段代码

android {
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-v4:28.0.0'
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接