37

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'
}
Infinite Recursion
  • 6,511
  • 28
  • 39
  • 51
Mabad
  • 439
  • 1
  • 4
  • 6

13 Answers13

52

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.

Community
  • 1
  • 1
albodelu
  • 7,931
  • 7
  • 41
  • 84
26

I solved the conflict by adding dependency:

androidTestCompile 'com.android.support:support-annotations:23.2.0'
Andrew
  • 36,676
  • 11
  • 141
  • 113
  • This worked for me, but not only this library, sometimes other support libraries conflict too. You can add others with androidTestCompile too. Just a reminder for others who has similar problems – Yekmer Simsek Feb 05 '16 at 10:35
14

I had the same issue, solved by this:

// 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'
    }
}

solution was found here: https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso

UPDATE: finally dependencies block in my build.gradle looks like this:

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'
    }
}
Dmitry
  • 2,766
  • 1
  • 18
  • 17
  • this one should be accepted as the best solution, if we only specify the support-annotation module with version in dependency, we can compile but clean project will fail – http8086 Mar 20 '18 at 03:17
7

This happened to me recently when adding the uiautomator. To fix this issue, you need to figure out which dependency or dependencies is using the outdated module. You can do this by wrapping each androidTestCompile dependency into a block, like so:

androidTestCompile ('com.android.support.test.espresso:espresso-core:2.2') {
    transitive = false;
}

This might break some other things though, so you need to be careful. I was able to pinpoint exactly which two of the dependencies was causing this issue for me, and just adding this blocking mechanism to those.

Phil
  • 35,852
  • 23
  • 123
  • 164
4

I solved the conflict by excluding the support-annotation library from both runner and espresso-core dependencies:

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'
}
Juan José Melero Gómez
  • 2,742
  • 2
  • 19
  • 36
3

Add this to your main build.gradle:

allprojects {
    ...
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-annotations:23.1.1'
    }
    ...
}
Martin Zeitler
  • 1
  • 19
  • 155
  • 216
Sid
  • 1,224
  • 3
  • 23
  • 48
3

Add follow codes to your dependency block in build.gradle file

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'
TeeTracker
  • 7,064
  • 8
  • 40
  • 46
1

androidTestCompile change to testCompile. And remind dont't change it to compile, just need this dependencies to be compiled into our debug APK or test APK.

Rocko
  • 11
  • 3
1

For me this worked fine

dependencies {

    androidTestCompile 'com.android.support:support-annotations:23.1.1'
}
erluxman
  • 18,155
  • 20
  • 92
  • 126
1

I solved the conflict by adding dependency:

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'
ayac3j
  • 81
  • 6
0

In also got into the Problem saying

Could not resolve

com.android.support:support-annotations:23.1.0

and tried to find in other servers ,

But what resolved my problem is adding :

google-service.json 

file from

https://developers.google.com/mobile/add

and copy and paste it into

YourAndroidProject/app 

Then recompile it and i hope your code will fly

erluxman
  • 18,155
  • 20
  • 92
  • 126
0

Use this for resolving conflict

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
Rahul Yadav
  • 143
  • 6
  • Please add some details to your answer, such as an explanation of what is wrong in the OP's approach and why your suggestion addresses it. Is this answer valid only because over a year had passed since the question and things are different now? – Dev-iL Jan 06 '17 at 17:15
0

I solved the conflict by adding dependency:

androidTestCompile "com.android.support:support-annotations:26.0.0-beta1"
Devix
  • 432
  • 5
  • 16