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

70

当我把我的Android Studio从版本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'
}

4
我也遇到了这个问题,只需要忽略它,或者切换到Android Studio的Beta频道,最新版本中应该已经修复了。 - mayosk
@Alex,你有没有找到除了添加customtabs和vector-drawable库之外的更好的解决方案。 - Tasneem
以下的解决方案都对我没用,因为我的问题是在我使用Facebook SDK将Facebook登录按钮放入我的应用程序时开始的。在某些情况下,它似乎依赖于support:appcompat-v7:25.0.0,但我无法解决它... - gustavogbc
在我的情况下,当我添加了com.google.android.gms:play-services:10.2.1时,它开始出现,但当我针对所需的特定Google Play服务进行定位时,它消失了。 - N.M
13个回答

63

对于接受的答案进行阐述,支持库情况下适当的依赖解析如下:

不要仅将传递依赖项作为直接依赖项添加以强制其版本;这在语义上是错误的(如果您删除了引入传递依赖项的依赖项,则现在您有一个未使用的剩余依赖项)。

执行以下操作:

在根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"
            }
        }
    }
}

即,在每个模块和每个配置中,解析依赖项时,如果是支持库(但不包括 multidex 库(可能还有其他例外情况)),则将版本强制为您标准化的支持库版本。


现在,在 Jetpack 和 Jetifier 时代,采用以下变化似乎是明智的做法(假设您已迁移到 androidx 版本):

例如,您的 app/build.gradle 现在将包含 androidx 依赖项,但是您使用的库仍可能传递引入 supportlib 依赖项,您仍希望它们使用相同的版本(即,28.0.0),以便在构建时可以正确地进行 jetification。

因此,保持根 build.gradle 部分不变,使用 28.0.0 作为 supportlib_version


我最喜欢这个答案,尽管我肯定可以看到一种情况,在支持库中的一个怪癖导致依赖项期望早期版本引起问题,并且很难立即看出正在发生什么。 - Hugh Jeffner
确实如此 - 虽然这有点倒霉; 如果您需要与另一个依赖项相同的支持库依赖项,而该依赖项无法处理当前/较新的支持库版本,则您将处于同一船上。 - Jule
1
这是从长远来看更好的解决方案,而不是修补一切。 - Panduka DeSilva
1
@RoCk 你可以使用任何你喜欢的名称 - 不过作为你代码的读者,我期望你在这个目的上使用某种变体。当你有多个工件使用同一版本的东西时,这是一个通用的有用模式 - 比如使用匹配的适配器和转换器进行改装。然后我还会定义 retrofit_version 并以相同的方式使用它。 - Jule
这个完美地运行了,谢谢! - ChrisPrime
显示剩余2条评论

56
我已经查看了整个项目,但是我找不到任何使用版本24.0.0的地方。
这可能是由于其他依赖项中的传递性依赖导致的。
首先,解决您build.gradle文件中的其他问题,因为它们也可能清除此问题:
  • 不要为库版本使用+。使用特定版本。

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

  • com.mcxiaoke.volley替换为官方Volley软件包(com.android.volley:volley:1.0.0

如果以上方法都无法解决问题,您可以运行Gradle依赖关系报告以查看完整的依赖树。从那里,您将看到您的哪个库正在请求不同版本的Android Support库。对于它所要求的内容,您可以直接使用25.2.0版本,或使用Gradle的其他冲突解决方法来安排获取相同的版本。

20
查看依赖树:./gradlew -q dependencies myModuleName:dependencies --configuration compile。发现有一个过时的 support-v4 库被使用,因此我将最新版本的库添加到了我的依赖中。 - Jason Hartley
运行以下命令开始下载Gradle压缩包。之后,什么也不会发生,如下所示: “正在下载https://services.gradle.org/distributions/gradle-3.3-all.zip” - Satpal Yadav
哦,第二次运行命令后它显示了依赖项。 :) - Satpal Yadav
1
谢谢,它起作用了。我之前有一个play-services包,现在加上了特定的play-services-location包,问题解决了。 - Inzimam Tariq IT

23

适用于所有案例,不仅限于这些版本或库:

注意一下错误信息窗口的小提示,它会告诉你需要修改和添加的示例。

你无法看到用法,因为它的使用可能是另一个库(比如Google Play服务或Squareup)内部的。

只需编译错误信息窗口中列出的所有示例,在你的情况下:

 

示例包括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

对于信息窗口中提到的每个例子都要这样做;在你的情况下,所有没有版本25.2.0的库都需要这样做。

在你修复指出的库后,你必须同步gradle才能看到下一个需要更改的库和包。


2
这就是正确答案。救了我的一天,谢谢。 - drulabs
2
这对我有用。谢谢。 - Dedan

12

我也遇到了同样的问题。我只是添加了这两行代码:

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

问题已解决。我还删除了以前的Gradle文件夹。


5
为什么这个方法有效? - Ian Wambai
1
@IanWambai,请尝试将所有支持库设置为相同的版本并清理项目。 - Taras Melon
3
我不需要这些库,这不是正确的解决方案。为什么要不必要地添加库。 - Tasneem
对我来说有效,警告本身告诉你需要编译哪些库。 - Whome

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'
            }
        }
    }
}

将 '25.3.1' 替换为想要使用的 Android 支持库版本,该版本必须高于您的 compileSdk 版本。


感谢这个解决方案,我找不到需要v27的库,但这个解决方案立刻解决了我的问题。 - Juanma Jurado
这并没有提供比其他答案更多的信息。https://dev59.com/XlgQ5IYBdhLWcg3wkEpJ#42718231 - OneCricketeer
这个解决方案对我很有效。在找到它之前,我白白浪费了好几个小时。谢谢你啊。 - beginner

8
您可以添加

标签


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'

添加这三个依赖项解决了我的问题。谢谢 +1 - Sami Eltamawy

4

我在Android Studio 2.3中遇到了同样的问题。

之前: 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 (*)

之后:在此输入图片描述


2

这里指出添加这一行将会解决错误。

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

这对我没有起作用。 - Pat Myron
请尝试上面 @ Brandon Zamudio 给出的解决方案。 - drulabs
这不是解决所有错误的通用方法。只有在使用过时的库时,这一行才有效。 - OneCricketeer

2

看起来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'

我认为这将解决问题。

这对我起作用了。 - user3290180
我必须补充说明,只有调色板库是必需的。 - user3290180

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接