Android Studio 3.1:混用版本可能导致运行时崩溃。

18

最近升级到了Android Studio 3.1,并同时尝试使用Android P预览版。

编译时出现以下错误:

所有的com.android.support库必须使用完全相同的版本规范(混用版本可能导致运行时崩溃)。发现版本为28.0.0-alpha1和26.1.0。例如,com.android.support:animated-vector-drawable:28.0.0-alpha1和com.android.support:support-media-compat:26.1.0等...(Ctrl + F1)还有一些库或工具与库的组合是不兼容的,或者可能会导致错误。其中一个不兼容之处是使用不是最新版本(特别是低于targetSdkVersion的版本)的Android支持库进行编译。

但我在任何地方都没有看到26.1.0的实例。在我的gradle中,我只有:

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
implementation 'com.android.support:design:28.0.0-alpha1'

我已经尝试清除缓存、重建应用等等,但错误仍然存在。


2
在项目树中的“外部库”列表中,support-media-compat没有显示出来吗?除了com.android.application之外,您是否安装了任何Gradle插件? - CommonsWare
@CommonsWare 嗯,我在“外部库”列表中看到了“support-media-compat-26.1.0”。我正在使用“playLicensing”库,在该库的Gradle文件中,我看到了“apply plugin:'com.android.library'”。 - drmrbrewer
10个回答

45

你需要通过将有冲突的库添加到依赖块中来覆盖有冲突的库。

dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
implementation 'com.android.support:customtabs:28.0.0-alpha1'
implementation 'com.android.support:support-vector-drawable:28.0.0-alpha1'
implementation 'com.android.support:support-media-compat:28.0.0-alpha1'
implementation 'com.android.support:support-v4:28.0.0-alpha1'

1
谢谢:) 真的帮了很多忙。奇怪的是 Google 为什么不在一开始就修复它呢。我很好奇为什么。毕竟,他们应该只是运行 gradle 和依赖树,并找到流氓依赖项。 - Maneki Neko

16

上述警告与media-compat依赖项无关,它们只是添加了示例以解释此问题。对我来说,通过添加v4库,问题得到了解决。

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

除此之外

implementation 'com.android.support:appcompat-v7:28.0.0'
不需要包括
implementation 'com.android.support:animated-vector-drawable:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0'

11

您需要通过将冲突的库添加到依赖块中来覆盖这些冲突的库。例如,从错误日志中,您会发现以下内容:

找到版本28.0.0-alpha1、26.1.0。例如, com.android.support:animated-vector-drawable:28.0.0-alpha1和 com.android.support:support-media-compat:26.1.0 等...

您可以通过添加类似以下代码的库文件来消除错误:

dependencies {
   implementation 'com.android.support:animated-vector-drawable:28.0.0-alpha1`
   implementation 'com.android.support:support-media-compat:28.0.0-alpha1`
}

7

当我将应用连接到Firebase时,出现了这个错误。

不需要添加任何东西。

只需将鼠标光标放在错误行(下面一行)处,然后按Alt + Enter。

(implementation 'com.android.support:appcompat-v7:28.0.0')

在列表中选择第一个选项(noinspection)。

之后它会变成这样,

//noinspection GradleCompatible implementation 'com.android.support:appcompat-v7:28.0.0'


1
我也在使用firebase-core,这解决了我的警告问题。谢谢。 - Mr Chops
很高兴! :-) - Sujeewa K. Abeysinghe

3

某些依赖项(可能是playLicensing)对至少support-media-compat版本为26.1.0的传递依赖项有依赖关系。

要解决此问题:

  • 识别“External Libraries”中出现的每个Support Library构件,其版本早于28.0.0-alpha1。根据错误,较旧的那些应该都是26.1.0,并且它至少是support-media-compat

  • 针对每个这样的依赖项,在您的依赖关系中添加自己的implementation行,请求该构件,但版本为28.0.0-alpha1。这将使Gradle使用新的构件,而这恰好是您想要的。

  • 希望依赖于这些较旧构件的任何内容都能够存活下来,并与新构件一起工作。

因此,最少需要添加以下内容:

implementation 'com.android.support:support-media-compat:28.0.0-alpha1'

1
执行 gradle 同步时,我得到了以下错误信息:"org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:preDevproDebugBuild' ... Caused by: java.lang.RuntimeException: Android 依赖项 'com.android.support:support-media-compat' 在编译时(版本为 26.1.0)和运行时(版本为 28.0.0-alpha1)的类路径中有不同的版本。您应该通过 DependencyResolution 手动设置相同的版本。" - drmrbrewer
@drmrbrewer:嗯...你可以尝试遵循这个建议,但我没有使用过Gradle的那个功能,所以我不知道详情。你也可以尝试在28.0.0-alpha1上同时拥有compileOnlyimplementation依赖项,但我不知道是否有效。 - CommonsWare
好的,我会尝试翻译。为什么现在会发生这种情况?是Android Studio 3.1的原因吗?还是Android P预览版?或者是使用了28.0.0-alpha1支持库的缘故? - drmrbrewer
@drmrbrewer:抱歉,我不知道。 - CommonsWare
关键似乎是在playLicensing模块(以及其他模块)中使用api而不是implementation... 最近我将它们全部从compile更改为implementation,一切都很好,直到(我认为)我尝试了P预览和相关支持库。因此,每个模块中都应该坚持使用api - drmrbrewer
显示剩余6条评论

2

在 build.gradle (Module.app) 文件中添加依赖项。

dependencies {
 //noinspection GradleCompatible
 implementation 'com.android.support:appcompat-v7:28.0.0'
 implementation 'com.android.support:animated-vector-drawable:28.0.0'
 implementation 'com.android.support:support-media-compat:28.0.0'
}

2
在我的情况下,我通过在错误行下面添加以下内容来解决它。"最初的回答"。
implementation 'com.android.support:support-media-compat:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'

1
在我的情况下,添加support-v4帮助我摆脱了警告。
dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:animated-vector-drawable:28.0.0'
    implementation 'com.android.support:support-media-compat:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'

    // other dependencies
}

0
你的项目中使用了Firebase吗? 使用Firebase核心或Firebase应用索引似乎会导致问题。 我之前也遇到了同样的问题,但是注释掉Firebase包后错误就消失了。
//    implementation 'com.google.firebase:firebase-core:16.0.8'
//    implementation 'com.google.firebase:firebase-ads:17.2.0'
//    implementation 'com.google.firebase:firebase-appindexing:17.1.0'

0

我认为你的gradle文件有以下依赖项。将其添加到您的应用程序级别的build.gradle中。

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
implementation 'com.android.support:mediarouter-v7:28.0.0-alpha1'
implementation 'com.android.support:support-vector-drawable:28.0.0-alpha1'
implementation 'com.android.support:support-v4:28.0.0-alpha1'

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