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

179

Après la mise à niveau vers l'API 22 et le support de la révision de la bibliothèque 22, je reçois l'avertissement suivant:

Avertissement: conflit avec la dépendance 'com.android.support:support-annotations'. Les versions résolues de l'application (22.0.0) et de l'application de test (21.0.3) diffèrent.

Gradle lui-même est plus indulgent, mais Android Studio, pas tellement.

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

Mon build.gradleavec 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 expresso-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 (*)
copolii
la source
5
La Gradle dependenciestâche peut être en mesure de vous aider à identifier le coupable: gradle.org/docs/current/userguide/...
CommonsWare
1
Merci Mark. On dirait que espresso-contribc'est la cause ...
copolii
2
Vous pouvez essayer excludede bloquer l'édition 21.0.3 de recyclerview-v7, récupérer vous-même l'édition 22.0.0 et prier pour qu'elle soit suffisamment compatible pour espresso-contribles besoins de. Personnellement, je suis étonné que vous mainteniez votre santé mentale avec cette longue liste de dépendances ... :-)
CommonsWare
1
Oui. Cela a fait l'affaire. Si vous mettez cela comme réponse, je vais vous donner les haricots :) androidTestCompile ('com.android.support.test.espresso: espresso-contrib: 2.0') {exclude module: 'support-annotations'}
copolii
1
Mon même problème a été résolu simplement par un simple redémarrage du studio Android :)
Lakhwinder Singh Dhillon

Réponses:

286

L'étape n ° 1 lorsque vous traitez avec ce genre de choses est de vous familiariser avec Gradle en ligne de commande.

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

L'étape n ° 3 consiste à décider de ce qui doit être remplacé. Vous avez choisi de remplacer uniquement le conflit ( support-annotations). Personnellement, j'aurais choisi la racine de l'arborescence de la mauvaise version ( recyclerview-v7), même si pour autant que je sache, ce n'est peut-être pas la meilleure solution dans ce cas.

L'étape n ° 4 consiste à ajouter la excludedirective 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 n ° 5 consiste à tester le diable de ce changement. Ce que vous faites, c'est dire que cela espresso-contrib doit faire face à l'édition 22.0.0 desupport-annotations . Cela peut fonctionner. Peut-être pas. Cela dépend de la compatibilité ascendante du conflit. Dans ce cas, cela support-annotationsdevrait être assez bon.

L'étape n ° 6 consiste à consommer la boisson de votre choix, adaptée à votre région et à l'heure de la journée.

CommonsWare
la source
4
J'ai utilisé exclude group: 'com.android.support', module: 'support-annotations' depuis que votre version a soulevé un avertissement "Impossible de déduire les types d'argument" de Gradle
Appoll
2
Fonctionne ... envisagez également de l'appliquer à com.android.support.test: runner: 0.3, com.android.support.test: rules: 0.3 et com.android.support.test.espresso: espresso-core: 2.2
uudashr
À l'étape 4, où ajoutez-vous cette directive androidTestCompile? Si j'essaie d'ajouter cette syntaxe au bloc de dépendances de mon application, j'obtiens des erreurs de syntaxe. Comme cela est écrit maintenant, il est un peu difficile de dire précisément où vous l'ajoutez.
OYRM
1
@OYRM: "où ajoutez-vous cette directive androidTestCompile?" - dans dependencies. Voir cet exemple de Chiu-Ki Chan.
CommonsWare
16
L'étape n ° 6 est la clé ici
Odaym
146

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.xpar la version des annotations de support que votre application utilise - cela sera affiché dans vos dépendances, ou le message de synchronisation Gradle comme: en Resolved version for app (xx.x.x)cas de problème de synchronisation.

Renan Nery
la source
Sensationnel. Je fais cela pour la mise à niveau, Junitmais totalement pour obtenir, je peux le faire pour d'autres dépendances également.
Jared Burrows
10
Ceci est en effet comment les échantillons Google font , une lecture de commentaire « d'utilisation force d'annotations de support dans l'application de test, car il est utilisé en interne par le module de coureur. ».
desseim
C'était la meilleure réponse pour moi. Remarque: Doit être mis à jour vers '23 .1.1 ':androidTestCompile 'com.android.support:support-annotations:23.1.1'
David Manpearl
Merci, dans mon cas, la ligne était déjà là, mais énonçait explicitement une version en conflit, mise à jour à celle requise et tout fonctionnait comme un charme.
RAM237
comment ajouter cela à la build.gradle?
ubuntu_noob
58

En fait, c'est un bogue de la nouvelle version de mise à jour d'Espresso Contrib, vous pouvez vous référer à cette solution de contournement: android-testing / build.gradle

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
osseux
la source
2
C'était mon problème. Le ticket est ici .
theblang
3
Cela crée un avertissement, la solution de @ RenanNery est meilleure
Diego Palomar
Cela ne marche pas. Je reçois toujours l'erreur de conflit à cause deandroidTestCompile 'com.android.support.test:runner:0.5'
IgorGanapolsky
1
@bony - Lien brisé
Mushtaq Jameel
Cela a fonctionné pour moi. J'ai mis ce bloc dans le "android {testOptions {<here>}}"
jwehrle
23

Veuillez vous référer à 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

maruti060385
la source
1
Cela m'a également aidé aujourd'hui (10/11/2018), mais avec la version 26.1.0, à éviter un conflit avec la version 27.1.1.
JB Rainsberger
8

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

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 voir, j'ai ajouté la dépendance de conception, qui est liée à Android Material Design.

J'espère que ça aide =)

gmartinsnull
la source
8

pour sdkversion 25

     androidTestCompile 'com.android.support:support-annotations:25.2.0'
dc10
la source
3

vous pouvez exécuter gradlew sur windows et ./gradlew pour mac / linux, cela téléchargera votre dépendance en cas de besoin.

Vous pouvez vérifier si l'une des bibliothèques a une dépendance sur l'annotation de support ou si toute bibliothèque avec est nommée par erreur et essayez de l'exclure dans gradle quelque chose comme ci-dessous

compile ("org.apache.maven: maven-ant-tasks: $ {mavenAntTaskVer} ‌") {exclure le groupe: 'junit'}

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

c'était l'erreur que j'obtenais, alors j'ai utilisé la ligne de graduation ci-dessus pour résoudre le problème

maruti060385
la source
Cela semble être un très bon moyen de résoudre un problème comme celui-ci. Et en plus, essayez d'exécuter cette ligne de commande ./gradlew: app: dependencies sous le répertoire racine de votre projet, cela créera une arborescence sur les dépendances de votre projet et vérifiera attentivement, puis vous trouverez d'où vient le conflit.
frank jorsn
2

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'
shiv om Bhardwaj
la source
Cela ne fonctionne pas de cette façon. Cela provoque plus d'erreurs dans le projet
0

C'est un problème courant dans le test d'instrumentation comme indiqué ici et peut être résolu simplement en ajoutant les dépendances pour androidTestCompile dans le build.gradle. Dans mon cas, un conflit est survenu 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'
cammando
la source
0

J'avais le même problème avec 26.0.0 et 27.1.1 et je me contentais de mettre à niveau l'ancien pour le faire fonctionner plus tard.

Arme X
la source