Confirmar a otimização dos perfis de inicialização

É possível verificar se os perfis de inicialização estão funcionando usando o Android Studio ou conferindo os metadados do build do R8.

Confirmar com o Android Studio

Para confirmar a otimização de layout DEX, use o Android Studio para abrir o APK e verificar as classes nos arquivos DEX. Verifique se o classes.dex principal não está completamente preenchido. Se o app consistir em um único arquivo DEX, você poderá verificar se ele contém dois arquivos DEX depois de ativar o perfil de inicialização.

O Android Studio vai avisar se as classes de inicialização não couberem em um único arquivo DEX. Para receber informações de diagnóstico que incluem a quantidade de métodos não de inicialização nas classes de inicialização, verifique se o compilador R8 está atualizado para pelo menos a versão 8.3.36-dev fazendo as seguintes alterações no arquivo settings.gradle ao aplicar o perfil de inicialização:

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"
        }
    }
}

Adicione --info após assembleRelease no comando abaixo ao criar com o Gradle.

./gradlew assembleRelease --info

O diagnóstico é impresso no terminal.

Se o app ou qualquer biblioteca faz referência a APIs simplificadas, as implementações de compatibilidade do pacote dessas classes são sempre contidas no último arquivo DEX. Esse último arquivo DEX simplificado não participa das otimizações de layout do DEX.

Confirmar com metadados do pacote

A partir do AGP 8.8, o R8 vai gerar metadados no Android App Bundle (AAB) que podem ser usados para verificar se a otimização de layout DEX foi bem-sucedida. Para verificar se a otimização funcionou, faça o seguinte:

  1. Crie o AAB do seu app:

    ./gradlew app:bundleRelease
    
  2. Verifique se há pelo menos um arquivo DEX que contenha o texto "startup": true.

    1. Abra os metadados:

      unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
      

      O caminho para o AAB pode ser algo como app/build/outputs/bundle/release/app-release.aab.

    2. Confira a saída, que deve ser semelhante a esta:

          inflating: r8.json
      [
        {
          "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951",
          "startup": true
        }
      ]
      

    Se você só encontrar "startup": false nos metadados, será necessário ativar os perfis de inicialização e garantir que o perfil de inicialização não esteja ofuscado.

  3. Verifique se os valores SHA-256 dos metadados correspondem aos do AAB. Para extrair os valores SHA-256 de todos os arquivos DEX, execute o seguinte:

    unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
    

    O resultado será semelhante a este:

    Archive: app/build/outputs/bundle/release/myapp-release.aab
      inflating: base/dex/classes.dex
    f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951  base/dex/classes.dex
    

    Compare os valores de hash com os valores de "checksum" da etapa 1. Se os valores SHA-256 não corresponderem, talvez haja uma etapa de compilação interferindo na capacidade do R8 de gerar arquivos DEX.