Puedes verificar que tus perfiles de inicio funcionen con Android Studio o con los metadatos de compilación de R8.
Confirma con Android Studio
Para confirmar la optimización del diseño DEX, usa Android Studio para abrir el APK y verificar las clases en los archivos DEX. Asegúrate de que el classes.dex
principal no esté completamente lleno. Si tu app consta de un solo archivo DEX, puedes verificar si contiene dos archivos DEX después de habilitar el perfil de inicio.
Android Studio te advierte si las clases de inicio no caben en un solo archivo DEX.
Para obtener información de diagnóstico que incluya la cantidad de métodos que no son de inicio en las clases de inicio, asegúrate de que el compilador de R8 esté actualizado al menos a la versión 8.3.36-dev. Para ello, realiza los siguientes cambios en el archivo settings.gradle
cuando apliques el perfil de inicio:
Kotlin
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
Groovy
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Asegúrate de agregar --info
después de assembleRelease
en el siguiente comando cuando compiles con Gradle.
./gradlew assembleRelease --info
Luego, el diagnóstico se imprime en la terminal.
Si tu app o alguna biblioteca hace referencia a APIs con expansión de sintaxis, las implementaciones de compatibilidad empaquetadas de estas clases siempre se incluyen en el último archivo DEX. Este último archivo DEX con expansión de sintaxis no participa en las optimizaciones del diseño DEX.
Confirma con los metadatos del paquete
A partir de AGP 8.8, R8 genera metadatos en tu Android App Bundle (AAB) que puedes usar para verificar si la optimización del diseño DEX se realizó correctamente. Para verificar si la optimización funcionó, haz lo siguiente:
Compila el AAB de tu app:
./gradlew app:bundleRelease
Verifica que haya al menos un archivo DEX que contenga el texto
"startup": true
.Abre los metadatos:
unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
La ruta de acceso a tu AAB podría ser similar a
app/build/outputs/bundle/release/app-release.aab
.Verifica el resultado, que debería ser similar a lo siguiente:
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
Si solo ves
"startup": false
en los metadatos, debes habilitar los perfiles de inicio y asegurarte de que tu perfil de inicio no esté ofuscado.Verifica que los valores SHA-256 de los metadatos coincidan con los del AAB. Para obtener los valores SHA-256 de todos tus archivos DEX, ejecuta lo siguiente:
unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
El resultado debería ser similar a este:
Archive: app/build/outputs/bundle/release/myapp-release.aab inflating: base/dex/classes.dex f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dex
Compara los valores de hash con los valores de “checksum” del paso 1. Si los valores de SHA-256 no coinciden, es posible que haya un paso de compilación que interfiera con la capacidad de R8 para generar archivos DEX.