更新到android studio 2.3后,我收到了这个错误消息。我知道这只是一个提示,因为应用程序运行正常,但这真的很奇怪。
所有com.android.support库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本25.1.1、24.0.0。示例包括com.android.support:animatedvector-drawable:25.1.1和com.android.com/support:mediarouter-v7:24.0.0
我的成绩:
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.x非常简单。
只需复制低于当前版本的版本,然后使用与当前版本相同的版本号显式添加。
实例
找到版本27.1.1、27.1.0。示例包括com.android.support:animatedvector-drawable:27.1.1和com.android.com/support:exifinterface:27.1.0
只需复制版本com.android.support:exifinterface:27.1.0并将其更改为com.android.com/support:exifinterface:227.1.1,使其与当前使用的版本相同,然后将其添加到gradle依赖项中,如下所示。
implementation 'com.android.support:exifinterface:27.1.1'
注意:完成后,不要忘记单击编辑器顶部的“立即同步”。
所有com.android.support库必须使用完全相同的版本规范(混合版本可能导致运行时崩溃)。找到版本25.1.1、24.0.0。示例包括com.android.support:animatedvector-drawable:25.1.1和com.android.com/support:mediarouter-v7:24.0.0
当我们使用Google Play Services时,通常会出现此警告,因为它使用支持库作为依赖项。
我们大多数人都不知道我们可以覆盖Google Play Services中使用的支持库。当我们使用以下依赖项时:
implementation "com.android.support:animated-vector-drawable:25.1.1"
它隐含地依赖于com.android.support:mediarouter-v7:25.1.1。但它与谷歌Play服务的依赖性冲突,后者是com.android.support:mediarouter-v7:24.0.0。因此,我们需要通过显式使用库来重写它:
implementation "com.android.support:mediarouter-v7:25.1.1"
然后,依赖项块将包括这两个项,如下所示:
dependencies {
implementation "com.android.support:animated-vector-drawable:25.1.1"
implementation "com.android.support:mediarouter-v7:25.1.1"
...
}
以下是修复此警告的流程
建筑物玻璃
android {
compileSdkVersion ... // must same version (ex: 26)
...
}
dependencies {
...
compile 'any com.android.support... library' // must same version (ex: 26.0.1)
compile 'any com.android.support... library' // must same version (ex: 26.0.1)
...
compile ('a library B which don't use 'com.android.support...' OR use SAME version of 'com.android.support'){
// do nothing
}
...
compile ('a library C which use DIFFERENT 'com.android.support...' (ex:27.0.1) {
// By default, if use don't do anything here your app will choose the higher com.android.support... for whole project (in this case it is 27.0.1)
// If you want to use 26.0.1 use
exclude group: 'com.android.support', module: '...' (ex module: 'appcompat-v7')
exclude group: 'com.android.support', module: 'another module'
...
// If you want to use 27.0.1 do
Upgrade `compileSdkVersion` and all 'com.android.support' to 27.0.1.
(It may be a good solution because the best practice is always use latest `compileSdkVersion`.
However, use 26 or 27 is base on you for example higher library may have bug)
}
}
查看/验证应用程序中所有库的依赖关系打开终端并运行/gradlew应用程序:依存关系
要查看应用程序中特定库的依赖项,请遵循以下教程:-如何在Gradle中排除特定依赖项的依赖项
希望能有所帮助
A) 运行渐变相关性或/gradlew相关性
B) 查看您的树,找出您的哪个依赖项正在为您无法控制的依赖项指定不同的支持库版本。
我没有意识到,如果您自己的代码完全不使用依赖项,则还会显示此警告。在我的例子中,Facebook指定了一些我没有使用的支持库,你可以在下面看到,大多数依赖项都被我自己的25.2.0规范覆盖了,用->X.X.X(*)符号表示。卡视图和自定义选项卡库没有被任何人覆盖,所以我需要自己为这些库请求25.2.0,即使我不使用它们。
+--- com.facebook.android:facebook-android-sdk:4.17.0
| +--- com.android.support:support-v4:25.0.0 -> 25.2.0 (*)
| +--- com.android.support:appcompat-v7:25.0.0 -> 25.2.0 (*)
| +--- com.android.support:cardview-v7:25.0.0
| | \--- com.android.support:support-annotations:25.0.0 -> 25.2.0
| +--- com.android.support:customtabs:25.0.0
| | +--- com.android.support:support-compat:25.0.0 -> 25.2.0 (*)
| | \--- com.android.support:support-annotations:25.0.0 -> 25.2.0
| \--- com.parse.bolts:bolts-android:1.4.0 (*)
如果gradle已经警告过你并给了你一些例子。。。
示例包括com.android.support:animatedvector-drawable:25.1.1和com.android.support:mediarouter-v7:24.0.0
…如果为较低版本添加一些grep高亮显示,这会更容易,因为gradle依赖关系可能非常冗长:
./gradlew dependencies | grep --color -E 'com.android.support:mediarouter-v7|$'