Start-up-Profile erstellen

Startup-Profile sind eine Teilmenge von Baseline-Profilen. Startup-Profile 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 APKs 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 die Verwendung von Startprofilen mit den folgenden Tools:

  • 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 den Release-Build isMinifyEnabled = true fest.
  • DEX-Layoutoptimierungen aktiviert. Legen Sie im baselineProfile {}-Block der Build-Datei des App-Moduls dexLayoutOptimization = true fest.

Startup-Profil erstellen

Wenn Sie die Standardvorlage für den Baseline Profile Generator verwenden, erstellt Android Studio neben einem Baseline Profile auch ein Startup Profile.

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

Ein Startprofil wird standardmäßig mit der Modulvorlage „Baseline Profile Generator“ in Android Studio erstellt. Dazu gehören auch Interaktionen, die ein grundlegendes Startup-Profil bilden. Wenn Sie dieses Startup-Profil mit weiteren kritischen Nutzerverhaltensschemata (Critical User Journeys, CUJs) erweitern möchten, fügen Sie die Startup-CUJs Ihrer App in einen rule-Block ein, wobei includeInStartupProfile auf true festgelegt 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 Aufrufen eines Deeplinks.

Das folgende Code-Snippet zeigt einen Generator für Baseline-Profile (standardmäßig die Datei BaselineProfileGenerator.kt), der das Starten Ihrer App über den Startbildschirm und das Aufrufen über einen Deeplink umfasst. Der Deeplink führt direkt zum Newsfeed 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 Generate Baseline Profile for app configuration aus und suchen Sie die Startup-Profilregeln unter src/<variant>/generated/baselineProfiles/startup-prof.txt.

Hinweise zum Erstellen von Startup-Profilen

Um zu entscheiden, welche User Journeys Sie beim Erstellen eines Startup-Profils abdecken sollten, sollten Sie überlegen, wo die meisten Nutzer die Anwendung starten. Normalerweise geschieht das über den Launcher und nachdem sich der Nutzer angemeldet hat. Das ist auch der einfachste Baseline-Profilpfad.

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

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

Arbeiten Sie diese Liste von oben nach unten ab und stoppen Sie, bevor „classes.dex“ voll ist. Wenn Sie später weitere Abläufe abdecken möchten, verschieben Sie Code aus dem Startpfad und fügen Sie weitere Abläufe hinzu. Wenn Sie Code aus dem Startpfad entfernen möchten, untersuchen Sie Perfetto-Traces während des App-Starts und suchen Sie nach lang andauernden Vorgängen. Sie können auch einen Makrobenchmark mit aktiviertem Methoden-Tracing verwenden, um eine automatisierbare und vollständige Ansicht der Methodenaufrufe beim Starten der App zu erhalten.