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

时间:2017-03-03 14:52:36

标签: 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'
}

13 个答案:

答案 0 :(得分:63)

详细说明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(但不是multidex的(可能有更多例外)),请将版本强制为标准化支持lib版本。

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

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

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

答案 1 :(得分:56)

  

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

它将作为您的其他依赖项之间的传递依赖。

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

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

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

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

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

答案 2 :(得分:23)

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

注意说明错误的小信息窗口,它说明你需要更改和添加的例子。

您无法看到这些用法,因为它的使用可能是其他库的内部(例如google play services或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的库。

修复指定的库后,您必须同步草图,以查看您需要更改的下一个库和包。

答案 3 :(得分:12)

同样的问题发生在我身上。我刚才所做的就是添加了这两行

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

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

答案 4 :(得分: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'

答案 5 :(得分:7)

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

&#13;
&#13;
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'
            }
        }
    }
}
&#13;
&#13;
&#13;

替换&#39; 25.3.1&#39;对于您要使用的Android支持库版本,该版本必须高于您的compileSdk版本。

答案 6 :(得分:2)

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

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

答案 7 :(得分: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'

我认为这可以解决问题。

答案 8 :(得分:2)

我在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 (*)

<强>后: enter image description here

答案 9 :(得分:1)

尝试使用您正在使用的特定软件包替换compile 'com.google.android.gms:play-services:+'(请参阅此答案:https://stackoverflow.com/a/42374426/3495069

答案 10 :(得分:1)

删除或更新以下依赖关系

 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'

答案 11 :(得分:-1)

在您的案例中使相同版本或最新版本的所有依赖项替换25.2.0的支持库版本。

答案 12 :(得分:-2)

使用特定版本而不是+。例如,'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'

这有助于我解决问题。