Optimierung der Startprofile bestätigen

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

Um die DEX-Layoutoptimierung zu bestätigen, öffnen Sie die APK mit Android Studio und prüfen Sie die Klassen in den DEX-Dateien. Achte darauf, dass die primäre classes.dex nicht vollständig gefüllt ist. Wenn Ihre App aus einer einzelnen DEX-Datei besteht, können Sie prüfen, ob die App nach dem Aktivieren des Startprofils zwei DEX-Dateien enthält.

Android Studio warnt Sie, wenn die Startklassen nicht in eine einzelne DEX-Datei passen. Wenn Sie Diagnoseinformationen erhalten möchten, die die Anzahl der Methoden in den Startup-Klassen enthalten, die nicht zum Starten der App gehören, müssen Sie den R8-Compiler auf mindestens Version 8.3.21 aktualisieren. Nehmen Sie dazu die folgenden Änderungen an der Datei settings.gradle vor, wenn Sie das Startup-Profil anwenden:

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

Achten Sie darauf, dass Sie --info nach assembleRelease im folgenden Befehl hinzufügen, wenn Sie mit Gradle erstellen.

./gradlew assembleRelease --info

Die Diagnose wird dann im Terminal ausgegeben.

Wenn Ihre App oder Bibliotheken auf desugared APIs verweisen, sind die gebündelten Kompatibilitätsimplementierungen dieser Klassen immer in der letzten DEX-Datei enthalten. Diese entzuckerte letzte DEX-Datei wird nicht für die Optimierung des DEX-Layouts berücksichtigt.

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:

  1. AAB für Ihre App erstellen:

    ./gradlew app:bundleRelease
    
  2. Prüfen Sie, ob es mindestens eine DEX-Datei gibt, die den Text "startup": true enthält.

    1. Metadaten öffnen:

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

      Der Pfad zu Ihrem AAB könnte beispielsweise so aussehen: app/build/outputs/bundle/release/app-release.aab.

    2. Prüfen Sie die Ausgabe, 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 Start-up-Profile aktivieren und darauf achten, dass Ihr Start-up-Profil nicht verschleiert ist.

  3. Prüfen Sie, ob die SHA‑256-Werte aus den Metadaten mit denen aus dem AAB übereinstimmen. So erhalten Sie die SHA‑256-Werte für alle Ihre DEX-Dateien:

    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 Prüfsummenwerten 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.