Problema de clase duplicada androidx.lifecycle.viewmodel encontrado en módulos

5 minutos de lectura

Avatar de usuario de Martin GGR
Martín GGR

Recibí estos errores cuando intento ejecutar el emulador

Clase duplicada androidx.lifecycle.ViewModelLazy encontrada en módulos jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) y lifecycle-viewmodel-2.4.0-runtime (androidx .lifecycle:lifecycle-viewmodel:2.4.0)

Clase duplicada androidx.lifecycle.ViewModelProviderKt encontrada en módulos jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) y lifecycle-viewmodel-2.4.0-runtime (androidx .lifecycle:lifecycle-viewmodel:2.4.0)

Clase duplicada androidx.lifecycle.ViewTreeViewModelKt encontrada en módulos jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) y lifecycle-viewmodel-2.4.0-runtime (androidx .lifecycle:lifecycle-viewmodel:2.4.0)

  • Tal vez esta solución funcione para su respuesta en stackoverflow

    – Pitido Vishal

    3 de noviembre de 2021 a las 10:45

  • También estoy enfrentando este problema con gradle build. Esto no es específico del emulador de Android.

    – Espacio en blanco

    3 de noviembre de 2021 a las 13:06


Lo más probable es que una de sus dependencias utilice el kotlin versión de la viewmodel biblioteca mientras que su código utiliza el java versión.

especificar ambos para hacer cumplir la última versión para todas las dependencias:

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

  • Gracias, no estaba usando viewmodel-ktx pero parece que viewmodel-savedstate lo requería. Entonces, después de agregar viewmodel-ktx:$lifecycle_version resolvió el problema.

    – Espacio en blanco

    4 de noviembre de 2021 a las 10:43

  • Buena, esto se marcará como respuesta correcta. También tengo un módulo Java que usa lifecycle-viewmodel 2.4.0 y lifecycle-livedata 2.4.0, y el jetifier genera resistencia 2.3.1 y genera conflicto. Incluso si no estoy usando ktx en el módulo java después de agregar la dependencia lifecycle-viewmodel-ktx:2.4.0, mi error desapareció.

    –Yingding Wang

    7 de noviembre de 2021 a las 12:34


  • ¿Dónde pongo esto en mi proyecto? Build.gradle?

    – Jackie

    15 de agosto a las 15:47

  • @Jackie Sí, la aplicación es build.gradle en el dependencies sección.

    – l33t

    16 ago a las 10:56

Tuve el mismo problema y lo resolví agregando solo una línea de código

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

  • Gracias. Esto funcionó hoy. No tengo idea de qué biblioteca usa clases. Agregué lo siguiente para resolver el problema: implementación ‘androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0’

    – Hong

    1 de julio a las 22:21

  • No entiendo por qué la gente vota a favor de esta respuesta imitadora. Para empezar, esta solución es incorrecta y se interrumpirá cuando se actualice la biblioteca de terceros. debes especificar ambas cosas las versiones de kotlin y java. De esa manera, usted tiene el control de cuál lifecycle-viewmodel versión de la biblioteca a utilizar.

    – l33t

    15 de agosto a las 12:11

  • Esto funciona para mí, así que no me importa si es una respuesta de imitación o no, la he votado a favor. Me salvó horas después de probar tantas estrategias de resolución de dependencias

    – Rafsanyani

    20 de agosto a las 11:40


Avatar de usuario de Alex Rmcf
Alex Rmc

Pensé que eliminar las clases duplicadas es mejor que agregar otras nuevas, así que publicaré mi solución a este problema aquí:

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

Estas líneas de código deben agregarse al archivo de nivel de proyecto build.gradle, y el error de compilación desaparecerá junto con la memoria desperdiciada (un poco, pero aún así).

