70 votes

Toutes les bibliothèques com.android.support doivent utiliser exactement la même version

Lorsque j'ai mis à jour mon android studio, aujourd'hui, à partir de la version 2.2.3 2.3 soudainement, j'ai eu cette erreur dans mon construire.gradle sur la première ligne de compilation, dans les dépendances

(N'importe quel dependencie à la première place, mais il me donne toujours cette erreur):

Tous com.android.bibliothèques de prise en charge doivent utiliser la même version de la spécification (mélange de versions peut conduire à l'exécution des plantages). Versions trouvées 25.2.0, 24.0.0. Les exemples incluent des com.android.support:animation-vecteur-drawable:25.2.0 et com.android.support:mediarouter-v7:24.0.0

j'ai regardé à travers l'ensemble de mon projet et je ne peux trouver aucune utilisation de versions 24.0.0 (j'ai regardé avec ctrl + shift + F pour rechercher dans tout le projet)

c'est mon build.gradle:

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'
    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 25
        versionName "1.0"
        versionCode 1
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
        debug {
            minifyEnabled true
            shrinkResources true
        }
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.google.android.gms:play-services:+'
    compile 'com.squareup:otto:1.3.8'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'com.android.support:multidex:1.0.1'
}

63voto

Jule Points 807

Pour des précisions sur la accepté de répondre, de la bonne résolution des dépendances de la bibliothèque de prise en charge des cas est comme suit:

Ne pas juste ajouter des dépendances transitives directes des dépendances à la force de leurs versions; c'est sémantiquement la mauvaise chose à faire (si vous supprimez jamais la dépendance qui a apporté la dépendance transitive, vous avez maintenant un reste de dépendance que vous n'êtes pas en train de l'utiliser).

Procédez de la manière suivante:

Dans votre racine build.gradle, vous les avez déjà

ext {
    supportlib_version = '27.1.1'
    ...
}

et utiliser cette propriété dans le par exemple, app/build.gradle comme

dependencies {
    implementation "com.android.support:appcompat-v7:$supportlib_version"
    implementation "com.android.support:recyclerview-v7:$supportlib_version"
    ...
}

Maintenant, dans votre racine build.gradle, ont

subprojects {
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "$supportlib_version"
            }
        }
    }
}

c'est, dans chaque module et de chaque configuration, lors de la résolution des dépendances, si c'est un soutien lib (mais pas le multidex (il peut y avoir d'autres exceptions)), de la force de la version de votre pension normalisés lib version.


Maintenant dans l'âge de jetpack et jetifier, il semble prudent d'employer une variation (en supposant que vous avez migré vers le androidx versions):

Votre par exemple, app/build.gradle contient maintenant androidx dépendances, mais les bibliothèques que vous utilisez peut encore transitivement tirer dans supportlib de dépendances, qui vous voulez toujours sur la même version (à savoir, 28.0.0) afin qu'ils puissent obtenir correctement jetified au moment de la construction.

Afin de garder la racine build.gradle pièces, l'utilisation de la 28.0.0 de la supportlib_version.

56voto

CommonsWare Points 402670

j'ai regardé à travers l'ensemble de mon projet et je ne peux trouver aucune utilisation de versions 24.0.0

Elle est venue comme une dépendance transitive de l'un des autres dépendances.

Mais d'abord, résoudre les autres problèmes dans votre build.gradle le fichier, car ils peuvent résoudre ce problème ainsi:

  • Ne pas utiliser + pour une version de bibliothèque. L'utilisation d'une version spécifique.

  • Ne pas utiliser play-services. Les dépendances pour les pièces spécifiques de la pièce SDK de Services que vous souhaitez. play-services apporte à tous de Jouer à des Services, ce qui rend votre application beaucoup plus grande qu'elle doit être et de ralentir votre temps de construire beaucoup.

  • Remplacer com.mcxiaoke.volley avec l'officiel du Volley-artefact (com.android.volley:volley:1.0.0)

Si aucun de ceux résoudre le problème, vous pouvez exécuter une Gradle rapport de dépendance, pour voir ce que votre arbre de dépendances. À partir de là, vous pourrez voir qui de vos bibliothèques demande pour une autre version de l'Android bibliothèques de prise en charge. Pour ce qu'il demande, vous pouvez demander directement à l' 25.2.0 version, ou de l'utilisation Gradle autres approches de résolution des conflits afin de prendre des dispositions pour obtenir la même version.

23voto

Brandon Zamudio Points 2197

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

Attention à la petite fenêtre d'information qui disent quelque chose à propos de l'erreur, il affirme que les exemples que vous avez à changer et ajouter.

Vous ne pouvez pas voir les usages, car son utilisation est probablement l'intérieur d'une autre bibliothèque (comme les google play services ou squareup).

Juste compiler tous les exemples que la petite fenêtre d'information dit, dans votre cas:

Les exemples incluent des com.android.support:animation-vecteur-drawable:25.2.0 et com.android.support:mediarouter-v7:24.0.0

Votre

com.android.support:animation-vecteur-drawable:25.2.0

est version 25.2.0, et votre

com.android.support:mediarouter-v7:24.0.0

est version 24.0.0, de sorte que vous devez ajouter le mediarouter avec la même version:

com.android.support:mediarouter-v7:25.2.0

Et ne que pour chaque exemple que la petite fenêtre d'information dit, dans votre cas, toutes les bibliothèques qui n'ont pas la version 25.2.0.

Vous devez synchroniser le gradle après avoir corrigé l'indication de la bibliothèque de voir la nouvelle bibliothèque et le forfait que vous avez à changer.

12voto

Code Hunter Points 133

Le même problème m'est arrivé. Ce que je viens de faire a ajouté ces deux lignes

 compile 'com.android.support:animated-vector-drawable:25.2.0'
compile 'com.android.support:customtabs:25.2.0'
 

problème résolu. J'ai également supprimé ma version précédente du dossier Gradle.

8voto

rookieDeveloper Points 1112

vous pouvez ajouter

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

et en cliquant avec le bouton droit de la souris sur la dépendance de rangée, vous pouvez ajouter les dépendances en conflit. pour moi c'était

 compile 'com.android.support:cardview-v7:25.2.0'
compile 'com.android.support:animated-vector-drawable:25.2.0'
 

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