A finales de septiembre os hablábamos del problema de tener más de 64k métodos en el código de nuestra aplicación, un problema que veíamos muy lejos pero que conforme usábamos librerías externas empezaba a estar mucho más cerca de lo que pensábamos. De hecho, se planteaban posibles soluciones que nos llevaban a preguntarnos si estábamos cerca de la solución.

Nueva librería para soporte multidex

Pues la solución ha llegado, en forma de nueva librería de soporte multidex, así como nueva información sobre las mejores formas de proceder a la hora de utilizarla y la forma para resolver el problema del límite de métodos para ficheros DEX para aplicaciones Android.

El error: no más de 65536 métodos

El problema de este límite venía de que un fichero DEX no puede tener un número de métodos mayor de 65536. Esto parecía algo absurdo en la mayoría de los casos, pero hay que tener en cuenta que los métodos de las librerías que utilicemos, tal como hemos comentado, también cuentan, por lo que ese límite no estaba tan lejos como pensábamos.

Este era el error que podíamos encontrarnos en versiones antiguas de Android:

Y en las más recientes:

La solución

Hasta Android 5.0 Lollipop, el uso de Dalvik utilizaba por defecto un único fichero .dex por APK, pero para solucionar este problema podemos utilizar la librería de soporte multidex, lo que nos permite utilizar varios de estos ficheros al mismo tiempo. Con Android 5.0, la máquina utilizada por defecto será ART que ya de por sí lleva la gestión de varios ficheros .dex.

A partir de ahí, siempre tenemos que tener un buen hábito a la hora de programar y de partida intentar reducir el número de referencias en nuestro código, ya sea con una revisión directa de la app para eliminar dependencias y código innecesarios, así como el uso de ProGuard para eliminar código que en realidad no está siendo utilizado.

A partir de ahí, podemos configurar nuestra aplicación para utilizar varios ficheros .dex al mismo tiempo. Para ello, en nuestro proyecto Gradle necesitaremos modificar la configuración de compilación en primer lugar, para indicar que queremos utilizar esta opción.

Una vez hecho esto, basta modificar el fichero Manifest para indicarle que queremos utilizar la clase MultiDexApplication.

Con esta configuración, al compilar se generará un fichero de primario y tantos de soporte como sean necesarios, incluyéndolos todos en el mismo APK para su distribución.

Ahora bien, esta librería presenta ciertas limitaciones que debemos tener en cuenta, especialmente que pueden provocar errores ANR (tan odiados), por lo que os recomendamos echar un vistazo a la librería en sí misma y las limitaciones y errores que por ahora están identificados.

Más información +Android Developers | Documentación oficial