801 votes

Toutes les bibliothèques de com.Android.support doivent utiliser exactement les mêmes spécifications de version.

Après la mise à jour vers Android studio 2.3, j'ai reçu ce message d'erreur. Je sais que c'est juste un indice car l'application fonctionne normalement mais c'est vraiment étrange.

Toutes les bibliothèques com.Android.support doivent utiliser exactement la même spécification de version (le mélange de versions peut entraîner des plantages au moment de l'exécution). Les versions trouvées sont 25.1.1, 24.0.0. Par exemple, com.Android.support:animated-vector-drawable:25.1.1 et com.Android.support:mediarouter-v7:24.0.0.

enter image description here

mon gradle :

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    compile 'com.android.support:appcompat-v7:25.1.1'
    compile 'com.android.support:support-v4:25.1.1'
    compile 'com.android.support:design:25.1.1'
    compile 'com.android.support:recyclerview-v7:25.1.1'
    compile 'com.android.support:cardview-v7:25.1.1'
    compile 'com.google.android.gms:play-services-maps:10.2.0'
    compile 'com.google.android.gms:play-services:10.2.0'

    compile 'io.reactivex.rxjava2:rxjava:2.0.1'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'com.blankj:utilcode:1.3.6'
    compile 'com.orhanobut:logger:1.15'
    compile 'com.facebook.stetho:stetho:1.4.2'

    provided 'com.google.auto.value:auto-value:1.2'
    annotationProcessor 'com.google.auto.value:auto-value:1.2'
    annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.5'

    compile 'com.mikepenz:iconics-core:2.8.2@aar'
    compile('com.mikepenz:materialdrawer:5.8.1@aar') { transitive = true }
    compile 'com.mikepenz:google-material-typeface:2.2.0.3.original@aar'
    compile 'me.zhanghai.android.materialprogressbar:library:1.3.0'
    compile 'com.github.GrenderG:Toasty:1.1.1'
    compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.8.0'
    compile 'com.github.MAXDeliveryNG:slideview:1.0.0'

    compile 'com.facebook.fresco:fresco:1.0.1'
    compile 'com.github.bumptech.glide:glide:3.7.0'

    compile 'com.google.maps.android:android-maps-utils:0.4.4'
    compile 'com.github.jd-alexander:library:1.1.0'
}

0 votes

Ajouter ceci à votre projetBuild.Gradle sous-projets { project.configurations.all { resolutionStrategy.eachDependency { details -> if (details.requested.group == 'com.Android.support' && !details.requested.name.contains('multidex') ) { details.useVersion "26.+" } } } }

912voto

humazed Points 398

Vous pouvez résoudre ce problème avec l'une des solutions suivantes :

Mise à jour :

Depuis la version 3.0 d'Android Studio, cela devient beaucoup plus facile, car le logiciel affiche désormais une indication plus utile, qu'il suffit de suivre.
par exemple : 1

