La optimización del código DEX es un hallazgo de Android vitals que te ayuda a supervisar y mejorar la calidad, el tamaño y el rendimiento de la compilación de tu app. Si optimizas y ofuscas tu código con R8 o herramientas alternativas (como optimizadores compatibles con ProGuard o posprocesadores DEX secundarios), se reduce el tamaño DEX de tu app, se mejora el rendimiento del tiempo de ejecución y se minimiza su huella de memoria.
Los archivos DEX (o Dalvik Executable) contienen el código compilado que se usa
para ejecutar tu app. Por lo general, esto incluye código Java y Kotlin, a diferencia del
código C++ compilado o los archivos .so.
Android vitals informa las métricas de optimización del código DEX para todas las apps y los juegos, pero solo aplica umbrales para las apps y los juegos que cumplen con requisitos de tamaño específicos.
Cómo detectar el problema
Android vitals puede alertarte cuando los niveles de optimización del código DEX de tu app son bajos. Esto incluye la ofuscación, la reducción y la optimización para apps y juegos que usan R8. En el caso de las apps que no usan R8, Android vitals intenta verificar las tasas de optimización, reducción y ofuscación, pero recurre a la heurística de ofuscación como proxy cuando es necesario.
Cómo supervisar el estado de optimización
Android vitals puede ayudarte a mejorar el rendimiento de tu app. Para ello, te envía alertas a través de Play Console cuando tu app no cumple con los porcentajes mínimos definidos para la optimización del código. Para obtener definiciones detalladas de reducción, optimización y ofuscación, consulta Cómo usar el Analizador de configuración de R8.
En el caso de las apps compiladas con el parche más reciente de la versión 8.10 o posterior de AGP, estos porcentajes se extraen del archivo r8.json incluido.
En el caso de las versiones anteriores de AGP o cuando no se incluye el archivo r8.json, los porcentajes se calculan a partir del archivo mapping.txt si se incluye o con la heurística DEX si el archivo de asignación no está disponible.
En el caso de las apps que se optimizan con un optimizador de código alternativo, Android vitals realiza un análisis para estimar el porcentaje de clases, métodos y campos que se ofuscan en el paquete de aplicación.
Mínimos de tamaño DEX total
Si bien Android vitals calcula las métricas de optimización del código para todas las apps, solo recibirás alertas si el paquete de aplicación de tu app cumple con los siguientes requisitos de tamaño DEX total:
- Apps: El paquete contiene al menos 10 MB de código DEX medido como tamaño sin comprimir.
- Juegos: El paquete contiene al menos 50 MB de código DEX medido como tamaño sin comprimir.
Android vitals muestra el tamaño DEX de tu app, pero también puedes medirlo de forma local con la línea de comandos:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
Cómo medir la optimización del código R8 de forma local
Si tu app se optimiza con R8, puedes medir la optimización, la ofuscación y la reducción del paquete de tu app con el Analizador de configuración de R8. El informe del Analizador de configuración de R8 también se incluye en la habilidad de análisis de R8. Si bien el informe puede ayudarte a comprender cómo afectan tus reglas de conservación a tus puntuaciones de optimización, reducción y ofuscación, los porcentajes del informe no coincidirán con los valores de Android vitals, ya que estos porcentajes se calculan antes de las optimizaciones.
Para inspeccionar los metadatos exactos que usa Android vitals para calcular tus puntuaciones, extrae el archivo r8.json del paquete de aplicación de tu app:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
Cómo corregir el problema
Para abordar las puntuaciones bajas de optimización del código DEX, revisa las recomendaciones según tu sistema de compilación y optimizador:
Complemento de Android para Gradle y R8
Para mejorar las puntuaciones de optimización del código DEX de R8, consulta la guía en Cómo mejorar la optimización de R8. También puedes usar la habilidad de análisis de R8 para obtener orientación adicional sobre la optimización de las reglas de conservación de tu app.
Sistemas de compilación que no son R8 y posprocesadores DEX
Si tu canalización de compilación usa herramientas de compilación personalizadas o posprocesadores DEX secundarios, sigue estos pasos para mejorar la optimización de tu app:
- Abre el paquete de aplicación de tu app en Android Studio y míralo en el Analizador de APK.
- Selecciona todos los los
.dexarchivos. - Presta mucha atención a los archivos con el tamaño más grande mientras activas el
"Desofuscar nombres" botón (nota: esto requiere que
subas un
mapping.txtarchivo). Si encuentras que algunos de esos archivos siguen siendo grandes mientras están ofuscados, es probable que se vean afectados por las reglas de conservación de todo el paquete. - Busca en tu archivo
proguard-rules.pro,configuration.txto el equivalente para tu optimizador si no usas R8, y busca reglas de conservación que coincidan con los paquetes que no se ofuscan. Por ejemplo, sicom.foo.es un paquete grande en tu DEX, busca reglas de conservación con el formato-keep com.foo.**o-keep com.foo.bar.**. - Ten en cuenta que las reglas de conservación del consumidor de la biblioteca podrían no ser tan sencillas de identificar. Si sospechas que una regla de consumidor de la biblioteca afecta la optimización, puedes validarla de forma local agregándola a una app de ejemplo independiente con una versión reciente de AGP y, luego, inspeccionarla con el Analizador de configuración de R8.