web-dev-qa-db-de.com

Android-Architekturkomponenten: Synchronisierungsfehler für Abhängigkeitsversion

Ich versuche, ViewModel und LiveData zu einer Kotlin-App hinzuzufügen. Ich habe die folgenden Abhängigkeiten zum build.gradle meines Moduls hinzugefügt:

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"

Ich habe folgende Fehlermeldung erhalten:

Die Android-Abhängigkeit 'Android.Arch.lifecycle: Runtime' hat unterschiedliche Versionen für den Klassenpfad compile (1.0.0) und Runtime (1.1.1). Sie sollten dieselbe Version manuell über DependencyResolution einstellen

Das Entfernen der ersten Zeile (extensions) behebt das Problem und zeigt an, dass der Fehler von dort kommt, aber ich kann nicht herausfinden, warum.

16
RedBassett

Anscheinend verursachte support-v4 den Konflikt. Bei dieser Frage funktionierte die Gradle-Abhängigkeitsaufgabe nicht ordnungsgemäß, aber für alle anderen Personen, die auf dieses Problem stoßen:

./gradlew :app:dependencies zeigt die von Ihren Abhängigkeiten verwendeten Unterabhängigkeiten an. Durchsuchen Sie die Ausgabe dieses Befehls (ändert app für Ihren Modulnamen) nach der Abhängigkeit, die den Konflikt verursacht.

5
RedBassett

Wie @RedBassett erwähnt, sind Support-Bibliotheken von diesem leichtgewichtigen Import (Laufzeitbibliothek) abhängig, wie unter Dokumentation für Android-Entwickler erläutert.

Dies ist Android.Arch.lifecycle: Laufzeit: 1.0.0 verbreitet sich im Abhängigkeitsbaum als Ergebnis eines internen (transitiven) Imports von APIs. In meinem Fall musste ich daher nur die Erweiterungsbibliothek als "API" anstelle von "" hinzufügen Implementierung ", so dass es seine Version auf die höchste (1.1.1) überschreibt.

Abschließend ändern

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

zu

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

In Ihrer build.gradle-Hauptdatei

allprojects {
    ...

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

}

Dadurch wird die Version 1.1.1 erzwungen.

15

@RedBassett hat recht. Ich hatte jedoch immer noch ein Problem mit dem Ausschluss Android.Arch.lifecycle abhängiger Unterabhängigkeiten. 

In meinem Fall wurde der Konflikt in com.Android.support:appcompat-v7:27.1.1 verursacht. 

So sieht meine Abhängigkeit nach dem Ausschluss aus.

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"

Außerdem müssen Sie diesen Ausschluss in jedem importierten Modul hinzufügen.

1
Sahil Patel

Ich habe nach allen Abhängigkeiten mit ./gradlew :app:dependencies Gesucht, wie @RedBassett erwähnt. Ich habe festgestellt, dass die inkompatible Version von Android.Arch.core:runtime, Über die sich Gradle beschwert hat, aus meiner Version von com.Android.support:appcompat-v7 Stammt. Ich habe diese Version auf den neuesten Stand gebracht und alles hat funktioniert.

0
Adam Johns