Confirma la optimización de los Perfiles de inicio

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:

  1. Compila el AAB de tu app:

    ./gradlew app:bundleRelease
    
  2. Verifica que haya al menos un archivo DEX que contenga el texto "startup": true.

    1. 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.

    2. 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.

  3. 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.