更新到 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 开始,它变得更加容易,因为它现在显示了一个更有用的提示,因此我们只需要遵循此提示即可。
例如:
所有 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
已被implementation
或api
取代,请参阅此答案以了解区别。
因此改用:
./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.0
和com.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 插件中更好的方法,请告诉我。
project/.idea/libraries
文件夹,查看哪些库不同。 build.gradle
文件中手动包含具有相同版本的这些库。 例如:
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 依赖性报告或转到您的库文件), 真正的目标是编译您正在使用的所有库。相同的版本 。