Toutes les bibliothèques com.Android.support doivent utiliser exactement la même version (le mélange de versions peut entraîner des pannes d'exécution). Trouvé versions 27.0.2, 26.1.0. Exemples com.Android.support:animated-vector-drawable:27.0.2 et com.Android.support:customtabs:26.1.0

il y a certaines combinaisons de bibliothèques, ou d'outils et de bibliothèques, que sont incompatibles, ou peuvent conduire à des bogues. L'une de ces incompatibilités est est la compilation avec une version des bibliothèques de support Android qui n'est pas la dernière version (ou en particulier, une version inférieure à votre targetSdkVersion).

Solution :
Ajouter explicitement la bibliothèque avec l'ancienne version mais avec un nouveau numéro de version.
dans mon cas com.android.support:customtabs:26.1.0 donc je dois ajouter :

implementation "com.android.support:customtabs:27.0.2"  

C'est-à-dire : prenez la bibliothèque du deuxième élément, et mettez-la en œuvre avec le numéro de version du premier.

Remarque : n'oubliez pas d'appuyer sur sync maintenant pour que gradle puisse reconstruire le graphe de dépendances et voir s'il y a d'autres conflits.

Explication :
vous pouvez être confus par le message d'erreur car vous n'utilisez pas de customtabs alors comment j'ai un conflit ! !!
Vous ne l'avez pas utilisé directement mais une de vos bibliothèques utilise une ancienne version de customtabs en interne, vous devez donc le demander directement.

si vous êtes curieux de savoir laquelle de vos bibliothèques est responsable de l'ancienne version et peut-être demander à l'auteur de mettre à jour sa librairie, Exécutez un rapport de dépendance Gradle, voir l'ancienne réponse pour savoir comment.

Notez ceci


Vieille réponse :

inspiré par Réponse de CommonsWare :

Exécutez un rapport de dépendances Gradle pour voir ce que votre arbre complet de dépendances.

À partir de là, vous verrez lesquelles de vos bibliothèques demandent une version différente des bibliothèques Android Support. Pour ce qu'elle demande, vous pouvez la demander directement avec la version 25.2.0 ou utiliser les autres approches de résolution de conflit de Gradle pour obtenir les mêmes versions.


Mise à jour :

A partir de la version du plugin gradle : 3.0 compile a été remplacé par implementation ou api voir cette réponse pour la différence.

à utiliser à la place :

./gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

ou pour Windows cmd :

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

et chercher la version conflictuelle.

Pour moi, l'erreur a disparu après avoir supprimé com.google.android.gms:play-services:10.2.0

Et n'inclure que com.google.android.gms:play-services-location:10.2.0 y com.google.android.gms:play-services-maps:10.2.0 car ce sont les deux seuls services de lecture que j'utilise.

Je pense que le gms:play-services dépendent de certains anciens composants de la bibliothèque de support, nous devons donc les ajouter explicitement nous-mêmes.


pour AS 3.0 et plus.

Cours :

./gradlew -q dependencies <module-name>:dependencies --configuration implementation

Exemple :

./gradlew -q dependencies app:dependencies --configuration implementation

si quelqu'un connaît une meilleure méthode dans le nouveau plugin gradle, merci de me le faire savoir.

3 votes

com.google.android.gms:play-services:10.2.0 supporte le SDK 14 et supérieur, si vous voulez utiliser un SDK inférieur à 14, vous devez utiliser la version 10.0.1 comme mentionné dans stackoverflow.com/a/42315590/6248491

0 votes

J'ai ajouté la compilation "com.Android.support:customtabs:25.2.0" et mis à jour la compilation "com.afollestad.material-dialogs:core:0.9.3.0" pour la remplacer par "com.afollestad.material-dialogs:core:0.9.4.0".

0 votes

J'ai lancé cette commande pour voir l'arbre des dépendances, mais je ne trouve pas de dépendances qui ont une version différente.

202voto

João Paulo Paiva Points 1967
  1. Ir a project/.idea/libraries sur votre système de fichiers et voyez quelles bibliothèques sont différentes.
  2. Vous devrez inclure manuellement ces bibliothèques avec la même version dans votre fichier build.gradle archivo.
  3. Ensuite, synchronisez votre projet.

Par exemple :

compile 'com.android.support:appcompat-v7:25.2.0'

// Wrong library version found on 1st point
compile 'com.android.support:customtabs:25.2.0'

0 votes

Bon point. Je n'avais jamais pensé à regarder lequel n'était pas le bon. :S Merci !

0 votes

Fonctionne alors que la méthode de résolution automatique de gradle ne fonctionne pas, merci.

10 votes

Dans /Fichiers du projet/Mon projet/.idea/libraries il y a plusieurs fichiers de support avec des versions différentes. Maintenant, comment puis-je savoir quel module ou dépendance utilise ce fichier ?

150voto

Brandon Zamudio Points 2197

Pour tous les cas, et pas seulement pour ces versions ou bibliothèques :

Faites attention à la petite fenêtre d'information qui dit quelque chose sur l'erreur, il indique les exemples que vous devez changer et ajouter .

Dans ce cas :

Les versions trouvées sont 25.1.1, 24.0.0. Les exemples incluent com.Android.support:animated-vector-drawable:25.1.1 et com.Android.support:mediarouter-v7:24.0.0

Votre

com.Android.support:animated-vector-drawable:25.1.1

est la version 25.1.1 et votre

com.Android.support:mediarouter-v7:24.0.0

est la version 24.0.0 Vous devez donc ajouter le mediarouter avec la même version :

com.android.support:mediarouter-v7:25.1.1

Et faites cela pour chaque exemple que la petite fenêtre d'information indique, dans ce cas toutes les bibliothèques qui n'ont pas la version 25.1.1.

Vous devez synchroniser le gradle après avoir corrigé la bibliothèque indiquée pour voir la prochaine bibliothèque et le prochain paquet que vous devez modifier.

IMPORTANT : Si vous n'utilisez pas explicitement une ou plusieurs bibliothèques spécifiées et qu'il vous donne l'erreur, cela signifie qu'il est utilisé en interne par une autre bibliothèque, compilez-le quand même explicitement. .

Vous pouvez également utiliser une autre méthode pour voir la différence entre les versions de toutes les bibliothèques que vous êtes en train de compiler (comme exécuter un rapport de dépendance gradle ou aller dans vos fichiers de bibliothèques), Le véritable objectif est de compiler toutes les bibliothèques que vous utilisez avec la même version. .

1 votes

Merci beaucoup, pouvez-vous s'il vous plaît expliquer ce que support:mediarouter fait exactement ?

1 votes

Je pense que c'est quelque chose que vous avez souligné et que la plupart d'entre nous ont négligé. Et c'est-à-dire : "Faites attention à la petite fenêtre d'information qui dit quelque chose sur l'erreur....". Merci, cela m'a permis de mieux comprendre ce qui se passe réellement.

109voto

Adarsh Vijayan P Points 681

La meilleure façon de résoudre le problème est de mettre en œuvre tous les éléments 'com.Android.support :...' proposés par Android Studio.

(Peu importe les versions de support que vous utilisez - 27.1.1, 28.0.0 etc.)

Placez le curseur sur la ligne d'erreur, par ex.

implementation 'com.android.support:appcompat-v7:28.0.0'

Android Studio vous indiquera si la version de 'com.Android.support :...' est différente de celle de que 'com.Android.support:appcompat-v7:28.0.0'.

Exemple

Toutes les bibliothèques com.Android.support doivent utiliser exactement la même spécification de version (le mélange de versions peut entraîner des plantages au moment de l'exécution). Versions trouvées : 28.0.0, 27.1.0, 27.0.2. Par exemple, com.Android.support:animated-vector-drawable:28.0.0 et com.Android.support:exifinterface:27.1.0.

Alors, ajoutez com.android.support:animated-vector-drawable:28.0.0 & com.android.support:exifinterface:28.0.0 . Maintenant, synchronisez le fichier gradle.

Essayez d'implémenter une par une toutes les suggestions 'com.Android.support :...' jusqu'à ce qu'il n'y ait plus d'erreur dans cette ligne. implementation 'com.android.support:appcompat-v7:28.0.0'

Dans mon cas, j'ai ajouté

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support:animated-vector-drawable:28.0.0'
implementation 'com.android.support:exifinterface:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:customtabs:28.0.0'
implementation 'com.android.support:support-media-compat:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'

Toutes ces dépendances, ça peut être différent pour vous.

0 votes

J'ai ajouté manuellement à la fois "implementation 'com.Android.support:animated-vector-drawable:28.0.0'" et "implementation 'com.Android.support:support-media-compat:28.0.0'" mais l'"implementation 'com.Android.support:appcompat-v7:28.0.0'" est toujours soulignée par du rouge

0 votes

@AAEM si vous placez le curseur sur la ligne d'erreur, il montrera quelles sont les dépendances que vous devez ajouter ensuite. Veuillez ajouter toutes les dépendances à la même version et synchroniser le fichier gradle. Si l'erreur se reproduit, suivez les étapes à nouveau jusqu'à ce qu'il n'y ait plus d'erreur.

102voto

ezzou Points 786

Ajoutez ceci à la toute fin de votre build.gradle (Module:app) :

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '25.3.1'
        }
     }

   }
}

