警告:与依赖冲突com.android.support:support-annotations'
我已经尝试了书中几乎所有的技巧。
- ResolutionStrategy.force
- 不包括模块
但似乎没有任何工作,下面是我的build.gradle。 我正在使用Gradle版本1.2.3。 有人可以抛出我的代码还有什么可能是错的。
我没有尝试过的唯一的事情就是改变Gradle的版本。 这是一个非常基本的咖啡testing案例。 谢谢!
apply plugin: 'com.android.application' android { configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:22.1.0' } compileSdkVersion 22 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.example.rasika.job" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } repositories { mavenCentral() } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' testCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test:runner:0.3' androidTestCompile 'com.android.support.test:rules:0.3' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1' androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0' }
我分叉android-topeka谷歌示例和更新appcompat版本为23.1.0,相同的消息:
警告:与依赖关系com.android.support:support-annotations冲突。 应用程序(23.1.0)和testing应用程序(23.0.1)的已解决版本不同。
我补充说:
androidTestCompile 'com.android.support:support-annotations:23.1.0'
现在都解决到23.1.0,警告消失了,应用程序和testing仍然工作。
我不知道这是更好的解决scheme,所以我正在寻找另一个,但发现你的问题。
更新:请阅读PaulR的这个很好的解释 。
Update2:确认, Androidtesting谷歌示例做到这一点。
// Testing-only dependencies // Force usage of support annotations in the test app, since it is internally used by the runner module. androidTestCompile 'com.android.support:support-annotations:23.0.1'
Update3 : CommonsWare的另一个好回应 。
检查您的具体版本/冲突/解决scheme使用:
./gradlew -q yourmodule:dependencies
Appcompat是22.1.1在你的情况下,但你是强制22.1.0。
Update4:在Android构build系统(Android Dev Summit 2015)中解释的依赖冲突。
解决主APK之间的冲突
当仪器testing运行时,主APK和testingAPK共享相同的类path。 如果主APK和testingAPK使用相同的库(例如Guava),但是使用不同的版本,则Gradle构build将失败。 如果gradle没有捕捉到,那么在testing和正常运行期间(包括崩溃),您的应用可能会有不同的performance。
为了使构build成功,请确保两个APK使用相同的版本。 如果错误是关于一个间接的依赖关系 (一个在build.gradle中没有提到的库),那么只需要为新版本添加一个依赖项到 需要它 的configuration (“compile”或者“androidTestCompile”) 。 您也可以使用Gradle的解决策略机制。 您可以通过运行./gradlew:app:dependencies和./gradlew:app:androidDependencies检查依赖关系树。
我通过添加依赖来解决冲突:
androidTestCompile 'com.android.support:support-annotations:23.2.0'
我有同样的问题,由此解决:
// build.gradle ... android { ... defaultConfig { ... testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } } dependencies { ... androidTestCompile('com.android.support.test.espresso:espresso-core:2.2') { // Necessary if your app targets Marshmallow (since Espresso // hasn't moved to Marshmallow yet) exclude group: 'com.android.support', module: 'support-annotations' } androidTestCompile('com.android.support.test:runner:0.3') { // Necessary if your app targets Marshmallow (since the test runner // hasn't moved to Marshmallow yet) exclude group: 'com.android.support', module: 'support-annotations' } }
解决scheme在这里find: https : //github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
更新:最后依赖关系阻止在我的build.gradle看起来像这样:
dependencies { ... compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:support-v4:23.2.1' compile 'com.android.support:design:23.2.1' ... // Necessary if your app targets Marshmallow (since Espresso // hasn't moved to Marshmallow yet) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') { exclude group: 'com.android.support' } androidTestCompile('com.android.support.test.espresso:espresso-intents:2.2.2') { exclude group: 'com.android.support' } androidTestCompile('com.android.support.test:runner:0.5') { exclude group: 'com.android.support' } androidTestCompile('com.android.support.test:rules:0.5') { exclude group: 'com.android.support' } androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') { exclude group: 'com.android.support' } androidTestCompile('com.android.support:support-annotations:23.2.1') { exclude group: 'com.android.support' } androidTestCompile('com.android.support.test.uiautomator:uiautomator-v18:2.1.2') { exclude group: 'com.android.support' } }
最近在我joinuiautomator时发生了这种情况。 要解决这个问题,你需要找出哪个依赖关系或依赖关系正在使用过时的模块。 你可以通过将每个androidTestCompile依赖包装到一个块中来做到这一点,就像这样:
androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2') { transitive = false; }
这可能会破坏一些其他的东西,所以你需要小心。 我能够准确地确定哪两个依赖项对我造成了这个问题,并且只是把这个阻塞机制添加到这些。
在build.gradle文件中添加跟随代码到你的依赖块
compile 'com.android.support:support-annotations:23.2.1' testCompile 'com.android.support:support-annotations:23.2.1' androidTestCompile 'com.android.support:support-annotations:23.2.1'
我通过从runner和espresso-core依赖关系中排除了support-annotation库来解决冲突:
androidTestCompile 'com.android.support.test:runner:0.5',{ exclude group: 'com.android.support', module: 'support-annotations' } androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2.2'){ exclude group: 'com.android.support', module: 'support-annotations' }
添加到你的主build.gradle:
allprojects { ... configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:23.1.1' } ... }
androidTestCompile更改为testing编译。 并提醒不要改变它编译,只需要这个依赖项被编译到我们的debuggingAPK或testingAPK。
对我来说这工作得很好
dependencies { androidTestCompile 'com.android.support:support-annotations:23.1.1' }
我通过添加依赖来解决冲突:
compile 'com.android.support:appcompat-v7:23.2.1' compile 'com.android.support:design:23.2.1' ... androidTestCompile 'com.android.support:support-annotations:23.2.1'
在也陷入了问题的说法
无法解决
com.android.support:support-annotations:23.1.0
并试图在其他服务器上查找,
但是,解决我的问题是增加:
google-service.json
文件来自
https://developers.google.com/mobile/add
并复制并粘贴到
YourAndroidProject/app
然后重新编译它,我希望你的代码会飞
用这个来解决冲突
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' })
我通过添加依赖来解决冲突:
androidTestCompile "com.android.support:support-annotations:26.0.0-beta1"