Start-up-Profile erstellen

Start-Profile sind eine Teilmenge der Baseline-Profile. Start-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 zwischen 15% und 30% schneller als nur mit Baseline-Profilen.

Abbildung 1. Verbesserung der Codelokalität durch 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 Plugin 8.2 oder höher
  • Android Studio Iguana oder höher

Außerdem sind in Ihrer App die folgenden Einstellungen erforderlich:

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

Startprofil erstellen

Wenn Sie die Standardvorlage „Baseline Profile Generator“ verwenden, erstellt Android Studio neben einem Baseline-Profil auch ein Startprofil.

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

Standardmäßig wird ein Startprofil mit der Vorlage „Baseline Profile Generator“ in Android Studio erstellt. Dazu gehören auch Startinteraktionen, die ein grundlegendes Startprofil bilden. Wenn Sie dieses Startprofil um weitere kritische Nutzerpfade (Critical User Journeys, CUJs) ergänzen möchten, fügen Sie die CUJs für den App-Start einem rule-Block hinzu, für den 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 gängigsten Einstiegspunkte in Ihre App einfügen, z. B. das Starten der App über den Startbildschirm oder das Starten über einen Deeplink.

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

@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 App generieren aus und suchen Sie unter src/<variant>/generated/baselineProfiles/startup-prof.txt nach den Regeln für das Startprofil.

Hinweise zum Erstellen von Startup-Profilen

Die Ausgabe der Klassen und Methoden eines Startprofils ist durch die Größe der ersten classes.dex-Datei begrenzt. Das bedeutet, dass nicht alle Journeys für das Ausgangsprofil auch Journeys für das Start-up-Profil sein sollten.

Um zu entscheiden, welche User Journeys Sie beim Erstellen eines Start-up-Profils abdecken sollten, überlegen Sie, wo die meisten Nutzer die Anwendung starten. Normalerweise geschieht dies über den Launcher und nachdem sich der Nutzer angemeldet hat. Dies ist auch der einfachste Pfad für das Baseline-Profil.

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

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

Gehen Sie diese Liste von oben nach unten durch und beenden Sie die Bearbeitung, bevor „classes.dex“ voll ist. Wenn Sie später weitere Aufrufabfolgen abdecken möchten, verschieben Sie den Code aus dem Startpfad und fügen Sie weitere Aufrufabfolgen hinzu. Wenn Sie Code aus dem Startpfad entfernen möchten, prüfen Sie die Perfetto-Traces beim Starten der App und suchen Sie nach lang laufenden Vorgängen. Sie können auch einen Makrobenchmark mit aktiviertem Methoden-Tracing verwenden, um eine automatisierbare und vollständige Übersicht über die Methodenaufrufe beim Starten der App zu erhalten.