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

Ö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:

  1. So erstellen Sie die AAB Ihrer App:

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

    1. Ö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.

    2. 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.

  3. 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.