Question Toutes les bibliothèques 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 (les versions de mélange peuvent entraîner des plantages). Versions trouvées 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'
}

503
2018-02-21 17:35


origine


Réponses:


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

Mettre à jour:

À partir d'Android studio 3.0, cela devient beaucoup plus facile car il montre maintenant un indice plus utile, nous avons donc seulement besoin de suivre cet indice.
par exemple: 1]

Toutes les bibliothèques com.android.support doivent utiliser exactement la même version   spécification (les versions de mixage peuvent entraîner des pannes à l'exécution). A trouvé   versions 27.0.2, 26.1.0. Les exemples comprennent   com.android.support:animated-vector-drawable:27.0.2 et   com.android.support:customtabs:26.1.0

il existe des combinaisons de bibliothèques, d’outils et de bibliothèques, qui   sont incompatibles ou peuvent conduire à des bogues. Une telle incompatibilité est   compiler 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:
Ajoutez 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 j'ai besoin d'ajouter:

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

C'est-à-dire: Prenez la bibliothèque du deuxième élément et implémentez-la avec le numéro de version du premier.

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

Explication:
vous pouvez être dérouté par le message d'erreur car ne pas utiliser customtabs alors comment j'ai un conflit !!
bien ... vous ne l'avez pas utilisé directement mais l'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 de demander à l'auteur de mettre à jour sa lib, exécutez un rapport de dépendance, consultez l'ancienne réponse pour savoir comment faire.

Notez ceci


Vieille réponse:

inspiré par CommonsWare réponse:

Exécutez un rapport de dépendance Gradle pour voir quel est votre arbre complet de les dépendances est.

À partir de là, vous verrez laquelle de vos bibliothèques demande une version différente des bibliothèques de support Android. Pour tout ce qu'il demande, vous pouvez le demander directement avec le Version 25.2.0 ou utilisez les autres approches de résolution de conflit de Gradle pour obtenir les mêmes versions.


Mettre à jour:

À 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.

donc utilisez à la place:

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

et recherchez la version conflictuelle.

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

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

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


pour AS 3.0 un plus ancien.

Courir:

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

Exemple:

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

Si quelqu'un connaît un meilleur moyen dans le nouveau plugin Gradle s'il vous plaît faites le moi savoir.


528
2018-02-21 17:49



  1. Aller à project/.idea/libraries dossier sur votre système de fichiers et voir quelles bibliothèques sont différentes.
  2. Vous devrez inclure manuellement ces bibliothèques avec la même version dans votre build.gradle fichier.
  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'

165
2018-03-03 12:31



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

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

Dans ce cas:

Versions trouvées 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 ton 

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 dit, dans ce cas  toutes les bibliothèques qui n'ont pas la version 25.1.1.

Vous devez synchroniser le gradle après avoir réparé la bibliothèque indiquée pour voir la bibliothèque et le paquet suivant que vous devez changer.

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 de toute façon.

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


124
2018-03-07 18:41



J'ai eu exactement le même problème après la mise à jour vers Android Studio 2.3

L'ajout de cette ligne aux dépendances a résolu mon problème:

compile 'com.android.support:customtabs:25.2.0'

52
2018-03-03 22:01



Ajoutez ceci à la 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'
        }
     }

   }
}

Assurez-vous de remplacer '25 .3.1 'par la version de la bibliothèque de support Android que vous souhaitez utiliser pour toutes les dépendances, celle-ci ne doit pas être inférieure à celle de votre version sdk compliquée.

que re sync gradle


47
2017-10-26 20:56



A) Courir gradle dependencies ou ./gradlew dependencies

B) Regardez votre arbre et déterminez laquelle de vos dépendances spécifie une version de bibliothèque de support différente pour une dépendance que vous ne contrôlez pas.

Je n'ai pas réalisé que cet avertissement s'affiche également si la dépendance est complètement inutilisée directement par votre propre code. Dans mon cas, Facebook spécifie que certaines librairies de support que je n'utilisais pas, vous pouvez voir ci-dessous la plupart de ces dépendances ont été remplacées par ma propre spécification de 25.2.0, désignée par le -> X.X.X (*) symboles Les bibliothèques de vues de cartes et d'onglets personnalisés n'ont été remplacées par personne, donc je dois demander 25.2.0 pour celles-ci même si je ne les utilise pas.

+--- com.facebook.android:facebook-android-sdk:4.17.0
|    +--- com.android.support:support-v4:25.0.0 -> 25.2.0 (*)
|    +--- com.android.support:appcompat-v7:25.0.0 -> 25.2.0 (*)
|    +--- com.android.support:cardview-v7:25.0.0
|    |    \--- com.android.support:support-annotations:25.0.0 -> 25.2.0
|    +--- com.android.support:customtabs:25.0.0
|    |    +--- com.android.support:support-compat:25.0.0 -> 25.2.0 (*)
|    |    \--- com.android.support:support-annotations:25.0.0 -> 25.2.0
|    \--- com.parse.bolts:bolts-android:1.4.0 (*)

Si Gradle vous a déjà prévenu et vous a donné des exemples ...

Les exemples incluent com.android.support:animated-vector-drawable:25.1.1   et com.android.support:mediarouter-v7:24.0.0

... c'est encore plus facile si vous mettez en surbrillance un grep pour la version inférieure depuis gradle dependencies peut être assez verbeux:

./gradlew dependencies | grep --color -E 'com.android.support:mediarouter-v7|$'

35
2018-03-10 23:25



Utiliser des variables: Faire quelque chose comme ce qui suit vous aidera à vous assurer que vous utilisez la même version avec toutes les bibliothèques

dependencies {

    ext {
        support_library_version = '25.2.0'
        google_play_services_version = '10.2.0'
    }

    //#####################################################################
    //          Support Library
    //#####################################################################
    compile "com.android.support:appcompat-v7:${support_library_version}"
    compile "com.android.support:palette-v7:${support_library_version}"
    compile "com.android.support:design:${support_library_version}"

    //#####################################################################
    //          Google Play Services
    //#####################################################################
    compile "com.google.android.gms:play-services-auth:${google_play_services_version}"
    compile "com.google.android.gms:play-services-ads:${google_play_services_version}"
    compile "com.google.android.gms:play-services-analytics:${google_play_services_version}"

    //#####################################################################
    //          Firebase
    //#####################################################################
    compile "com.google.firebase:firebase-core:${google_play_services_version}"
    compile "com.google.firebase:firebase-auth:${google_play_services_version}"
    compile "com.google.firebase:firebase-messaging:${google_play_services_version}"

Plus d'informations sur la façon dont Google suggère que vous gérez cette version peut être trouvée dans cet article: https://developer.android.com/studio/build/index.html#top-level


27
2018-03-22 18:36