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

Para verificar se os perfis de inicialização estão funcionando, use o Android Studio ou consulte os metadados de 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á totalmente preenchido. Se o app consistir em um único arquivo DEX, verifique 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 relacionados à inicialização nas classes de inicialização, verifique se o compilador R8 está atualizado para pelo menos a versão 8.3.21 fazendo as seguintes mudanças 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.21")
        }
    }
}

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 depois de assembleRelease no comando a seguir ao criar com o Gradle.

./gradlew assembleRelease --info

Em seguida, o diagnóstico é impresso no terminal.

Se o app ou alguma biblioteca fizer referência a APIs sem açúcar, as implementações de compatibilidade agrupadas dessas classes sempre estarão contidas no último arquivo DEX. Esse último arquivo DEX dessintetizado não participa das otimizações de layout DEX.

Confirmar com metadados do pacote

A partir do AGP 8.8, o R8 gera 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 seu AAB pode ser algo como app/build/outputs/bundle/release/app-release.aab.

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

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

    Se você só vir "startup": false nos metadados, ative os perfis de inicialização e verifique se o perfil não está ofuscado.

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

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

    A resposta será semelhante a esta:

    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.