应用程序(22.0.0)和测试应用程序(21.0.3)的解析版本不同

在升级到 API 22并支持 lib 版本22之后,我收到了以下警告:

警告: 与依赖性冲突 ‘ com.android.support: support-annotions’应用程序的解析版本 (22.0.0)和测试应用程序(21.0.3)不同。

Gradle 本身更加宽容,但 Android Studio 就不那么宽容了。

我没有在21.0.3中声明依赖项... 是否有一个依赖库使用了21.0.3,而 Google 忘了用批处理的其余部分来更新它?

我的 build.gradle多余的部分被剪掉了

android {
compileSdkVersion 22
buildToolsVersion '22'


defaultConfig {
applicationId "com.REDACTED.android"
minSdkVersion 14
targetSdkVersion 22
renderscriptSupportModeEnabled true
versionName '1.0.0'
versionCode 100
}


buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
signingConfig signingConfigs.release
}


debug {
minifyEnabled false
zipAlignEnabled true
signingConfig signingConfigs.debug
}
}


dependencies {
provided 'org.projectlombok:lombok:1.16.2'
googleCompile 'com.google.android.gms:play-services-base:6.5.87'
compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:support-v13:22.0.0'
compile 'com.android.support:cardview-v7:22.0.0'
compile 'com.android.support:palette-v7:22.0.0'
compile 'com.android.support:support-annotations:22.0.0'
compile 'com.github.chrisbanes.photoview:library:1.2.3'
compile 'org.apache.commons:commons-lang3:3.3.2'
compile 'commons-io:commons-io:2.4'
compile 'commons-codec:commons-codec:1.10'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.jakewharton:disklrucache:2.0.2'
compile 'com.squareup:otto:1.3.6'
compile 'com.squareup.picasso:picasso:2.5.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile 'com.squareup.okio:okio:1.2.0'
compile 'com.flaviofaria:kenburnsview:1.0.6'
compile 'com.edmodo:cropper:1.0.1'
compile 'com.getbase:floatingactionbutton:1.8.0'
compile 'com.nispok:snackbar:2.10.2'
compile 'com.github.ksoichiro:android-observablescrollview:1.5.0'
compile 'in.srain.cube:grid-view-with-header-footer:1.0.9'
compile 'de.hdodenhof:circleimageview:1.2.2'
compile fileTree(dir: 'libs', include: '*.jar')
// Test Only Dependencies
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
}

更新: (感谢 Mark)

看起来像浓缩咖啡

+--- com.android.support.test:testing-support-lib:0.1 (*)
\--- com.android.support.test.espresso:espresso-contrib:2.0
+--- com.android.support:recyclerview-v7:21.0.3
|    +--- com.android.support:support-annotations:21.0.3
|    \--- com.android.support:support-v4:21.0.3
|         \--- com.android.support:support-annotations:21.0.3
+--- com.android.support:support-v4:21.0.3 (*)
\--- com.android.support.test.espresso:espresso-core:2.0 (*)
93132 次浏览

处理这类事情的第一步是适应命令行 Gradle。

步骤 # 2是运行 格拉德依赖关系报告(例如,从项目根目录运行 gradle -q app:dependencies)。这将提供问题更新中显示的 ASCII 树,并且它应该帮助您确定对冲突工件版本的要求。

第三步是决定什么需要更换。您选择只替换冲突(support-annotations)。就个人而言,我会选择错误版本树(recyclerview-v7)的根,尽管我所知道的可能不是这种情况下的最佳行动方案。

步骤 # 4是添加 exclude指令来阻止你在步骤 # 3中所选择的:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
exclude module: 'support-annotations'
}

步骤5是测试这个变化。你所做的就是说 espresso-contrib 已经要处理 support-annotations的22.0版本。也许可以。那可不一定。这取决于冲突的向后兼容性。在这种情况下,support-annotations应该是相当不错的。

第六步是消费你选择的饮料,一个适合你的地点和一天的时间。

实际上这是一个新版本的 Espresso Contrib 的 bug,你可以参考这个解决方案: Android-test/build.gradle

configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}

为了解决这个问题,我在 build.gradle 脚本中添加了以下代码行

androidTestCompile 'com.android.support:support-annotations:xx.x.x'

xx.x.x替换为你的应用程序正在使用的任何版本的支持-注释-这将显示在你的依赖关系中,或者 Gradle 同步消息中,如果同步出现问题,则为: Resolved version for app (xx.x.x)

请参阅 https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
resolutionStrategy {
force 'com.android.support:support-annotations:23.1.1'
}
}

这解决了我的问题。

或者,您可以在 windows 上运行 gradlew,在 mac/linux 上运行./gradlew,这将在需要时下载您的依赖项

你可以在 windows 和./gradlew for mac/linux 上运行 gradlew,这将在需要时下载你的依赖项。

您可以检查其中一个库是否依赖于支持注释,或者任何具有错误命名的库,并尝试将其排除在分级中,如下所示

编译(“ org.apache.maven: maven-ant-asks: ${ mavenAntTaskVer }”){ 排除组: “ junit” }

错误: 与依赖项“ junit: junit”冲突。应用程序(3.8.1)和测试应用程序(4.12)的解决版本不同。详见 g.co/androidstudio/app-test-app-Conflict。

这是我得到的错误,所以我使用以上梯度线来修复问题

我还遇到了这个问题以及与 应用程序有关的其他冲突,我发现的解决方案是添加测试编译并将它们设置为您当前使用的 sdk。对我来说是25所以看起来是这样的:

androidTestCompile 'com.android.support:support-annotations:25.+'
androidTestCompile 'com.android.support:appcompat-v7:25.+'
androidTestCompile 'com.android.support:support-v4:25.+'
androidTestCompile 'com.android.support:recyclerview-v7:25.+'
androidTestCompile 'com.android.support:design:25.+'

此外,正如您所看到的,我添加了设计依赖关系,这与 Android 的材料设计相关。

希望对你有所帮助

为 sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'

给你所述,这是检测测试中的常见问题,可以通过在 build.gradle 中添加 androidTestCompile 的依赖项来简单地解决。在我的案例中,冲突出现在应用程序、回收视图和设计依赖关系中。并通过添加以下代码行解决

    androidTestCompile 'com.android.support:appcompat-v7:23.4.0'
androidTestCompile 'com.android.support:recyclerview-v7:23.4.0'
androidTestCompile 'com.android.support:design:23.4.0'

我在使用26.0.0和27.1.1时遇到了同样的问题,实际上只需要将前者升级到后者就可以了。

只需删除 build.gradle 文件中的这些行:

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'