协慌网

登录 贡献 社区

所有 com.android.support 库都必须使用完全相同的版本规范

更新到 android studio 2.3 后,我收到此错误消息。我知道这只是应用正常运行的提示,但确实很奇怪。

所有 com.android.support 库都必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本 25.1.1,24.0.0。示例包括 com.android.support:animated-vector-drawable:25.1.1 和 com.android.support:mediarouter-v7:24.0.0

在此处输入图片说明

我的 gradle:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.android.support:support-v4:25.1.1'
    compile 'com.android.support:design:25.1.1'
    compile 'com.android.support:recyclerview-v7:25.1.1'
    compile 'com.android.support:cardview-v7:25.1.1'
    compile 'com.google.android.gms:play-services-maps:10.2.0'
    compile 'com.google.android.gms:play-services:10.2.0'

    compile 'io.reactivex.rxjava2:rxjava:2.0.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'com.blankj:utilcode:1.3.6'
    compile 'com.orhanobut:logger:1.15'
    compile 'com.facebook.stetho:stetho:1.4.2'

    provided 'com.google.auto.value:auto-value:1.2'
    annotationProcessor 'com.google.auto.value:auto-value:1.2'
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5'

    compile 'com.mikepenz:iconics-core:2.8.2@aar'
    compile('com.mikepenz:materialdrawer:5.8.1@aar') { transitive = true }
    compile 'com.mikepenz:google-material-typeface:2.2.0.3.original@aar'
    compile 'me.zhanghai.android.materialprogressbar:library:1.3.0'
    compile 'com.github.GrenderG:Toasty:1.1.1'
    compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.8.0'
    compile 'com.github.MAXDeliveryNG:slideview:1.0.0'

    compile 'com.facebook.fresco:fresco:1.0.1'
    compile 'com.github.bumptech.glide:glide:3.7.0'

    compile 'com.google.maps.android:android-maps-utils:0.4.4'
    compile 'com.github.jd-alexander:library:1.1.0'
}

答案

您可以使用以下解决方案之一解决此问题:

更新:

从 Android Studio 3.0 开始,它变得更加容易,因为它现在显示了一个更有用的提示,因此我们只需要遵循此提示即可。
例如: 1]

所有 com.android.support 库都必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本 27.0.2、26.1.0。示例包括 com.android.support:animated-vector-drawable:27.0.2 和 com.android.support:customtabs:26.1.0

库,工具或库的某些组合不兼容或可能导致错误。一种不兼容的情况是使用不是最新版本的 Android 支持库版本进行编译(或者特别是低于目标 targetSdkVersion 的版本)。

解:
明确添加具有旧版本但具有新版本号的库。
就我而言com.android.support:customtabs:26.1.0所以我需要添加:

implementation "com.android.support:customtabs:27.0.2"

即:从第二项中获取库,并使用第一项中的版本号实现它。

注意:请不要忘记立即按同步,以便 gradle 可以重建依赖关系图并查看是否还有更多冲突。

说明:
错误消息可能会使您感到困惑,因为不使用customtabs所以我会有冲突!
很好.. 您没有直接使用它,但是您的一个库在内部使用了旧版本的customtabs ,因此您需要直接要求它。

如果您想知道哪个库是旧版本的原因,并且可能要求作者更新他的库(运行 Gradle 依赖性报告),请参阅旧答案以了解具体方法。

注意这个


旧答案:

CommonsWare 的启发答案

运行 Gradle 依赖性报告以查看完整的依赖性树是什么。

从那里,您将看到哪个库要求使用其他版本的 Android 支持库。无论要求什么,您都可以直接在 25.2.0 版本中要求它,或者使用 Gradle 的其他冲突解决方法来获得相同的版本。


更新:

从 gradle 插件版本开始:3.0 compile已被implementationapi取代,请参阅此答案以了解区别。

因此改用:

./gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

或对于 Windows cmd:

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

并搜索有冲突的版本。

对我来说,删除com.google.android.gms:play-services:10.2.0后,错误消失了

并且仅包含com.google.android.gms:play-services-location:10.2.0com.google.android.gms:play-services-maps:10.2.0因为它们是我使用的仅有的两个播放服务。

我认为gms:play-services依赖于支持库的某些旧组件,因此我们需要自己明确添加它们。


对于 AS 3.0 或更早的版本。

跑:

./gradlew -q dependencies <module-name>:dependencies --configuration implementation

例:

./gradlew -q dependencies app:dependencies --configuration implementation

如果有人知道新的 Gradle 插件中更好的方法,请告诉我。

  1. 转到文件系统上的project/.idea/libraries文件夹,查看哪些库不同。
  2. 您将必须在build.gradle文件中手动包含具有相同版本的这些库。
  3. 然后,同步您的项目。

例如:

compile 'com.android.support:appcompat-v7:25.2.0'

// Wrong library version found on 1st point
compile 'com.android.support:customtabs:25.2.0'

对于所有情况,不仅限于这些版本或库:

注意小信息窗口,该窗口说明有关错误的内容, 它指出了您必须更改和添加的示例

在这种情况下:

找到版本 25.1.1,24.0.0。示例包括 com.android.support:animated-vector-drawable:25.1.1 和 com.android.support:mediarouter-v7:24.0.0

您的

com.android.support:animated-vector-drawable:25.1.1

是 25.1.1 版 ,而您的

com.android.support:mediarouter-v7:24.0.0

版本为 24.0.0 ,因此您必须添加具有相同版本的 mediarouter:

com.android.support:mediarouter-v7:25.1.1

并针对小信息窗口显示的每个示例执行此操作, 在这种情况下, 所有不具有 25.1.1 版本的库。

修复指定的库后,必须同步 gradle 才能查看下一个必须更改的库和包。

重要:

如果您没有显式使用一个或多个指定的库,并且出现错误,则意味着该错误正在由另一个库在内部使用,无论如何都要显式编译它。

您还可以使用另一种方法查看您实际上正在编译的所有库的版本的差异(例如运行 gradle 依赖性报告或转到您的库文件), 真正的目标是编译您正在使用的所有库。相同的版本