Solución a Error con el DexFile en Android Studio(Null, Cannot fit requested classes in a Single Dexfile)
¿Estabas programando normalmente y de pronto te ha salido alguno de estos mensajes?
Null, Cannot fit requested classes in a Single Dexfile(# methods: n > 65536)
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
Descuida, aquí encontrarás la razón y solución para que no te vuelva a pasar.
Problema:
Uno de los errores más comunes a la hora de trabajar en aplicaciones grandes o que llevan consigo múltiples librerías, es que nos damos cuenta que de pronto aparece un terrible error diciéndonos:
Null, Cannot fit requested classes in a Single Del file (# methods: n > 65536)
Sin más información por parte de Android Studio para localizar la linea que causó este error, puede ser un poco frustrante si es la primera vez que vemos este tipo de mensaje, pues de hecho, no hay una linea en nuestro código que hayamos escrito y que lo este causando.
La explicación del problema:
Por default los proyectos en android tienen un limite de métodos que pueden ser invocados dentro de un mismo archivo de código(Dalvik Executable (DEX)), este número es precisamente 65536, esto debido a que una APK que es compatible con versiones inferiores a android 5(API 21), trabaja con Dalvik, y ese ejecutable esta limitado a 65536 métodos, esto incluye el framework de android, dependencias y nuestro código escrito dentro de nuestro proyecto.
Técnicamente hablando, el término “kilo”, y su símbolo, “k”, hacen referencia a 1,024, por lo tanto, 64 x 1,024 es igual a 65536, exacto, nuestro número clave en este error. Este límite es denominado “límite de referencia de 64k”.
Solución:
Ahora que sabemos que ha causado que nuestro proyecto deje de compilar correctamente, vamos a proceder a solucionar este detalle, para ello, basta con indicarle explícitamente a gradle que nuestro proyecto puede rebasar este limite establecido por default.
Paso 1: Abre tu archivo de build.gradle(Module:app).
Paso 2: Ubícate dentro del bloque de código llamado defaultConfig.
Paso 3: Agrega la siguiente linea:
multiDexEnabled true
Paso 4: Ahora ve más abajo y encuentra las dependencias.
Paso 5: Agrega la siguiente linea:
implementation ‘androidx.multidex:multidex:2.0.1’
Paso 6: Sincroniza.
¡Listo! Ya debes poder seguir trabajando con tu proyecto.
Recursos de interes:
Vídeotutorial sobre cómo aplicar esta solución en un proyecto android:
Fuente de multidex, por si necesitas revisar cual es la versión más actualizada:
https://developer.android.com/jetpack/androidx/releases/multidex
Espero que te sirva y nos leemos muy pronto con más contenido.