"All android libraries must use the exact same version" 警告 虽然它们是一样的

"All android libraries must use the exact same version" warning Although they are same

您好,我正在尝试将 Glide 库从 3.8.0 迁移到 4.5.0 更新后我收到此警告:

All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 27.0.2, 26.1.0. Examples include com.android.support:support-compat:27.0.2 and com.android.support:animated-vector-drawable:26.1.0

我的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    dexOptions {
        preDexLibraries = false
        javaMaxHeapSize "4g"
    }
    defaultConfig {
        applicationId "maa.myapp"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 45
        versionName "4.1.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
    }
}
android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}
dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    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'
    })
    //notifications
    compile 'com.android.support:recyclerview-v7:26.1.0'
    compile 'com.android.support:appcompat-v7:26.1.0'
    compile 'com.android.support:design:26.1.0'
    compile 'com.github.chrisbanes:PhotoView:2.1.3'
    compile 'com.android.support:cardview-v7:26.1.0'
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.android.support:multidex:1.0.2'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.github.bumptech.glide:glide:4.5.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.daimajia.slider:library:1.1.5@aar'
    compile 'com.google.android.gms:play-services-ads:11.8.0'
    compile 'com.google.firebase:firebase-core:11.8.0'
    compile 'com.google.firebase:firebase-messaging:11.8.0'
    compile 'com.firebase:firebase-jobdispatcher:0.6.0'
    compile 'com.vodyasov:amr:0.5'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
    compile 'com.google.guava:guava:23.6-android'
    testCompile 'junit:junit:4.12'
    compile 'com.squareup:otto:1.3.8'
}
apply plugin: 'com.google.gms.google-services'

在同一个项目中引用不同版本的库时会出现此警告。

现在深入了解项目正在使用哪些不同版本的库,只需 运行 以下命令,您将获得完整的依赖关系树:

./gradlew app:dependencies

如果你不想移动到支持库 27,你应该从 Glide 中排除支持库

dependencies {
   compile ("com.github.bumptech.glide:glide:4.5.0") {
          exclude group: "com.android.support"
   }
   ...
}

来自 Glide 文档:

Support Library Version - Glide uses support library version 27.

If you need or would prefer to use a different version of the support library you should exclude "com.android.support" from your Glide dependency in your build.gradle file.

随着 Glide 4.0.0 RC0 的发布,glide 开始使用支持库版本 27。目前,Glide 可用的稳定版本是 Glide 4.5.0,它使用以下依赖项,

com.android.support:support-annotations:27.0.2
com.android.support:support-compat:27.0.2
com.android.support:support-core-ui:27.0.2
com.android.support:support-core-utils:27.0.2
com.android.support:support-fragment:27.0.2

此依赖项来自支持库版本 27,而您使用的是支持版本 26。这就是 Android SDK 显示警告的原因,因为 Glide 4.5.0 在内部使用支持库版本 27。

现在有两种解决方案,要么在项目中使用支持库版本 27,要么从 Glide 中排除支持库版本,

dependencies {
   compile ("com.github.bumptech.glide:glide:4.5.0") {
          exclude group: "com.android.support"
}

运行 gradlew app:dependencies 命令,你得到以下输出。

+--- com.google.firebase:firebase-appindexing:11.8.0 | +--- com.google.android.gms:play-services-base:11.8.0 | | +--- com.google.android.gms:play-services-basement:11.8.0 | | |
+--- com.android.support:support-v4:25.2.0 | | | | +--- com.android.support:support-compat:25.2.0 -> 27.0.1 () | | |
| +--- com.android.support:support-media-compat:25.2.0 | | | | | +--- com.android.support:support-annotations:25.2.0 -> 27.0.1 | | | | | --- com.android.support:support-compat:25.2.0 -> 27.0.1 (
) | | |
| +--- com.android.support:support-core-utils:25.2.0 -> 27.0.1 () | | | | +--- com.android.support:support-core-ui:25.2.0 -> 27.0.1 () | | | | --- com.android.support:support-fragment:25.2.0 -> 27.0.1 (*) | | | --- com.google.android.gms:play-services-basement-license:11.8.0 |
| +--- com.google.android.gms:play-services-tasks:11.8.0

请注意 firebase 中支持库的版本差异。

com.android.support:support-compat:25.2.0 -> 27.0.1 (*)

您可以看到所有库版本不匹配,因此,要解决此问题,您可以对所有不匹配的库版本重复以下步骤

替换此 compile 'com.github.bumptech.glide:glide:4.5.0'

使用以下代码

compile ('com.github.bumptech.glide:glide:4.5.0',{
    exclude group: 'com.android.support'   
})