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 (*)
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-contrib
a 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.
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.
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'
}
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.
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 =)
pour sdkversion 25
androidTestCompile 'com.Android.support:support-annotations:25.2.0'
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
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'
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.
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'