Vous pouvez vérifier que vos profils de démarrage fonctionnent à l'aide d'Android Studio ou en examinant les métadonnées de compilation R8.
Vérifier avec Android Studio
Pour confirmer l'optimisation de la mise en page DEX, utilisez Android Studio pour ouvrir l'APK et vérifier les classes dans les fichiers DEX. Assurez-vous que l'classes.dex
principale n'est pas complètement remplie. Si votre application se compose d'un seul fichier DEX, vous pouvez vérifier si elle contient deux fichiers DEX après avoir activé le profil de démarrage.
Android Studio vous avertit si les classes de démarrage ne rentrent pas dans un seul fichier DEX.
Pour obtenir des informations de diagnostic incluant le nombre de méthodes non de démarrage dans les classes de démarrage, assurez-vous que le compilateur R8 est mis à jour vers la version 8.3.36-dev ou une version ultérieure en apportant les modifications suivantes au fichier settings.gradle
lorsque vous appliquez le profil de démarrage:
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" } } }
Assurez-vous d'ajouter --info
après assembleRelease
dans la commande suivante lors de la compilation avec Gradle.
./gradlew assembleRelease --info
Le diagnostic est ensuite imprimé dans le terminal.
Si votre application ou des bibliothèques font référence à des API désucrées, les implémentations de compatibilité groupées de ces classes sont toujours contenues dans le dernier fichier DEX. Ce dernier fichier DEX désucré ne participe pas aux optimisations de mise en page DEX.
Vérifier avec les métadonnées du groupe
À partir de la version AGP 8.8, R8 génère des métadonnées dans votre Android App Bundle (AAB) que vous pouvez utiliser pour vérifier si l'optimisation de la mise en page DEX a réussi. Pour vérifier si l'optimisation a fonctionné, procédez comme suit:
Créez l'AAB de votre application:
./gradlew app:bundleRelease
Vérifiez qu'au moins un fichier DEX contient le texte
"startup": true
.Ouvrez les métadonnées:
unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
Le chemin d'accès à votre AAB peut ressembler à
app/build/outputs/bundle/release/app-release.aab
.Vérifiez le résultat, qui devrait ressembler à ceci:
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
Si vous ne voyez que
"startup": false
dans les métadonnées, vous devez activer les profils de démarrage et vous assurer que votre profil de démarrage n'est pas masqué.Vérifiez que les valeurs SHA-256 des métadonnées correspondent à celles de l'AAB. Pour obtenir les valeurs SHA-256 de tous vos fichiers DEX, exécutez la commande suivante:
unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
Le résultat devrait ressembler à ceci:
Archive: app/build/outputs/bundle/release/myapp-release.aab inflating: base/dex/classes.dex f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dex
Comparez les valeurs de hachage aux valeurs de "somme de contrôle" de l'étape 1. Si les valeurs SHA-256 ne correspondent pas, une étape de compilation peut interférer avec la capacité de R8 à générer des fichiers DEX.