在添加Firebase后,所有com.android.support库必须使用完全相同的版本规范。

3

我的Android Studio显示了这个错误。

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

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.firebase:firebase-core:15.0.0'

3
看起来com.google.firebase:firebase-core:15.0.0依赖于较旧的支持库。已经发布了15.0.2版本,可能是基于最新的支持库。同时,你有两个选择 - 忽略这条消息(它实际上不是一个错误,而是一个警告),或将你使用的支持库版本降级至26.1.0 - Vladyslav Matviienko
1
我会把它作为答案。 - Vladyslav Matviienko
3
不应将支持库版本降级,因为这不是解决方案。相反,您可以从Firebase中排除支持组。 - Kruti Parekh
好的,稍等一下。 - Kruti Parekh
显示剩余2条评论
3个回答

5

如果我们直接使用最新版本的库,它会覆盖 Firebase 依赖库的版本,对吧? - Vladyslav Matviienko
没错。但这只适用于Firebase。还没有使用其他库进行测试。 - ישו אוהב אותך
它可能还会导致 :app:transformDexArchiveWithExternalLibsDexMergerForDebug 运行时异常。因此最好将其排除,然后再添加作为安全措施。 - Kruti Parekh
如果引起以上的异常,那么您需要按照这里的回答进行操作: https://dev59.com/1FUL5IYBdhLWcg3wi4iT - Peter Haddad
@parekhkruti26 这个问题可能可以通过PeterHaddad的答案来解决。在我看来,排除(excluding)的作用与重写(overriding)是一样的,但重写做得更好。 - ישו אוהב אותך
新的google-services插件在使用多模块、数据绑定等方面存在一些问题(其他我不知道的也有)。问题跟踪链接 - Kruti Parekh

3

看起来像 com.google.firebase:firebase-core:15.0.0 依赖于较老的支持库版本 (26.1.0)。
已经发布了 15.0.2 版本,因此您可以尝试:

  • 使用 15.0.2 版本的 Firebase Core。可能基于最新的支持库。
  • 忽略此警告,因为这只是一个警告,而不是错误,并且您的应用程序可能正常工作。 (不建议,但可能有效)
  • 降级到使用支持库版本 26.1.0,使它们成为相同的版本,至少在谷歌发布基于最新支持库版本的 Firebase 之前。 (如果方案#1未成功,则推荐此方式)

非常详细! - IntelliJ Amiya

1
当您运行./gradlew :app:dependencies时,您可以了解到在Gradle中包含的库的传递依赖关系。
从层次结构视图中,可以发现哪些库依赖于旧版本,并且可以在Gradle中使用exclude排除它们,如下所示:
 exclude group:'com.android.support'//as an example support library is excluded

就这个问题而言,可以这样做:
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation ('com.google.firebase:firebase-core:15.0.2'){
    exclude group:'com.android.support'
}

在这里,支持库被排除了,因为Firebase核心依赖于较旧的版本,造成了冲突。
注意:
如果您的依赖不包括您已经排除的库,但是您已经排除的依赖需要它,则可以使用兼容版本在gradle中添加被排除的库。

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