Recursos ordenados en orden descendente según su tamañoEn este ejemplo, al examinar un APK en busca de posibles reducciones de tamaño, pude notar inmediatamente que una animación PNG de 3 fotogramas es lo más grande de nuestros recursos dibujables, con un peso de 1.5MB, y eso es sólo para la densidad xxhdpi!
Como estas imágenes parecen candidatas perfectas para ser almacenadas como vectores, encontramos los archivos de origen de las ilustraciones y los importamos como VectorDrawables utilizando el nuevo soporte PSD en la herramienta de importación de Activos Vectoriales en Android Studio 2.2.
Al pasar por el mismo proceso para la otra animación restante (instruction_touch_*.png) y eliminando estos archivos PNG en todas las densidades, pudimos ahorrar más de 5MB. Para mantener la compatibilidad con versiones anteriores utilizamos VectorDrawableCompat de la biblioteca de soporte.
Mirando otras carpetas de recursos, fue fácil detectar algunos archivos WAV sin comprimir que se podían convertir a OGG, lo que supuso un ahorro aún mayor sin tocar una línea de código.
Lo siguiente en la lista de cosas a comprobar era la carpeta lib/, que contiene bibliotecas nativas para las tres ABIs que soportamos.
Se tomó la decisión de utilizar el soporte de APK splits en nuestro build de Gradle para crear versiones separadas de la app para cada ABI.
Rápidamente revisé el AndroidManifest.xml a continuación y me di cuenta de que a <application> le falta el atributo android:extractNativeLibs. Poner este atributo en false puede ahorrar algo de espacio en el dispositivo ya que evita copiar las librerías nativas del APK al sistema de archivos. El único requisito es que los archivos estén alineados con la página y se almacenen sin comprimir dentro del APK, lo cual es compatible con el nuevo empaquetador en el plugin de Android Gradle versión 2.2.0+.