首页 文章

所有com.android.support库必须使用完全相同的版本[复制]

提问于
浏览
67

这个问题在这里已有答案:

当我今天将我的android工作室从版本2.2.3更新到2.3时,突然在我的build.gradle中在依赖项的第一个编译行中出现此错误

(无论哪个依赖都会出现在第一位,但它总会给我这个错误):

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

我查看了整个项目,我找不到任何版本24.0.0的用法(我用ctrl shift F查看整个项目中的搜索)

这是我的build.gradle:

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionName "1.0"
        versionCode 1
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            minifyEnabled true
            shrinkResources true
        }
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.squareup:otto:1.3.8'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'com.android.support:multidex:1.0.1'
}

13 回答

  • 2

    我查看了整个项目,我找不到任何版本24.0.0的使用

    它是来自您的其他依赖项之间的传递依赖 .

    首先,修复 build.gradle 文件中的其他问题,因为它们也可以解决此问题:

    • 不要将 + 用于库版本 . 使用特定版本 .

    • 不要使用 play-services . 使用所需的Play Services SDK特定部分的特定依赖项 . play-services 引入了所有Play服务,使您的应用程序大得多,并且大大减慢了构建时间 .

    • 用官方Volley神器替换 com.mcxiaoke.volleycom.android.volley:volley:1.0.0

    如果这些都没有解决问题,您可以运行Gradle依赖关系报告以查看完整的依赖关系树 . 从那里,您将看到您的哪个库要求提供不同版本的Android支持库 . 无论它要求什么,您可以直接使用 25.2.0 版本请求它,或使用Gradle的其他冲突解决方法来安排获得相同的版本 .

  • 1

    要详细说明accepted answer,支持库案例的正确依赖关系解析如下:

    不要只是将传递依赖项添加为直接依赖项来强制它们的版本;这在语义上是错误的(如果你删除了带来传递依赖的依赖,你现在有一个你实际上没有使用的剩余依赖) .

    请执行下列操作:

    在您的根 build.gradle 中,您应该已经拥有

    ext {
        supportlib_version = '27.1.1'
        ...
    }
    

    并在您的例如使用此属性 app/build.gradle 喜欢

    dependencies {
        implementation "com.android.support:appcompat-v7:$supportlib_version"
        implementation "com.android.support:recyclerview-v7:$supportlib_version"
        ...
    }
    

    现在,在你的根 build.gradle 中,有

    subprojects {
        project.configurations.all {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'com.android.support'
                        && !details.requested.name.contains('multidex') ) {
                    details.useVersion "$supportlib_version"
                }
            }
        }
    }
    

    也就是说,在每个模块和每个配置中,在解析依赖关系时,如果它是支持lib(但不是多索引用(可能有更多例外)),请将版本强制为标准化支持lib版本 .


    现在在jetpack和jetifier的时代,使用变体(假设你已经迁移到androidx版本)似乎是谨慎的:

    你的 app/build.gradle 现在将包含androidx依赖项,但您使用的库仍然可以传递性地引入supportlib依赖项,您仍然需要在相同版本(即28.0.0)上,以便它们可以在构建时获得正确的结果 .

    所以保持根 build.gradle 部分原样,使用 28.0.0 作为 supportlib_version .

  • 55

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

    注意一些关于错误的小信息窗口,它说明你必须改变和添加的例子 .

    您无法看到用法,因为它的使用可能是另一个库的内部(如Google Play服务或平方) .

    Just compile all examples that the little information window says ,在您的情况下:

    示例包括com.android.support:animated-vector-drawable:25.2.0和com.android.support:mediarouter-v7:24.0.0

    Your

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

    is version 25.2.0, and your

    com.android.support:mediarouter-v7:24.0.0

    is version 24.0.0, so you have to add the mediarouter with the same version:

    com.android.support:mediarouter-v7:25.2.0
    

    并为小信息窗口所说的每个例子做到这一点;在你的情况下 all the libraries that doesn't have the version 25.2.0.

    You have to sync the gradle after you fix the indicated library to see the next library and package that you have to change.

  • -2

    同样的问题发生在我身上 . 我刚刚做了什么,添加了这两行

    compile 'com.android.support:animated-vector-drawable:25.2.0'
    compile 'com.android.support:customtabs:25.2.0'
    

    问题解决了 . 我还删除了以前版本的gradle文件夹 .

  • 62

    你可以加

    compile 'com.android.support:customtabs:25.2.0'
    

    通过右键单击gradle依赖项,您可以添加冲突的依赖项 . 对我来说是

    compile 'com.android.support:cardview-v7:25.2.0'
    compile 'com.android.support:animated-vector-drawable:25.2.0'
    
  • 2

    将它添加到build.gradle的最后(Module:app):

    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '25.3.1'
                }
            }
        }
    }
    

    用android的版本替换'25 .3.1'您要使用的支持库,版本必须高于您的compileSdk版本 .

  • -1

    Here指出添加此行将删除错误 .

    compile 'com.android.support:customtabs:25.2.0'
    
  • 1

    看起来Android Studio 2.3需要明确声明外部依赖项 . 依赖项是customtabs和palette-v7 .

    您需要在build.gradle中显式添加以下两个外部依赖项/包

    compile 'com.android.support:customtabs:25.2.0'
    compile 'com.android.support:palette-v7:25.2.0'
    

    我认为这可以解决问题 .

  • 24

    我在Android studio 2.3中遇到同样的问题

    before:
    enter image description here

    然后,我尝试:

    ./gradlew -q dependencies app --configuration compile
    
    +--- project :lib
    +--- com.jonathanfinerty.once:once:1.2.2
    |    \--- com.android.support:support-annotations:25.3.1
    +--- com.zhy:base-rvadapter:3.0.3
    |    \--- com.android.support:recyclerview-v7:23.4.0
    |         +--- com.android.support:support-annotations:23.4.0 -> 25.3.1
    |         \--- com.android.support:support-v4:23.4.0 -> 25.3.1
    |              +--- com.android.support:support-compat:25.3.1
    |              |    \--- com.android.support:support-annotations:25.3.1
    |              +--- com.android.support:support-media-compat:25.3.1
    |              |    +--- com.android.support:support-annotations:25.3.1
    |              |    \--- com.android.support:support-compat:25.3.1 (*)
    |              +--- com.android.support:support-core-utils:25.3.1
    |              |    +--- com.android.support:support-annotations:25.3.1
    |              |    \--- com.android.support:support-compat:25.3.1 (*)
    |              +--- com.android.support:support-core-ui:25.3.1
    |              |    +--- com.android.support:support-annotations:25.3.1
    |              |    \--- com.android.support:support-compat:25.3.1 (*)
    |              \--- com.android.support:support-fragment:25.3.1
    |                   +--- com.android.support:support-compat:25.3.1 (*)
    |                   +--- com.android.support:support-media-compat:25.3.1 (*)
    |                   +--- com.android.support:support-core-ui:25.3.1 (*)
    |                   \--- com.android.support:support-core-utils:25.3.1 (*)
    +--- com.squareup.okhttp3:okhttp:3.6.0
    |    \--- com.squareup.okio:okio:1.11.0
    +--- com.squareup.okhttp3:logging-interceptor:3.6.0
    |    \--- com.squareup.okhttp3:okhttp:3.6.0 (*)
    +--- com.google.code.gson:gson:2.8.0
    +--- com.jakewharton:butterknife:8.4.0
    |    +--- com.jakewharton:butterknife-annotations:8.4.0
    |    |    \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
    |    \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
    +--- com.github.bumptech.glide:glide:3.7.0
    +--- org.litepal.android:core:1.5.1
    +--- com.orhanobut:logger:1.15
    +--- com.android.support:appcompat-v7:25.3.1
    |    +--- com.android.support:support-annotations:25.3.1
    |    +--- com.android.support:support-v4:25.3.1 (*)
    |    +--- com.android.support:support-vector-drawable:25.3.1
    |    |    +--- com.android.support:support-annotations:25.3.1
    |    |    \--- com.android.support:support-compat:25.3.1 (*)
    |    \--- com.android.support:animated-vector-drawable:25.3.1
    |         \--- com.android.support:support-vector-drawable:25.3.1 (*)
    

    base-rvadapter库不包括25.3.1:

    com.zhy:base-rvadapter:3.0.3
    |    \--- com.android.support:recyclerview-v7:23.4.0
    

    最后,我添加一行:

    compile 'com.android.support:design:25.3.1'
    

    设计包括appcompat-v7和base-rvadapter链接25.3.1 .

    +--- project :lib
    +--- com.jonathanfinerty.once:once:1.2.2
    |    \--- com.android.support:support-annotations:25.3.1
    +--- com.zhy:base-rvadapter:3.0.3
    |    \--- com.android.support:recyclerview-v7:23.4.0 -> 25.3.1
    |         +--- com.android.support:support-annotations:25.3.1
    |         +--- com.android.support:support-compat:25.3.1
    |         |    \--- com.android.support:support-annotations:25.3.1
    |         \--- com.android.support:support-core-ui:25.3.1
    |              +--- com.android.support:support-annotations:25.3.1
    |              \--- com.android.support:support-compat:25.3.1 (*)
    +--- com.squareup.okhttp3:okhttp:3.6.0
    |    \--- com.squareup.okio:okio:1.11.0
    +--- com.squareup.okhttp3:logging-interceptor:3.6.0
    |    \--- com.squareup.okhttp3:okhttp:3.6.0 (*)
    +--- com.google.code.gson:gson:2.8.0
    +--- com.jakewharton:butterknife:8.4.0
    |    +--- com.jakewharton:butterknife-annotations:8.4.0
    |    |    \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
    |    \--- com.android.support:support-annotations:24.1.0 -> 25.3.1
    +--- com.github.bumptech.glide:glide:3.7.0
    +--- org.litepal.android:core:1.5.1
    +--- com.orhanobut:logger:1.15
    +--- com.android.support:appcompat-v7:25.3.1
    |    +--- com.android.support:support-annotations:25.3.1
    |    +--- com.android.support:support-v4:25.3.1
    |    |    +--- com.android.support:support-compat:25.3.1 (*)
    |    |    +--- com.android.support:support-media-compat:25.3.1
    |    |    |    +--- com.android.support:support-annotations:25.3.1
    |    |    |    \--- com.android.support:support-compat:25.3.1 (*)
    |    |    +--- com.android.support:support-core-utils:25.3.1
    |    |    |    +--- com.android.support:support-annotations:25.3.1
    |    |    |    \--- com.android.support:support-compat:25.3.1 (*)
    |    |    +--- com.android.support:support-core-ui:25.3.1 (*)
    |    |    \--- com.android.support:support-fragment:25.3.1
    |    |         +--- com.android.support:support-compat:25.3.1 (*)
    |    |         +--- com.android.support:support-media-compat:25.3.1 (*)
    |    |         +--- com.android.support:support-core-ui:25.3.1 (*)
    |    |         \--- com.android.support:support-core-utils:25.3.1 (*)
    |    +--- com.android.support:support-vector-drawable:25.3.1
    |    |    +--- com.android.support:support-annotations:25.3.1
    |    |    \--- com.android.support:support-compat:25.3.1 (*)
    |    \--- com.android.support:animated-vector-drawable:25.3.1
    |         \--- com.android.support:support-vector-drawable:25.3.1 (*)
    \--- com.android.support:design:25.3.1
         +--- com.android.support:support-v4:25.3.1 (*)
         +--- com.android.support:appcompat-v7:25.3.1 (*)
         +--- com.android.support:recyclerview-v7:25.3.1 (*)
         \--- com.android.support:transition:25.3.1
              +--- com.android.support:support-annotations:25.3.1
              \--- com.android.support:support-v4:25.3.1 (*)
    

    after:
    enter image description here

  • 2

    尝试用你正在使用的特定包替换 compile 'com.google.android.gms:play-services:+' (参见这个回答:https://stackoverflow.com/a/42374426/3495069

  • 8

    删除或更新以下依赖项

    compile 'com.google.android.gms:play-services:9.6.1'
    

    或者只添加这样的选择性服务

    compile 'com.google.android.gms:play-services-fitness:10.2.4'
    compile 'com.google.android.gms:play-services-wearable:10.2.4'
    
  • 12

    在您的情况下,使相同版本或最新版本的所有依赖项替换25.2.0的支持库版本 .

  • 6

    使用特定版本而不是 + . 例如,'com.google.android.gms:play-services:10.2.0'

    并使用您使用的特定SDK而不是添加整个Play-SDKs包 . 例如:

    'com.google.android.gms:play-services-gcm:10.2.0'
    'com.google.android.gms:play-services-maps:10.2.0'
    'com.google.android.gms:play-services-location:10.2.0'
    

    这有助于我解决这个问题 .

相关问题