Clase duplicada en Kotlin Android: Top 5 errores y soluciones

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: El "gemelo" en tu proyecto

\n\n

Imagina la situación: estás escribiendo código en Kotlin para Android, todo funciona perfectamente. Agregas una nueva biblioteca, ejecutas la compilación y Gradle muestra un error en rojo: "Duplicate class". ¿Te suena familiar? Si alguna vez has trabajado con desarrollo Android, seguro has visto este mensaje. En Stack Overflow, esta pregunta ha acumulado miles de visitas, y con razón: el error puede frustrar incluso a un desarrollador experimentado.

\n\n

En este artículo, analizaremos qué es Duplicate class en Kotlin Android, por qué ocurre y, lo más importante, cómo solucionarlo de una vez por todas. Conocerás las 5 causas más comunes, obtendrás soluciones listas para usar y aprenderás a prevenir conflictos de dependencias. ¡Vamos allá!

\n\n

¿Qué es Duplicate class y por qué ocurre?

\n\n

El error Duplicate class ocurre cuando el sistema de compilación (Gradle) encuentra dos o más clases idénticas con el mismo nombre completo (FQN — Fully Qualified Name). En el mundo Android, esto generalmente significa que la misma clase está presente en diferentes bibliotecas o módulos de tu proyecto.

\n\n

Imagina que has pedido dos libros idénticos, pero de diferentes editoriales. Están en el mismo estante y el bibliotecario no sabe cuál tomar. Así funciona Gradle: no puede decidir cuál de las clases duplicadas usar.

\n\n

¿Por qué es especialmente relevante para Kotlin? Kotlin utiliza activamente la biblioteca estándar de Kotlin (kotlin-stdlib), que puede entrar en conflicto con sus propias versiones de otras fuentes. Agrega AndroidX, bibliotecas de Google, Firebase y obtendrás una mezcla explosiva.

\n\n

Top 5 causas del error Duplicate class en Kotlin Android

\n\n

Hemos recopilado los escenarios más comunes que encontrarás en el desarrollo real. Cada punto incluye un ejemplo de código y su solución.

\n\n

1. Conflicto de versiones de Kotlin stdlib

\n\n

Este es el rey de todos los duplicados. Cuando agregas una biblioteca que trae su propia versión de kotlin-stdlib y ya tienes otra en tu proyecto, se produce un conflicto.

\n\n

Ejemplo:

\n
// build.gradle.kts (módulo app)\ndependencies {\n    implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.0")\n    implementation("com.some.library:example:2.0.0") // esta biblioteca trae kotlin-stdlib:1.8.0\n}\n
\n\n

Gradle mostrará algo como:

\n
Duplicate class kotlin.collections.ArraysKt found in modules kotlin-stdlib-1.9.0 (org.jetbrains.kotlin:kotlin-stdlib:1.9.0) and kotlin-stdlib-1.8.0 (org.jetbrains.kotlin:kotlin-stdlib:1.8.0)\n
\n\n

Solución: Usa una versión única de Kotlin para todo el proyecto. La mejor manera es definirla en el build.gradle.kts raíz:

\n
// build.gradle.kts (raíz)\nplugins {\n    kotlin("android") version "1.9.0" apply false\n}\n\n// build.gradle.kts (módulo app)\nplugins {\n    kotlin("android")\n}\n
\n\n

También puedes excluir explícitamente la dependencia:

\n
implementation("com.some.library:example:2.0.0") {\n    exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")\n}\n
\n\n

2. Duplicación de AndroidX y Support Library

\n\n

Un clásico del género. Si usas bibliotecas antiguas de Support Library junto con AndroidX, contienen las mismas clases (por ejemplo, android.support.v4.app.Fragment y androidx.fragment.app.Fragment).

\n\n

Ejemplo de error:

\n
Duplicate class android.support.v4.app.Fragment found in modules support-compat-28.0.0 and fragment-1.6.0\n
\n\n

Solución:

\n
    \n
  • Activa la bandera android.useAndroidX=true en gradle.properties.
  • \n
  • Asegúrate de que todas las bibliotecas estén migradas a AndroidX. Usa la herramienta de migración en Android Studio (Refactor > Migrate to AndroidX).
  • \n
  • Si una biblioteca no soporta AndroidX, usa

Blogs

Book Recommendations