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

Ale*_*lex 69 android gradle

当我今天将我的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'
}
Run Code Online (Sandbox Code Playgroud)

Jul*_*ule 63

要详细说明已接受的答案,支持库案例的正确依赖性解析如下:

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

请执行下列操作:

在你的根目录中build.gradle,你应该已经拥有了

ext {
    supportlib_version = '27.1.1'
    ...
}
Run Code Online (Sandbox Code Playgroud)

并在你的app/build.gradle喜欢中使用这个属性

dependencies {
    implementation "com.android.support:appcompat-v7:$supportlib_version"
    implementation "com.android.support:recyclerview-v7:$supportlib_version"
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,在你的根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"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Com*_*are 56

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

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

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

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

  • 不要用play-services.使用所需的Play Services SDK特定部分的特定依赖项.play-services带来了所有的播放服务,使您的应用程序比它需要和放慢您的构建时间很多大得多.

  • 替换com.mcxiaoke.volley官方Volley神器(com.android.volley:volley:1.0.0)

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

  • 要查看依赖项的树:`./gradlew -q dependencies myModuleName:dependencies --configuration compile`.有些东西使用过时的支持-v4,所以我添加了最新的依赖项. (20认同)

Bra*_*dio 23

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

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

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

在您的情况下,只需编译小信息窗口所示的所有示例:

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

您的

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

是版本25.2.0,和你的

com.android.support:mediarouter-v7:24.0.0

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

com.android.support:mediarouter-v7:25.2.0
Run Code Online (Sandbox Code Playgroud)

并为小信息窗口所说的每个例子做到这一点; 在您的情况下,所有库没有版本25.2.0.

修复指定的库后,您必须同步gradle以查看您必须更改的下一个库和包.

  • 这是正确的答案.救了我的一天,谢谢 (2认同)
  • 这对我有用.谢谢 (2认同)

小智 12

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

compile 'com.android.support:animated-vector-drawable:25.2.0'
compile 'com.android.support:customtabs:25.2.0'
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么这样做? (5认同)
  • 我不需要这些库,这不是正确的解决方案.为什么不必要地添加库. (3认同)

roo*_*per 8

你可以加

compile 'com.android.support:customtabs:25.2.0'
Run Code Online (Sandbox Code Playgroud)

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

compile 'com.android.support:cardview-v7:25.2.0'
compile 'com.android.support:animated-vector-drawable:25.2.0'
Run Code Online (Sandbox Code Playgroud)


小智 8

将它添加到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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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