Start-up-Profile erstellen

Start-up-Profile sind eine Teilmenge der Baseline-Profile. Startprofile werden vom Build-System verwendet, um die darin enthaltenen Klassen und Methoden weiter zu optimieren, indem das Layout des Codes in den DEX-Dateien Ihres APK verbessert wird. Mit Start-up-Profilen ist Ihr App-Start-up mindestens 15% schneller als mit Baseline-Profilen allein.

Abbildung 1: Verbesserte Codelokalität durch DEX-Layoutoptimierung.

Voraussetzungen

Wir empfehlen, Start-up-Profile mit den folgenden Tools zu verwenden:

  • Jetpack MacroBenchmark 1.2.0 oder höher
  • Android Gradle-Plug-in 8.2 oder höher
  • Android Studio Iguana oder höher

Außerdem benötigen Sie in Ihrer App die folgenden Einstellungen:

  • R8 aktiviert ist. Legen Sie für Ihren Release-Build isMinifyEnabled = true fest.
  • DEX-Layoutoptimierungen aktiviert. Legen Sie im Block baselineProfile {} der Build-Datei des Anwendungsmoduls dexLayoutOptimization = true fest.

Start-up-Profil erstellen

Android Studio erstellt neben einem Baseline-Profil ein Startprofil, wenn Sie die Standardvorlage für den Baseline Profile Generator verwenden.

Die allgemeinen Schritte zum Erstellen und Generieren eines Startprofils sind dieselben wie beim Erstellen eines Baseline-Profils.

Die Standardmethode zum Erstellen eines Startprofils ist die Verwendung der Modulvorlage des Baseline Profile Generators in Android Studio. Dazu gehören Startinteraktionen, die ein grundlegendes Startprofil bilden. Wenn Sie dieses Startprofil um kritische User Journeys (CUJs) ergänzen möchten, fügen Sie Ihre Start-CUJs in einen rule-Block ein, wobei includeInStartupProfile auf true festgelegt ist. Für einfache Anwendungen kann es ausreichend sein, die MainActivity der Anwendung zu starten. Bei komplexeren Apps können Sie die häufigsten Einstiegspunkte in Ihre App einbinden, z. B. indem Sie die App vom Startbildschirm aus starten oder über einen Deeplink öffnen.

Das folgende Code-Snippet zeigt einen Baseline-Profilgenerator (standardmäßig die Datei BaselineProfileGenerator.kt), mit dem Ihre App vom Startbildschirm aus gestartet und über einen Deeplink gestartet wird. Der Deeplink führt direkt zum Nachrichtenfeed der App, nicht zum Startbildschirm der App.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

Führen Sie die Konfiguration Baseline-Profil für die Anwendung generieren aus und suchen Sie die Startprofilregeln unter src/<variant>/generated/baselineProfiles/startup-prof.txt.

Optimierung der Startprofile bestätigen

Öffnen Sie zum Bestätigen der DEX-Layoutoptimierung Android Studio, um das APK zu öffnen und die Klassen in den DEX-Dateien zu prüfen. Achte darauf, dass die primäre classes.dex nicht vollständig ausgefüllt ist. Wenn Ihre Anwendung aus einer einzigen DEX-Datei besteht, können Sie nach der Aktivierung des Startprofils prüfen, ob die Anwendung zwei DEX-Dateien enthält.

Android Studio warnt Sie, wenn die Startklassen nicht in eine einzelne DEX-Datei passen. Damit Sie Diagnoseinformationen erhalten, die die Anzahl der Nicht-Startmethoden in den Startklassen enthalten, muss der R8-Compiler auf mindestens Version 8.3.36-dev aktualisiert werden. Nehmen Sie dazu die folgenden Änderungen in der Datei settings.gradle vor, wenn Sie das Startprofil anwenden:

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

Groovig

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 in den folgenden Befehl einfügen, wenn Sie Builds mit Gradle erstellen.

./gradlew assembleRelease --info

Die Diagnose wird dann auf dem Terminal ausgegeben.

Verweisen Ihre App oder Bibliotheken auf gewünschte APIs, sind die gebündelten Kompatibilitätsimplementierungen dieser Klassen immer in der letzten DEX-Datei enthalten. Diese letzte DEX-Datei nimmt nicht an der DEX-Layoutoptimierung teil.