web-dev-qa-db-fra.com

Les versions résolues de l'application (22.0.0) et de l'application de test (21.0.3) diffèrent

Après la mise à niveau vers l'API 22 et la prise en charge de la révision 22 de la bibliothèque, l'avertissement suivant s'affiche:

Avertissement: Conflit avec dépendance "com.Android.support:support-annotations". Versions résolues pour app (22.0.0) et l'application de test (21.0.3) diffèrent.

Gradle lui-même est plus tolérant, mais Android Studio, pas tellement.

Je n'ai aucune dépendance déclarée avec 21.0.3 ... l'une des bibliothèques dépendantes utilise-t-elle 21.0.3 et Google a-t-il oublié de le mettre à jour avec le reste du lot?

Mon build.gradle avec les extras découpés

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

Mise à jour: (Merci Mark)

On dirait que c'est un 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 (*)
178
copolii

La première étape pour gérer ce type de problème consiste à se familiariser avec Gradle en ligne de commande.

L'étape 2 consiste à exécuter le rapport sur les dépendances Gradle (par exemple, gradle -q app:dependencies à partir de la racine du projet). Cela fournira l’arborescence ASCII, comme indiqué dans la mise à jour de la question, et devrait vous aider à identifier ce qui demande les versions en conflit des artefacts.

La troisième étape consiste à décider de ce qui doit être remplacé. Vous avez choisi de ne remplacer que le conflit (support-annotations). Personnellement, j'aurais opté pour la racine de l'arborescence des versions incorrectes (recyclerview-v7), bien que, pour autant que je sache, ce ne soit peut-être pas la meilleure solution dans ce cas.

L'étape 4 consiste à ajouter la directive exclude pour bloquer ce que vous avez choisi à l'étape 3:

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

L'étape 5 consiste à tester le bon déroulement de ce changement. Vous dites que espresso-contriba pour gérer l'édition 22.0.0 de support-annotations. Cela peut fonctionner. Cela ne peut pas. Cela dépend de la compatibilité ascendante du conflit. Dans ce cas, support-annotations devrait être très bon à ce sujet.

L'étape 6 consiste à consommer la boisson de votre choix, une boisson adaptée à votre lieu et à votre heure de la journée.

283
CommonsWare

Ce que j'ai fait pour le résoudre a été d'ajouter la ligne ci-dessous à mon script build.gradle

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

Remplacez xx.x.x par la version de support-annotations utilisée par votre application. Elle apparaîtra dans vos dépendances ou le message de synchronisation Gradle sous la forme: Resolved version for app (xx.x.x) en cas de problème de synchronisation.

146
Renan Nery

En fait, c’est un bogue de la nouvelle version de mise à jour d’Espresso Contrib, vous pouvez consulter cette solution de contournement: Android-testing/build.gradle

configurations.all {
    resolutionStrategy.force 'com.Android.support:support-annotations:22.1.0'
}
58
bony

Veuillez consulter https://github.com/JakeWharton/u2020/blob/05a57bf43b9b61f16d32cbe8717af77cd608b0fb/build.gradle#L136-L140

configurations.all {
  resolutionStrategy {
    force 'com.Android.support:support-annotations:23.1.1'
  }
}

Cela a résolu mon problème.

Sinon, vous pouvez exécuter gradlew sur Windows et ./gradlew pour mac/linux, cela téléchargera votre dépendance si nécessaire.

23
maruti060385

J'ai également rencontré ce problème ainsi que d'autres conflits impliquant-appcompat et la solution que j'ai trouvée consistait à ajouter des compilations de test et à les définir sur le sdk que vous utilisez actuellement. Dans mon cas, c'est 25, ça ressemble à ça:

androidTestCompile 'com.Android.support:support-annotations:25.+'
androidTestCompile 'com.Android.support:appcompat-v7:25.+'
androidTestCompile 'com.Android.support:support-v4:25.+'
androidTestCompile 'com.Android.support:recyclerview-v7:25.+'
androidTestCompile 'com.Android.support:design:25.+'

De plus, comme vous pouvez le constater, j’ai ajouté la dépendance à la conception, qui est liée à Android Material Design. 

J'espère que ça aide =) 

8
glauber

pour sdkversion 25

     androidTestCompile 'com.Android.support:support-annotations:25.2.0'
8
dc10

vous pouvez exécuter gradlew sur windows et ./gradlew pour mac/linux, cela téléchargera votre dépendance si nécessaire.

Vous pouvez vérifier si l'une des bibliothèques est dépendante de l'annotation de support ou si une bibliothèque est nommée par erreur et essayez de l'exclure de manière similaire à celle indiquée ci-dessous.

compile ("org.Apache.maven: maven-ant-taches: $ {mavenAntTaskVer} ‌") { groupe d'exclusion: 'junit' }.

Erreur: conflit avec la dépendance 'junit: junit'. Les versions résolues pour app (3.8.1) et test (4.12) sont différentes. Voir g.co/androidstudio/app-test-app-conflict pour plus de détails. 

ce fut l'erreur que je devenais donc j'ai utilisé ci-dessus ligne de gradle pour résoudre le problème

3
maruti060385

Supprimez simplement ces lignes dans votre fichier build.gradle:

androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
2

J'avais le même problème avec 26.0.0 et 27.1.1 et, en fait, je ne fais que mettre à niveau l'ancien pour qu'il fonctionne plus tard. 

0
Weapon X

C’est un problème courant dans les tests d’instrumentation, comme indiqué ici et qui peut être résolu simplement en ajoutant les dépendances d’androidTestCompile dans le fichier build.gradle. Dans mon cas, des conflits sont apparus dans les dépendances appcompat, recyclerview et design. Et résolu en ajoutant les lignes suivantes

    androidTestCompile 'com.Android.support:appcompat-v7:23.4.0'
    androidTestCompile 'com.Android.support:recyclerview-v7:23.4.0'
    androidTestCompile 'com.Android.support:design:23.4.0'
0
cammando