Sie können prüfen, ob Ihre Startprofile funktionieren, indem Sie entweder Android Studio verwenden oder sich die R8-Build-Metadaten ansehen.
Mit Android Studio bestätigen
Öffnen Sie die APK-Datei in Android Studio und prüfen Sie die Klassen in den DEX-Dateien, um die DEX-Layoutoptimierung zu bestätigen. Achten Sie darauf, dass die primäre classes.dex
nicht vollständig ausgefüllt ist. Wenn Ihre App aus einer einzelnen DEX-Datei besteht, können Sie nach dem Aktivieren des Startprofils prüfen, ob die App zwei DEX-Dateien enthält.
Android Studio warnt Sie, wenn die Startklassen nicht in eine einzelne DEX-Datei passen.
Wenn Sie Diagnoseinformationen mit der Anzahl der nicht zu Startmethoden gehörenden Methoden in den Startklassen erhalten möchten, müssen Sie den R8-Compiler auf mindestens Version 8.3.36-dev aktualisieren. Nehmen Sie dazu beim Anwenden des Startprofils die folgenden Änderungen an der Datei settings.gradle
vor:
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" } } }
Achten Sie beim Erstellen mit Gradle darauf, nach assembleRelease
im folgenden Befehl --info
hinzuzufügen.
./gradlew assembleRelease --info
Die Diagnose wird dann im Terminal ausgegeben.
Wenn Ihre App oder Bibliotheken auf entzugerte APIs verweisen, sind die gebündelten Kompatibilitätsimplementierungen dieser Klassen immer in der letzten DEX-Datei enthalten. Diese desugarierte letzte DEX-Datei nimmt nicht an DEX-Layoutoptimierungen teil.
Mit Bundle-Metadaten bestätigen
Ab AGP 8.8 gibt R8 Metadaten in Ihrem Android App Bundle (AAB) aus, mit denen Sie prüfen können, ob die DEX-Layoutoptimierung erfolgreich war. So prüfen Sie, ob die Optimierung funktioniert hat:
So erstellen Sie die AAB Ihrer App:
./gradlew app:bundleRelease
Prüfen Sie, ob mindestens eine DEX-Datei den Text
"startup": true
enthält.Öffne die Metadaten:
unzip -j -o path-to-aab BUNDLE-METADATA/com.android.tools/r8.json && jq .dexFiles r8.json
Der Pfad zu Ihrer AAB könnte etwa so aussehen:
app/build/outputs/bundle/release/app-release.aab
.Sehen Sie sich die Ausgabe an, die in etwa so aussehen sollte:
inflating: r8.json [ { "checksum": "f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951", "startup": true } ]
Wenn in den Metadaten nur
"startup": false
angezeigt wird, müssen Sie Startprofile aktivieren und dafür sorgen, dass Ihr Startprofil nicht verschleiert ist.Prüfen Sie, ob die SHA-256-Werte aus den Metadaten mit denen aus der AAB übereinstimmen. Führen Sie Folgendes aus, um die SHA-256-Werte für alle DEX-Dateien zu erhalten:
unzip -o path-to-aab */dex/*.dex && sha256sum */dex/*
Die Ausgabe sollte in etwa so aussehen:
Archive: app/build/outputs/bundle/release/myapp-release.aab inflating: base/dex/classes.dex f0b4b0ddb295812607f44efe03cf7a830056ccfddbdb81db3760d2281940e951 base/dex/classes.dex
Vergleichen Sie die Hashwerte mit den „checksum“-Werten aus Schritt 1. Wenn die SHA-256-Werte nicht übereinstimmen, kann es sein, dass ein Kompilierungsschritt die Fähigkeit von R8 beeinträchtigt, DEX-Dateien auszugeben.