【问题标题】:Android Studio 3.1: mixing versions can lead to runtime crashesAndroid Studio 3.1:混合版本可能导致运行时崩溃
【发布时间】:2018-04-20 20:38:54
【问题描述】:

最近升级到 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 less... (Ctrl+F1) 有一些库或工具和库的组合是不兼容的,或者可能导致错误。一种这样的不兼容性是使用不是最新版本的 Android 支持库版本进行编译(或者特别是低于您的 targetSdkVersion 的版本)。

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

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

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

【问题讨论】:

  • 在项目树的外部库列表中,support-media-compat 没有出现?除了com.android.application,你还有其他 Gradle 插件吗?
  • @CommonsWare 嗯,我在外部库列表中看到了 support-media-compat-26.1.0。我正在使用 playLicensing 库,在 gradle 中我看到了 apply plugin: 'com.android.library'

标签: android gradle android-gradle-plugin


【解决方案1】:

您需要通过将冲突的库添加到依赖项块来覆盖冲突的库

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'

【讨论】:

  • 谢谢 :) 真的很有帮助。奇怪的是谷歌一开始就没有修复它。我很好奇为什么。毕竟,他们应该只用依赖树运行 gradle 并找到流氓依赖。
【解决方案2】:

上述警告并非特定于媒体兼容依赖项。他们只是添加了示例来解释这个问题。通过为我添加 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'

【讨论】:

    【解决方案3】:

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

    找到版本 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`
    }
    

    【讨论】:

      【解决方案4】:

      当我将应用程序连接到 Firebase 时出现此错误。

      不需要添加任何东西。

      只需将鼠标光标放在错误行(下方)并按 Alt+Enter

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

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

      之后就是这个样子,

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

      【讨论】:

      • 我也在使用 firebase-core,这解决了我的警告。谢谢。
      • 很高兴! :-)
      【解决方案5】:

      对于版本26.1.0,某些依赖项(可能是 playLicensing)至少对 support-media-compat 具有传递依赖项。

      要解决这个问题:

      • 识别出现在“外部库”中早于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'
      

      【讨论】:

      • 这样我在进行 gradle 同步时得到以下信息:“org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:preDevproDebugBuild' ... 原因:java.lang .RuntimeException: Android 依赖 'com.android.support:support-media-compat' 对于编译 (26.1.0) 和运行时 (28.0.0-alpha1) 类路径有不同的版本。您应该通过 DependencyResolution 手动设置相同的版本"
      • @drmrbrewer: 嗯……你可以按照建议去做,虽然我没有使用过 Gradle 的那个特性,所以我不知道细节。您也可以尝试在 28.0.0-alpha1 上同时拥有 compileOnlyimplementation 依赖项,但我不知道这是否可行。
      • 好的,会试试的。为什么现在会发生这种情况?是 Android Studio 3.1 吗?还是 Android P 预览版?还是使用 28.0.0-alpha1 支持库?
      • @drmrbrewer:我不知道,抱歉。
      • 关键似乎是在 playLicensing 模块(和其他)中使用api 而不是implementation...最近我将它们全部从compile 更改为implementation,它是直到(我认为)我试用 P 预览版和相关支持库时都可以。所以看来我应该在每个模块中坚持api
      【解决方案6】:

      在我的情况下,我通过在错误行下方添加它来解决它。

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

      【讨论】:

        【解决方案7】:

        添加 build.grad (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'
        }
        

        【讨论】:

          【解决方案8】:

          就我而言,添加 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
          }
          

          【讨论】:

            【解决方案9】:

            您是否在项目中使用了 Firebase? 使用 firebase core 或 firebase app indexing 似乎是导致问题的原因。 我遇到了同样的问题,但是评论 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'
            

            【讨论】:

              【解决方案10】:

              我认为您的 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'
              

              【讨论】:

                猜你喜欢
                • 2017-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-06-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多