Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning:Conflict with dependency 'com.android.support:support-annotations'

I have tried almost every trick in the book.

  • ResolutionStrategy.force
  • Excluding modules

But nothing seems to work, below is my build.gradle. I'm using Gradle version 1.2.3. Can someone please throw light on what else could be wrong with my code.

The only thing I haven't tried is changing version of Gradle. It's a very basic Espresso Test case. Thanks!

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' } 
like image 816
Mabad Avatar asked Sep 16 '15 05:09

Mabad


1 Answers

I forked android-topeka google sample and updated appcompat version to 23.1.0, same message:

Warning:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.1.0) and test app (23.0.1) differ.

I added:

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

Now both resolve to 23.1.0, the warning is gone, and the app and tests still work.

I'm not sure that it's the better solution, so I'm searching for another but found your question.

Update: Read this good explanation by PaulR.

Update2: Confirmed, android-testing google sample does it.

// 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: Another good response by CommonsWare.

Check your specific versions/conflicts/resolutions using:

./gradlew -q yourmodule:dependencies 

enter image description here

Appcompat is 22.1.1 in your case but you are forcing 22.1.0.

Update4: Dependency conflict explained at The Android Build System (Android Dev Summit 2015).

enter image description here

Resolving conflicts between main and test APK

When instrumentation tests are run, both the main APK and test APK share the same classpath. Gradle build will fail if the main APK and the test APK use the same library (e.g. Guava) but in different versions. If gradle didn't catch that, your app could behave differently during tests and during normal run (including crashing in one of the cases).

To make the build succeed, just make sure both APKs use the same version. If the error is about an indirect dependency (a library you didn't mention in your build.gradle), just add a dependency for the newer version to the configuration ("compile" or "androidTestCompile") that needs it. You can also use Gradle's resolution strategy mechanism. You can inspect the dependency tree by running ./gradlew :app:dependencies and ./gradlew :app:androidDependencies.

like image 84
albodelu Avatar answered Oct 02 '22 04:10

albodelu