web-dev-qa-db-fra.com

Composants d'architecture Android: erreur de synchronisation Gradle pour la version de dépendance

J'essaie d'ajouter ViewModel et LiveData à une application Kotlin. J'ai les dépendances suivantes ajoutées au build.gradle de mon module:

implementation "Android.Arch.lifecycle:extensions:1.1.1"
kapt "Android.Arch.lifecycle:compiler:1.1.1"
testImplementation "Android.Arch.core:core-testing:1.1.1"

Je reçois l'erreur suivante:

Dépendance Android 'Android.Arch.lifecycle: runtime' a une version différente pour le chemin de classe compile (1.0.0) et runtime (1.1.1). Vous devez définir manuellement la même version via DependencyResolution

La suppression de la première ligne (extensions) résout le problème, indiquant que l'erreur provient de là, mais je ne peux pas comprendre pourquoi.

16
RedBassett

Apparemment, support-v4 était à l'origine du conflit. Dans le cas de cette question, la tâche de dépendance de Gradle ne fonctionnait pas correctement, mais pour toute autre personne confrontée à ce problème:

./gradlew :app:dependencies affichera les sous-dépendances utilisées par vos dépendances. Recherchez dans le résultat de cette commande (en modifiant app le nom de votre module) pour déterminer la dépendance à l'origine du conflit.

5
RedBassett

Comme le mentionne @RedBassett, les bibliothèques de support dépendent de cette importation légère (bibliothèque d'exécution), comme expliqué dans Documentation pour les développeurs Android .

Ceci est, Android.Arch.lifecycle: runtime: 1.0.0 s’étend dans l’arbre des dépendances à la suite d’une importation interne (transitive) api. Dans mon cas, je n’ai donc dû inclure la bibliothèque d’extensions que comme "api". "implémentation" pour qu'il écrase sa version au plus haut niveau (1.1.1).

En conclusion, changement

implementation "Android.Arch.lifecycle:extensions:1.1.1"

à

api "Android.Arch.lifecycle:extensions:1.1.1"
45
Rubén Viguera

Dans votre fichier build.gradle principal

allprojects {
    ...

    configurations {
        all {
            resolutionStrategy {
                force "Android.Arch.lifecycle:runtime:1.1.1"
            }
        }
    }

}

Ceci appliquera la version 1.1.1

15
sergej shafarenka

@RedBassett a raison. Cependant, je rencontrais toujours un problème d’exclusion des sous-dépendances liées à Android.Arch.lifecycle

Dans mon cas, le conflit a été causé dans com.Android.support:appcompat-v7:27.1.1

Voici à quoi ressemble ma dépendance de grade après l'avoir exclue.

implementation ('com.Android.support:appcompat-v7:27.1.1') {
    exclude group: 'Android.Arch.lifecycle'
}


api "Android.Arch.lifecycle:runtime:1.1.1"
kapt "Android.Arch.persistence.room:compiler:1.1.1"

En outre, vous devrez ajouter cette exclusion dans chaque module importé.

1
Sahil Patel