Problem doppelte Klasse androidx.lifecycle.viewmodel in Modulen gefunden

Lesezeit: 5 Minuten

Benutzeravatar von Martin GGR
Martin GG

Ich habe diese Fehler, wenn ich versuche, den Emulator auszuführen

Doppelte Klasse androidx.lifecycle.ViewModelLazy gefunden in den Modulen jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) und lifecycle-viewmodel-2.4.0-runtime (androidx .lifecycle:lifecycle-viewmodel:2.4.0)

Doppelte Klasse androidx.lifecycle.ViewModelProviderKt in den Modulen jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) und lifecycle-viewmodel-2.4.0-runtime (androidx .lifecycle:lifecycle-viewmodel:2.4.0)

Doppelte Klasse androidx.lifecycle.ViewTreeViewModelKt in den Modulen jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) und lifecycle-viewmodel-2.4.0-runtime (androidx .lifecycle:lifecycle-viewmodel:2.4.0)

  • Vielleicht funktioniert diese Lösung für Ihre Antwort auf Stackoverflow

    – Vishal-Piep

    3. November 2021 um 10:45 Uhr

  • Ich habe dieses Problem auch mit Gradle Build. Dies ist nicht spezifisch für den Android-Emulator

    – Leerstelle

    3. November 2021 um 13:06 Uhr


Höchstwahrscheinlich verwendet eine Ihrer Abhängigkeiten die kotlin Version der viewmodel Bibliothek, während Ihr Code die verwendet java Ausführung.

Geben Sie beides an So erzwingen Sie die neueste Version für alle Abhängigkeiten:

def lifecycle_version = "2.4.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"

  • Danke, ich habe viewmodel-ktx nicht verwendet, aber es sieht so aus, als ob viewmodel-savedstate es benötigt hätte. Nach dem Hinzufügen von viewmodel-ktx:$lifecycle_version wurde das Problem behoben.

    – Leerstelle

    4. November 2021 um 10:43 Uhr

  • Gut, dies soll als richtige Antwort markiert werden. Ich habe auch ein Java-Modul, das Lifecycle-Viewmodel 2.4.0 und Lifecycle-Livedata 2.4.0 verwendet, und der Jetifier generiert widerspenstig 2.3.1 und führt zu Konflikten. Auch wenn ich ktx nicht im Java-Modul verwende, nachdem ich die Abhängigkeit lifecycle-viewmodel-ktx:2.4.0 hinzugefügt habe, ging mein Fehler einen Weg.

    – Yinding Wang

    7. November 2021 um 12:34 Uhr


  • Wo füge ich das in mein Projekt ein? Build.gradle?

    – Jackie

    15. August um 15:47 Uhr

  • @Jackie Ja, die App build.gradle in dem dependencies Sektion.

    – l33t

    16. August um 10:56 Uhr

Ich hatte das gleiche Problem und habe es gelöst, indem ich nur eine Codezeile hinzugefügt habe

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'

  • Vielen Dank. Das hat heute funktioniert. Ich habe keine Ahnung, welche Bibliothek Klassen verwendet. Ich habe Folgendes hinzugefügt, um das Problem zu lösen: implementierung ‘androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0’

    – Hong

    1. Juli um 22:21 Uhr

  • Ich verstehe nicht, warum Leute diese Nachahmerantwort positiv bewerten. Zunächst einmal ist diese Lösung falsch und wird kaputt gehen, wenn die Bibliothek des Drittanbieters aktualisiert wird. Sie sollten angeben beide die Kotlin- und Java-Versionen. Auf diese Weise haben Sie die Kontrolle darüber lifecycle-viewmodel Bibliotheksversion zu verwenden.

    – l33t

    15. August um 12:11 Uhr

  • Das funktioniert für mich, also ist es mir egal, ob es sich um eine Nachahmerantwort handelt oder nicht, ich habe sie positiv bewertet. Hat mir Stunden gespart, nachdem ich so viele Strategien zur Auflösung von Abhängigkeiten ausprobiert hatte

    – Rafsandschani

    20. August um 11:40 Uhr


Benutzeravatar von Alex Rmcf
Alex Rmcf

Ich dachte, dass es besser ist, doppelte Klassen zu eliminieren, als neue hinzuzufügen, also poste ich hier meine Lösung für dieses Problem:

configurations {
    all {
        exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
    }
}

Diese Codezeilen müssen der build.gradle-Datei auf Projektebene hinzugefügt werden – und der Build-Fehler verschwindet zusammen mit dem verschwendeten Speicher (ein bisschen, aber immer noch).