Comportamiento extraño e incomprensible. Lo obtuve después de agregar la biblioteca Kotlin al proyecto, que luego se decidió reemplazar con una versión para Java. Si va a la carpeta .gradle, puede encontrarlo allí, pero no estoy seguro de si es una buena idea eliminarlo de allí, porque puede usarse en otras librerías. Es extraño que gradle o AndroidStudio no resuelvan automáticamente este problema, porque solo se especifican las dependencias para Java en el archivo build.gradle.

  • ¿A qué “recuerdo” te refieres? ¿La PC o el dispositivo Android? Por lo que pude ver, no hay una hinchazón adicional en el APK resultante (podría ser el resultado de R8).

    – l33t

    29 de diciembre de 2021 a las 13:44

  • Estoy hablando de apk resultante

    – Alex Rmc

    29 de diciembre de 2021 a las 18:42

  • @l33t exactamente: 12 870 436 bytes frente a 13 102 070 bytes. Como ya dije, un poco, pero aún

    – Alex Rmc

    29 de diciembre de 2021 a las 18:47


  • Hice algunas pruebas. Con todas las optimizaciones (por ejemplo, Release + minify usando R8), eliminando lifecycle-viewmodel-ktx reduce el tamaño con menos de 1 KB. Más probable R8 es capaz de deshacerse del 99% de la hinchazón, dejando una o dos clases extra (classes.dex difiere). Su solución parece funcionar, pero ¿por qué el minificador no elimina esas últimas clases? Podría ser un fallo menor en R8 o tal vez exista una dependencia real de terceros que, en algún momento, necesite estas clases de kotlin. Sus números indican algún otro problema.

    – l33t

    6 de enero a las 12:27


  • @ l33t No lo expliqué correctamente. Para obtener los números que se mencionaron, excluí varias bibliotecas que usé explícitamente, pero que también estaban presentes como dependencias en otras bibliotecas (pero, por ejemplo, con versiones inferiores). excluir grupo: ‘org.json’, módulo: ‘json’ excluir grupo: ‘androidx.lifecycle’, módulo: ‘lifecycle-viewmodel-ktx’ excluir grupo: ‘androidx.lifecycle’, módulo: ‘lifecycle-viewmodel:2.3. 1’ excluir grupo: ‘org.apache.commons’, módulo: ‘commons-lang3’ y otros

    – Alex Rmc

    6 ene a las 16:10


Cambiar la versión de viewmodel y viewmodel-ktx a su última versión resolvió el problema para mí:

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

Me ayudó a revertir appcompat de 1.5.0 a 1.4.2 como se sugiere en este hilo: Clase duplicada androidx.lifecycle.ViewModelLazy encontrada en módulos lifecycle-viewmodel-2.5.0-runtime

  • No estoy usando explícitamente ninguna de esas bibliotecas y esta es la única solución que me ayudó. los configurations.all.exclude no funcionó para mí. ¡Gracias!

    – KaHa6uc

    hace 2 días


  • O actualice appcompat a 1.6.0-rc1 (o superior), en 1.5.1 no se solucionó para mí, aunque las notas de la versión lo indiquen.

    – hb0

    hace 7 horas

avatar de usuario de androidXP
AndroidXP

Actualicé ‘com.google.android.material:material:1.7.0-alpha03’ y empiezo a recibir este error. Luego, como @kirill sugiere que agregue el último modelo de vista ktx incluso cuando nuestro código está totalmente en Java, comienza a funcionar nuevamente.

  • No estoy usando explícitamente ninguna de esas bibliotecas y esta es la única solución que me ayudó. los configurations.all.exclude no funcionó para mí. ¡Gracias!

    – KaHa6uc

    hace 2 días


  • O actualice appcompat a 1.6.0-rc1 (o superior), en 1.5.1 no se solucionó para mí, aunque las notas de la versión lo indiquen.

    – hb0

    hace 7 horas

Avatar de usuario de Linh
Linh

Después de crear una nueva actividad Redactar vacía, recibí este error.
Actualice todas las dependencias a la última versión resuelva el error con Duplicate class androidx.lifecycle.ViewModelLazy ...

¿Ha sido útil esta solución?