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 de DEX secundarios), se reduce el tamaño del 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.
Los informes de Android vitals registran las métricas de optimización del código DEX para todas las apps y juegos, pero solo aplican 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 las apps y los 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.
Supervisa el estado de la 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 definidos mínimos para la optimización del código. Para obtener definiciones detalladas de reducción, optimización y ofuscación, consulta Usa 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 del AGP, estos porcentajes se extraen del archivo r8.json incluido.
En versiones anteriores del AGP o en los casos en que no se incluye el archivo r8.json, los porcentajes se calculan a partir del archivo mapping.txt, si se incluye, o bien con la heurística de DEX si el archivo de asignación no está disponible.
En el caso de las apps optimizadas 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 la app.
Mínimos de tamaño total del DEX
Si bien Android vitals calcula las métricas de optimización del código para todas las apps, solo recibirás alertas si tu paquete de aplicación cumple con los siguientes requisitos de tamaño total del archivo DEX:
- 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 del 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 de código de R8 de forma local
Si tu app se optimiza con R8, puedes medir su optimización, ofuscación y reducción 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 las reglas de conservación afectan 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 de tu paquete de aplicación:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
Cómo corregir el problema
Para abordar los bajos niveles 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 tus niveles de optimización del código DEX de R8, consulta la guía en Mejora la optimización de R8. También puedes usar la habilidad de R8 Analyzer para obtener orientación adicional sobre cómo optimizar las reglas de conservación de tu app.
Sistemas de compilación que no son de R8 y posprocesadores de DEX
Si tu canalización de compilación usa herramientas de compilación personalizadas o posprocesadores de DEX secundarios, sigue estos pasos para mejorar la optimización de tu app:
- Abre tu paquete de aplicación en Android Studio y míralo en el Analizador de APK.
- Selecciona todos los archivos
.dex. - Presta mucha atención a los archivos con el tamaño más grande mientras activas el botón "Desofuscar nombres" (nota: Esto requiere que subas un archivo
mapping.txt). Si ves que algunos de esos archivos siguen siendo grandes después de la ofuscación, es probable que se vean afectados por reglas de conservación a nivel del 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 archivo 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 pueden no ser tan sencillas de identificar. Si sospechas que una regla de consumidor de 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.