Veillez à remplacer "25.3.1" par la version de la bibliothèque de support Android que vous souhaitez utiliser pour toutes les dépendances, qui ne doit pas être inférieure à la version de votre sdk complet.

que re-synchroniser gradle

3 votes

C'est ce dont j'avais besoin. L'une de mes dépendances générait une version 27.0.1, même si j'avais spécifié une version inférieure au niveau supérieur. Par curiosité, pourquoi exclure le "multidex" ?

0 votes

Je suis content que cela ait aidé, comme le prévoit la documentation : developer.Android.com/topic/libraries/support-library/ le multidex est la seule bibliothèque de support du groupe "com.Android.support" qui utilise un identifiant de version différent, sur le lien fourni c'est la version 1.0.0 , la plus récente étant la 1.0.1 comme vous pouvez le voir ici : developer.Android.com/studio/build/multidex.html#mdex-gradle

4 votes

Cela a sauvé la journée pour moi. Mais le développement d'Android devient de plus en plus fragmenté au fil des jours. Les gens doivent vraiment vérifier chaque bibliothèque de support parfaitement avant de la déployer. Nous n'avons pas toujours le luxe d'avoir le temps de passer en revue chaque nouvelle version de support parce que nous voulons nous concentrer sur la construction de nos produits plutôt que de passer par tout cela. C'est toujours frustrant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X