Seltsames und unverständliches Verhalten. Ich habe es bekommen, nachdem ich dem Projekt die Kotlin-Bibliothek hinzugefügt hatte, die später durch eine Version für Java ersetzt wurde. Wenn Sie zum .gradle-Ordner gehen, können Sie es dort finden, aber ich bin mir nicht sicher, ob es eine gute Idee ist, es von dort zu entfernen, da es möglicherweise in anderen Bibliotheken verwendet wird. Seltsamerweise löst Gradle oder AndroidStudio dieses Problem nicht automatisch, da in der Datei build.gradle nur Abhängigkeiten für Java angegeben sind.

  • Welche “Erinnerung” meinst du? Der PC oder das Android-Gerät? Soweit ich sehen konnte, gibt es keine zusätzliche Aufblähung in der resultierenden APK (könnte ein Ergebnis von R8).

    – l33t

    29. Dezember 2021 um 13:44 Uhr

  • Ich spreche von resultierenden apk

    – Alex Rmcf

    29. Dezember 2021 um 18:42 Uhr

  • @ l33t genau – 12 870 436 Bytes gegenüber 13 102 070 Bytes. Wie ich schon sagte – ein bisschen, aber immerhin

    – Alex Rmcf

    29. Dezember 2021 um 18:47 Uhr


  • Ich habe einige Tests durchgeführt. Bei allen Optimierungen (zB Release + minify mit R8) entfernen lifecycle-viewmodel-ktx reduziert die Größe mit weniger als 1kB. Höchstwahrscheinlich R8 ist in der Lage, 99 % der Blähungen loszuwerden, sodass ein oder zwei zusätzliche Klassen übrig bleiben (classes.dex unterscheidet sich). Ihre Lösung scheint zu funktionieren, aber warum entfernt der Minifier diese letzten Klassen nicht? Könnte ein kleiner Fehler sein R8 oder vielleicht gibt es eine echte Abhängigkeit von Drittanbietern, die irgendwann diese Kotlin-Klassen benötigt. Ihre Zahlen weisen auf ein anderes Problem hin.

    – l33t

    6. Januar um 12:27 Uhr


  • @ l33t Ich habe es nicht ganz richtig erklärt. Um die genannten Zahlen zu erhalten, habe ich mehrere Bibliotheken ausgeschlossen, die ich explizit verwendet habe, die aber auch als Abhängigkeiten in anderen Bibliotheken vorhanden waren (aber beispielsweise mit niedrigeren Versionen). Gruppe ausschließen: „org.json“, Modul: „json“ Gruppe ausschließen: „androidx.lifecycle“, Modul: „lifecycle-viewmodel-ktx“ Gruppe ausschließen: „androidx.lifecycle“, Modul: „lifecycle-viewmodel:2.3. 1′ Gruppe ausschließen: ‘org.apache.commons’, Modul: ‘commons-lang3’ und andere

    – Alex Rmcf

    6. Januar um 16:10 Uhr


Das Ändern der Viewmodel- und Viewmodel-ktx-Version auf die neueste Version löste das Problem für mich:

implementation "androidx.lifecycle:lifecycle-viewmodel:2.5.1"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1"

Ich habe ‘com.google.android.material:material:1.7.0-alpha03’ aktualisiert und erhalte diesen Fehler. Dann füge ich, wie @kirill vorschlägt, das neueste ktx-Ansichtsmodell hinzu, selbst wenn unser Code vollständig auf Java läuft, funktioniert es wieder.

  • Es hat für mich funktioniert. Mein Code ist in Kotlin. Nur die Version der Abhängigkeit zu aktualisieren, hat den Job gemacht.

    – Rumit Patel

    16. August um 10:54 Uhr

Benutzeravatar von KirilP
KirilP

Es hat mir geholfen, appcompat von 1.5.0 auf 1.4.2 zurückzusetzen, wie in diesem Thread vorgeschlagen: Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.0-runtime

  • Es hat für mich funktioniert. Mein Code ist in Kotlin. Nur die Version der Abhängigkeit zu aktualisieren, hat den Job gemacht.

    – Rumit Patel

    16. August um 10:54 Uhr

Benutzeravatar von Linh
Linh

Nachdem ich eine neue leere Compose-Aktivität erstellt habe, habe ich diesen Fehler erhalten.
Aktualisieren Sie alle Abhängigkeiten auf die neueste Version, um den Fehler zu beheben Duplicate class androidx.lifecycle.ViewModelLazy ...

1395740cookie-checkProblem doppelte Klasse androidx.lifecycle.viewmodel in Modulen gefunden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy