¿Qué es Android MultiDex?

111

Hay muchas publicaciones sobre MultiDex. He experimentado, a veces, errores resueltos incluso multiDexEnabled trueen la defaultConfigsección de mi build.gradle.

Pero, ¿qué es exactamente esta característica? ¿Cuáles son los escenarios para usarlo?

Roberto Tellez Ibarra
fuente

Respuestas:

166

Citando la documentación :

Los archivos de aplicaciones de Android (APK) contienen archivos de código de bytes ejecutables en forma de archivos Dalvik Executable (DEX), que contienen el código compilado que se utiliza para ejecutar su aplicación. La especificación Dalvik Executable limita la cantidad total de métodos a los que se puede hacer referencia dentro de un solo archivo DEX a 65,536, incluidos los métodos del marco de trabajo de Android, los métodos de biblioteca y los métodos en su propio código. Superar este límite requiere que configure el proceso de compilación de su aplicación para generar más de un archivo DEX, conocido como configuración multidex.

Entonces, la característica es: permite que su aplicación compleja se compile. Los escenarios para usarlo son cuando su aplicación no puede compilarse debido a que alcanza el límite de referencia del método DEX de 64K. Esto aparece como un error de compilación, como:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
CommonsWare
fuente
2
¿Alguna idea de qué tan grande sería la base de código (LOC, o número aproximado de pantallas)? ¿Vas a alcanzar este límite en una aplicación simple de 5-6 pantallas o es realmente mucho más adelante (es decir, 10-20 pantallas) que probablemente lo alcanzarías
Marchy
20
@Marchy: Por lo general, proviene de agregar demasiadas bibliotecas. Es difícil para un proyecto sin biblioteca alcanzar este límite.
CommonsWare
3
Tengo una pequeña aplicación que usa alrededor de 5 bibliotecas de soporte de Google, así como Fabric.io y 2 o 3 bibliotecas de terceros y tengo que usar multi-dex.
c.dunlap
1
¿Existe alguna desventaja de habilitar multidex? ¿Por qué no dejarlo cierto por defecto?
Rafael Lima
1
@RafaelLima: Hay problemas de seguridad con el cuasi-backport de multidex para dispositivos anteriores a Android 5.0. IIRC, también puede causar algunos problemas con su aplicación, si está intentando usar clases que están en un archivo DEX aún no cargado.
CommonsWare
43

Es tan simple como esto

Un solo archivo .dex puede tener 65,536 métodos (referencias), por lo que si el número de referencias supera las 65,536, opte por multidex.

¡Más explicación!

Un programa de aplicación de Android se compila en un archivo .dex que a su vez se comprime en un solo archivo .apk.
DVM (Dalvik Virtual Machine) utiliza archivos .dex para ejecutar códigos de bytes.

¿Qué hace que el número de referencias supere los 65.536 límites?
Métodos escritos por usted + métodos de Android Framework + métodos de biblioteca de terceros (por ejemplo, Volley, Retrofit, Facebook SDK, etc.).
He leído "en algún lugar"
App Compat 24.2.1 contiene 16.5k métodos
Google Play Services GCM 9.6.1 contiene 16.7k métodos
Entonces, si ha creado una aplicación simple de Hello World que tiene App Compat 24.2.1, ya tiene 1/4 forma de cruzar el límite de los métodos de dex único

Rohit Singh
fuente
7

¿Qué es MultiDex en Android?

Dex son las siglas de Dalvik Executable, que es lo que utiliza el procesador de máquina virtual de Google (Dalvik) para manejar aplicaciones de Android. Android se creó con aplicaciones pequeñas y simples en mente y las limitaciones de un solo ejecutable de Dalvik situaron el techo de las referencias de código en 65.536 métodos. Debido a este problema y a la forma en que la máquina Dalvik maneja la ejecución del código, hubo algunos problemas de compilación e invocación, hasta la integración de Monkey Patch o MultiDex . La integración de MultiDex en Android Studio permite a los desarrolladores de Android la capacidad de compilar y ejecutar una base de código con más de 65.536 métodos.

Farhana
fuente
1

Accroding sitio oficial del desarrollador de Android.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.
Masum
fuente
1
Gracias por la respuesta. Esta es una pregunta del año 2015, muchas cosas cambiaron desde entonces.
Roberto Tellez Ibarra
-2

Lo que también permite es que Google (y otros) aplique DRM, digamos .. widevine, en fragmentos de código donde causa problemas a la mayoría de los no desarrolladores ..

anony
fuente