升级到API 22并支持lib版本22后,我收到以下警告:
警告:与依赖性冲突 'com.android.support:support-annotations'。已解决的应用版本 (22.0.0)和测试应用程序(21.0.3)不同。
Gradle本身更宽容,但Android Studio并不是那么多。
我没有使用21.0.3声明的依赖项...是使用21.0.3的依赖库之一而谷歌忘了用批处理的其余部分更新它?
我的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)
看起来像是espresso-contrib
+--- 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 (*)
答案 0 :(得分:285)
处理此类事情时,步骤#1是熟悉命令行Gradle。
步骤#2是从项目根目录运行the Gradle dependencies report(例如gradle -q app:dependencies
)。这将提供问题更新中显示的ASCII树,它可以帮助您确定对冲突工件版本的要求。
步骤#3是决定需要更换的东西。您选择仅替换冲突(support-annotations
)。就个人而言,我会选择使用错误版本树(recyclerview-v7
)的根,但据我所知,在这种情况下,这可能不是最好的做法。
步骤#4是添加exclude
指令来阻止您在步骤3中选择的内容:
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
exclude module: 'support-annotations'
}
步骤#5是测试这个变化。你正在做的是说espresso-contrib
有来处理22.0.0版的support-annotations
。这可能有用。那可能不是。这取决于冲突的向后兼容性。在这种情况下,support-annotations
应该相当不错。
步骤#6是使用您选择的饮料,一种适合您所在地区和时间的饮料。
答案 1 :(得分:58)
实际上它是Espresso Contrib新版本的错误,您可以参考此解决方法:android-testing/build.gradle
KILL
答案 2 :(得分:23)
configurations.all {
resolutionStrategy {
force 'com.android.support:support-annotations:23.1.1'
}
}
这解决了我的问题。
或者你可以在windows上运行gradlew,在./gradlew上运行mac / linux,这将在需要时下载你的依赖
答案 3 :(得分:8)
我也遇到了这个问题以及涉及 appcompat 的其他冲突,我找到的解决方案是添加测试编译并将它们设置为您当前使用的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 Material Design相关的设计依赖项。
希望有帮助=)
答案 4 :(得分:8)
for sdkversion 25
androidTestCompile 'com.android.support:support-annotations:25.2.0'
答案 5 :(得分:3)
你可以在windows上运行gradlew,在./gradlew上运行mac / linux,这将在需要时下载你的依赖项。
您可以检查其中一个库是否依赖于支持注释,或者是否有任何错误命名的库,并尝试将其排除在Gradle之外,如下所示
compile(“org.apache.maven:maven-ant-tasks:$ {mavenAntTaskVer}”){ 排除组:'junit' }
错误:与依赖'junit:junit'冲突。 app(3.8.1)和测试app(4.12)的已解决版本有所不同。有关详细信息,请参阅g.co/androidstudio/app-test-app-conflict。
这是我得到的错误,所以我使用gradle line来解决问题
答案 6 :(得分:2)
只需在build.gradle文件中删除这些行:
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
答案 7 :(得分:0)
这是在here所述的检测测试中的常见问题,可以通过在build.gradle中添加androidTestCompile的依赖项来解决。在我的情况下,appcompat,recyclerview和设计依赖项出现了冲突。并通过添加以下行来解决
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'
答案 8 :(得分:0)
我遇到了与26.0.0和27.1.1相同的问题,实际上只是将前者升级到后者使其工作。