Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resolved versions for app (22.0.0) and test app (21.0.3) differ

After upgrading to API 22 and support lib revision 22 I'm getting the following warning:

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

Gradle itself is more forgiving, but Android Studio, not so much.

I have no dependencies declared with 21.0.3 ... is one of the dependent libraries using 21.0.3 and Google forgot to update it with the rest of the batch?

My build.gradle with the extras cut out

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

Update: (Thanks Mark)

Looks like it's 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 (*) 
like image 644
copolii Avatar asked Mar 11 '15 23:03

copolii


2 Answers

What I did to solve it was add the below line in to my build.gradle script

androidTestCompile 'com.android.support:support-annotations:xx.x.x' 

Replace xx.x.x with whatever version of support-annotations your app is using - this will be shown in your dependencies, or the Gradle sync message as: Resolved version for app (xx.x.x) should there be a problem syncing.

like image 29
Renan Nery Avatar answered Sep 25 '22 12:09

Renan Nery


Step #1 when dealing with this sort of thing is to get comfortable with command-line Gradle.

Step #2 is to run the Gradle dependencies report (e.g., gradle -q app:dependencies from the project root). This will provide the ASCII tree as shown in the update to the question, and it should help you identify what is asking for the conflicting artifact versions.

Step #3 is to decide what needs replacing. You elected to replace just the conflict (support-annotations). Personally, I would have gone with the root of the wrong-version tree (recyclerview-v7), though for all I know that might not be the best course of action in this case.

Step #4 is to add the exclude directive to block what you chose in Step #3:

androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {     exclude module: 'support-annotations' } 

Step #5 is to test the heck out of this change. What you are doing is saying that espresso-contrib has to deal with the 22.0.0 edition of support-annotations. That may work. That may not. It depends on the backwards compatibility of the conflict. In this case, support-annotations should be pretty good about it.

Step #6 is to consume the beverage of your choice, one appropriate for your locale and time of day.

like image 147
CommonsWare Avatar answered Sep 25 '22 12:09

CommonsWare