Start-up-Profile erstellen

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

Abbildung 1. Verbesserung der Code-Lokalität durch die Optimierung des DEX-Layouts.

Voraussetzungen

Wir empfehlen, Startprofile 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 die folgenden Einstellungen in Ihrer App:

  • R8 aktiviert Legen Sie für Ihren Release-Build fest isMinifyEnabled = true.
  • Optimierungen des DEX-Layouts aktiviert Legen Sie im Block baselineProfile {} der Build-Datei des App-Moduls dexLayoutOptimization = true fest.

Startprofil erstellen

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

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

Die Standardmethode zum Erstellen eines Startprofils ist die Verwendung der Modulvorlage für den Baseline-Profil Generator in Android Studio. Dazu gehören Start interaktionen, die ein einfaches Startprofil bilden. Wenn Sie dieses Startprofil um weitere kritische Nutzerpfade (Critical User Journeys, CUJs) erweitern möchten, fügen Sie die CUJs für den App-Start einem rule Block hinzu, wobei includeInStartupProfile auf true gesetzt ist. Bei einfachen Apps reicht es möglicherweise aus, die MainActivity der App zu starten. Bei komplexeren Apps sollten Sie die häufigsten Einstiegspunkte in Ihre App hinzufügen, z. B. das Starten der App über den Startbildschirm oder das Starten über einen Deeplink.

Das folgende Code-Snippet zeigt einen Baseline-Profil-Generator (standardmäßig die BaselineProfileGenerator.kt Datei), der das Starten über einen Deeplink umfasst. Der Deeplink führt direkt zum Newsfeed der App und 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
        ) {
            uiAutomator {
                // Launch directly into the NEWS_FEED using startActivityIntent
                startIntent(Intent().apply {
                    setPackage(packageName)
                    setAction("com.example.app.NEWS_FEED")
                })
            }
        }
    }
}

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

Überlegungen zum Erstellen von Startprofilen

Um zu entscheiden, welche Nutzerpfade beim Erstellen eines Startprofils berücksichtigt werden sollen, überlegen Sie, wo die meisten Nutzer die Anwendung starten. In der Regel geschieht das über den Launcher und nachdem sie sich angemeldet haben. Das ist auch der einfachste Baseline-Profil Pfad.

Nachdem der erste Anwendungsfall abgedeckt wurde, folgen Sie dem Nutzer-Funnel für den App Start. In vielen Fällen folgen App-Start-Funnel dieser Liste:

  1. Hauptaktivität des Launchers
  2. Benachrichtigungen, die den App-Start auslösen
  3. Optionale Launcher-Aktivitäten

Arbeiten Sie diese Liste von oben nach unten ab und halten Sie an, bevor die Datei „classes.dex“ voll ist. Wenn Sie später weitere Pfade abdecken möchten, verschieben Sie Code aus dem Startpfad und fügen Sie weitere Pfade hinzu. Um Code aus dem Startpfad zu verschieben, untersuchen Sie Perfetto-Traces während des App-Starts und suchen Sie nach Vorgängen, die lange dauern. Sie können auch einen Macrobenchmark mit aktivierter Methodenverfolgung verwenden, um eine automatisierbare und vollständige Ansicht der Methodenaufrufe während des App-Starts zu erhalten.