升级到 API 22 并支持 lib 修订版 22 后,我收到以下警告:
警告:与依赖项“com.android.support:support-annotations”冲突。应用程序 (22.0.0) 和测试应用程序 (21.0.3) 的已解决版本不同。
Gradle 本身更宽容,但 Android Studio 并没有那么多。
我没有使用 21.0.3 声明的依赖项…是使用 21.0.3 的依赖库之一,而 Google 忘记用批处理的其余部分对其进行更新?
我build.gradle的演员被剪掉了
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' }
更新:( 感谢马克)
看起来像是 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 (*)
处理此类事情时的第 1 步是熟悉命令行 Gradle。
第 2 步是运行Gradle 依赖关系报告(例如,gradle -q app:dependencies从项目根目录)。这将提供问题更新中所示的 ASCII 树,它应该可以帮助您确定对冲突工件版本的要求。
gradle -q app:dependencies
第 3 步是决定需要更换什么。您选择仅替换冲突 ( support-annotations)。就个人而言,我会选择错误版本树的根 ( recyclerview-v7),尽管据我所知,在这种情况下这可能不是最好的做法。
support-annotations
recyclerview-v7
第 4 步是添加exclude指令以阻止您在第 3 步中选择的内容:
exclude
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') { exclude module: 'support-annotations' }
第 5 步是测试这个变化的效果。您正在做的是说espresso-contrib 必须 处理 22.0.0 版本的support- annotations. 这可能会奏效。那可能不会。这取决于冲突的向后兼容性。在这种情况下,support-annotations应该是相当不错的。
espresso-contrib
support- annotations
第 6 步是饮用您选择的饮料,一种适合您所在地区和一天中的时间的饮料。