Introducción: El "gemelo" en tu proyecto
\n\nImagina 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\nEn 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\nEl 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.
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.
Top 5 causas del error Duplicate class en Kotlin Android
\n\nHemos 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\n1. Conflicto de versiones de Kotlin stdlib
\n\nEste 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.
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\nGradle mostrará algo como:
\nDuplicate 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\nSolución: Usa una versión única de Kotlin para todo el proyecto. La mejor manera es definirla en el build.gradle.kts raíz:
// 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\nTambién puedes excluir explícitamente la dependencia:
\nimplementation("com.some.library:example:2.0.0") {\n exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib")\n}\n\n\n2. Duplicación de AndroidX y Support Library
\n\nUn 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).
Ejemplo de error:
\nDuplicate class android.support.v4.app.Fragment found in modules support-compat-28.0.0 and fragment-1.6.0\n\n\nSolución:
\n- \n
- Activa la bandera
android.useAndroidX=trueengradle.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