Basisprofile erstellen
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Baseline-Profile sind unerlässlich, um die Leistung von Jetpack Compose zu maximieren.
Durch die vorkompilierte Ausführung wichtiger Nutzerverhalten wird sichergestellt, dass Ihre Compose-UI reibungslos gerendert wird.
Mit der Jetpack
Macrobenchmark-Bibliothek und BaselineProfileRule können Sie automatisch Profile für jede App-Version erstellen. Wir empfehlen, com.android.tools.build:gradle:8.0.0 oder höher zu verwenden, um die Verbesserungen beim Erstellen von Baseline-Profilen zu nutzen.
So erstellen Sie ein neues Baseline-Profil:
Richten Sie das Baseline-Profil-Modul ein.
Definieren Sie den JUnit-Test, mit dem Baseline-Profile erstellt werden.
Fügen Sie die wichtigen Nutzerverhalten hinzu, die Sie optimieren möchten.
Erstellen Sie das Baseline-Profil.
Nachdem Sie das Baseline-Profil erstellt haben, führen Sie einen Benchmark auf einem physischen Gerät aus, um die Geschwindigkeitsverbesserungen zu messen.
Neues Baseline-Profil mit AGP 8.2 oder höher erstellen
Die einfachste Möglichkeit, ein neues Baseline-Profil zu erstellen, ist die Verwendung der Modulvorlage für Baseline-Profile, die ab Android Studio Iguana und Android Gradle Plugin (AGP) 8.2 verfügbar ist.
Die Modulvorlage für den Baseline-Profil-Generator von Android Studio automatisiert die
Erstellung eines neuen Moduls zum Generieren und
Benchmarking
von Baseline-Profilen. Wenn Sie die Vorlage ausführen, wird der Großteil der typischen Build-Konfiguration, der Baseline-Profil-Generierung und des Bestätigungscodes generiert. Die Vorlage erstellt Code zum Generieren und Benchmarking von Baseline-Profilen, um den App-Start zu messen.
Baseline-Profil-Modul einrichten
So führen Sie die Modulvorlage für Baseline-Profile aus:
Wählen Sie Datei > Neu > Neues Modul aus.
Wählen Sie im Steuerfeld Vorlagen die Vorlage Baseline-Profil-Generator aus und konfigurieren Sie sie:
Abbildung 1. Modulvorlage für den Baseline-Profil-Generator.
Die Felder in der Vorlage sind:
Zielanwendung: Die App, für die das Baseline-Profil
generiert wird. Wenn Ihr Projekt nur ein einziges App-Modul enthält, ist in dieser Liste nur ein Element vorhanden.
Modulname: Der Name, den Sie für das zu erstellende Baseline-Profil-Modul verwenden möchten.
Paketname: Der Paketname, den Sie für das Baseline-Profil
Modul verwenden möchten.
Sprache: Gibt an, ob der generierte Code Kotlin oder Java sein soll.
Build-Konfigurationssprache: Gibt an, ob Sie Kotlin Script
(KTS) oder Groovy für Ihre Build-Konfigurationsskripts verwenden möchten.
Von Gradle verwaltetes Gerät verwenden: Gibt an, ob Sie von Gradle verwaltete
Geräte zum Testen Ihrer App verwenden.
Klicken Sie auf Fertig , um das neue Modul zu erstellen. Wenn Sie die Versionsverwaltung verwenden, werden Sie möglicherweise aufgefordert, die neu erstellten Moduldateien der Versionsverwaltung hinzuzufügen.
Baseline-Profil-Generator definieren
Das neu erstellte Modul enthält Tests zum Generieren und Benchmarking des Baseline-Profils sowie zum Testen des grundlegenden App-Starts. Wir empfehlen, diese Tests um wichtige Nutzerverhalten und erweiterte Start-Workflows zu ergänzen. Achten Sie darauf, dass sich alle Tests im Zusammenhang mit dem App-Start in einem rule-Block befinden, bei dem includeInStartupProfile auf true gesetzt ist. Umgekehrt sollten alle Tests, die nicht mit dem App-Start zusammenhängen, nicht in einem Startprofil enthalten sein, um eine optimale Leistung zu erzielen. Mit App-Start
optimierungen wird ein spezieller Teil eines Baseline-Profils definiert, der als
Startprofil bezeichnet wird.
Es ist besser für die Wartbarkeit, wenn Sie diese wichtigen Nutzerverhalten außerhalb des generierten Baseline-Profils und Benchmark-Codes abstrahieren, damit sie für beide verwendet werden können. So werden Änderungen an Ihren wichtigen Nutzerverhalten einheitlich verwendet.
Baseline-Profil generieren und installieren
Die Modulvorlage für Baseline-Profile fügt eine neue Ausführungskonfiguration hinzu, um das Baseline-Profil zu generieren. Wenn Sie Produktvarianten verwenden, erstellt Android Studio mehrere Ausführungskonfigurationen, damit Sie für jede Variante separate Baseline-Profile generieren können.
Abbildung 2. Wenn Sie diese Konfiguration ausführen, wird das Baseline
Profil generiert.
Nach Abschluss der Ausführungskonfiguration Baseline-Profil generieren wird
das generierte Baseline-Profil in die
src/variant/generated/baselineProfiles/baseline-prof.txt
Datei im Modul kopiert, für das das Profil erstellt wird. Die Variantenoptionen sind entweder der Release-Build-Typ oder eine Build-Variante, die den Release-Build-Typ enthält.
Das generierte Baseline-Profil wird ursprünglich in build/outputs erstellt. Der vollständige Pfad wird durch die Variante oder den Flavor der App bestimmt, für die das Profil erstellt wird, und davon, ob Sie ein von Gradle verwaltetes Gerät oder ein verbundenes Gerät für die Profilerstellung verwenden. Wenn Sie die Namen verwenden, die von den durch die Vorlage generierten Code- und Build-Konfigurationen verwendet werden, wird das Baseline-Profil in der Datei build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt erstellt. Sie müssen wahrscheinlich nicht direkt mit dieser Version des generierten Baseline-Profils interagieren, es sei denn, Sie kopieren es manuell in die Zielmodule (nicht empfohlen).
Neues Baseline-Profil mit AGP 8.1 erstellen
Wenn Sie die Modulvorlage für Baseline-Profile nicht verwenden können, verwenden Sie die
Modulvorlage für Macrobenchmark und das Baseline-Profil-Gradle-Plug-in, um
ein neues Baseline-Profil zu erstellen. Wir empfehlen, diese Tools ab Android Studio Giraffe und AGP 8.1 zu verwenden.
So erstellen Sie ein neues Baseline-Profil mit der Modulvorlage für Macrobenchmark und dem Baseline-Profil-Gradle-Plug-in:
Der Generator kann Interaktionen mit Ihrer App enthalten, die über den App-Start hinausgehen.
So können Sie die Laufzeitleistung Ihrer App optimieren, z. B. beim Scrollen von Listen, Ausführen von Animationen und Navigieren in einer Activity.
Weitere Beispiele für Tests, die @BaselineProfileRule verwenden, um
wichtige Nutzerverhalten zu verbessern.
Fügen Sie das Baseline-Profil-Gradle-Plug-in (libs.plugins.androidx.baselineprofile) hinzu. Das Plug-in erleichtert das Generieren und Verwalten von Baseline-Profilen in Zukunft.
Führen Sie zum Generieren des Baseline-Profils die :app:generateBaselineProfile oder
:app:generateVariantBaselineProfile Gradle-Aufgaben im
Terminal aus.
Führen Sie den Generator als instrumentierten Test auf einem gerooteten physischen Gerät,
Emulator oder von Gradle verwalteten Gerät aus. Wenn Sie ein von Gradle verwaltetes Gerät verwenden, legen Sie aosp als systemImageSource fest, da Sie für den Baseline-Profil-Generator Root-Zugriff benötigen.
Am Ende der Generierungsaufgabe wird das Baseline-Profil nach app/src//generated/baselineProfiles kopiert.
Neues Baseline-Profil ohne Vorlagen erstellen
Wir empfehlen, ein Baseline-Profil mit der Modulvorlage für Baseline-Profile von Android Studio Baseline
Profile (bevorzugt) oder der Macrobenchmark-Vorlage zu erstellen. Sie
können aber auch nur das Baseline-Profil-Gradle-Plug-in verwenden. Weitere Informationen zum
Baseline-Profil-Gradle-Plug-in finden Sie unter Baseline-Profil
Generierung konfigurieren.
So erstellen Sie ein Baseline-Profil direkt mit dem Baseline-Profil-Gradle-Plug-in:
Erstellen Sie ein neues com.android.test-Modul, z. B. :baseline-profile.
Konfigurieren Sie die Datei build.gradle.kts für :baseline-profile:
Wenden Sie das Plug-in androidx.baselineprofile an.
Achten Sie darauf, dass targetProjectPath auf das Modul :app verweist.
Optional können Sie ein von Gradle verwaltetes Gerät (GMD) hinzufügen. Im folgenden Beispiel ist es pixel6Api31. Wenn nichts angegeben ist, verwendet das Plug-in ein verbundenes Gerät, entweder emuliert oder physisch.
Wenden Sie die gewünschte Konfiguration an, wie im folgenden Beispiel gezeigt.
Kotlin
plugins{id("com.android.test")id("androidx.baselineprofile")}android{defaultConfig{...}// Point to the app module, the module that you're generating the Baseline Profile for.targetProjectPath=":app"// Configure a GMD (optional).testOptions.managedDevices.devices{pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice){device="Pixel 6"apiLevel=31systemImageSource="aosp"}}}dependencies{...}// Baseline Profile Gradle plugin configuration. Everything is optional. This// example uses the GMD added earlier and disables connected devices.baselineProfile{// Specifies the GMDs to run the tests on. The default is none.managedDevices+="pixel6Api31"// Enables using connected devices to generate profiles. The default is// `true`. When using connected devices, they must be rooted or API 33 and// higher.useConnectedDevices=false}
Groovy
plugins{id'com.android.test'id'androidx.baselineprofile'}android{defaultConfig{...}// Point to the app module, the module that you're generating the Baseline Profile for.targetProjectPath':app'// Configure a GMD (optional).testOptions.managedDevices.devices{pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice){device'Pixel 6'apiLevel31systemImageSource'aosp'}}}dependencies{...}// Baseline Profile Gradle plugin configuration. Everything is optional. This// example uses the GMD added earlier and disables connected devices.baselineProfile{// Specifies the GMDs to run the tests on. The default is none.managedDevices['pixel6Api31']// Enables using connected devices to generate profiles. The default is// `true`. When using connected devices, they must be rooted or API 33 and// higher.useConnectedDevicesfalse}
Erstellen Sie einen Baseline-Profil-Test im Testmodul :baseline-profile. Das folgende Beispiel ist ein Test, der ein Baseline-Profil für den App-Start generiert.
Aktualisieren Sie die Datei build.gradle.kts im App-Modul, z. B. :app.
Wenden Sie das Plug-in androidx.baselineprofile an.
Fügen Sie dem Modul :baseline-profile eine baselineProfile-Abhängigkeit hinzu.
Kotlin
plugins{id("com.android.application")id("androidx.baselineprofile")}android{// There are no changes to the `android` block....}dependencies{...// Add a `baselineProfile` dependency on the `:baseline-profile` module.baselineProfile(project(":baseline-profile"))}
Groovy
plugins{id'com.android.application'id'androidx.baselineprofile'}android{// No changes to the `android` block....}dependencies{...// Add a `baselineProfile` dependency on the `:baseline-profile` module.baselineProfile':baseline-profile'}
Generieren Sie das Profil, indem Sie die :app:generateBaselineProfile
oder :app:generateVariantBaselineProfile Gradle-Aufgaben ausführen.
Am Ende der Generierungsaufgabe wird das Baseline-Profil nach
app/src/variant/generated/baselineProfiles kopiert.
Baseline-Profil benchmarken
Wenn Sie Ihr Baseline-Profil benchmarken möchten, erstellen Sie eine neue Android Instrumented Test Run-Konfiguration über die Gutter-Aktion, die die in der Datei StartupBenchmarks.kt definierten Benchmarks ausführt. Weitere Informationen zu Benchmark-Tests finden Sie unter
Macrobenchmark-Klasse erstellen und
Baseline-Profile mit der Macrobenchmark-Bibliothek benchmarken.
Abbildung 3. Android-Tests über die Gutter
Aktion ausführen.
Wenn Sie dies in Android Studio ausführen, enthält die Build-Ausgabe Details zu den Geschwindigkeitsverbesserungen, die das Baseline-Profil bietet:
StartupBenchmarks_startupCompilationBaselineProfiles
timeToInitialDisplayMs min 161.8, median 178.9, max 194.6
StartupBenchmarks_startupCompilationNone
timeToInitialDisplayMs min 184.7, median 196.9, max 202.9
Alle erforderlichen Codepfade erfassen
Die beiden wichtigsten Messwerte für die Messung der App-Startzeiten sind:
TTFD wird gemeldet, sobald die reportFullyDrawn Methode der
ComponentActivity aufgerufen wird. Wenn reportFullyDrawn nie aufgerufen wird, wird stattdessen die TTID gemeldet. Möglicherweise müssen Sie den Aufruf von reportFullyDrawn verzögern, bis das asynchrone Laden abgeschlossen ist. Wenn die UI
beispielsweise eine dynamische Lazy-Liste enthält, wird die Liste möglicherweise durch eine Hintergrund
aufgabe gefüllt, die abgeschlossen wird, nachdem die Liste zum ersten Mal gezeichnet wurde und somit nachdem die UI
als vollständig gezeichnet markiert wurde. In solchen Fällen ist Code, der ausgeführt wird, nachdem die UI den vollständig gezeichneten Status erreicht hat, nicht im Baseline-Profil enthalten.
Wenn Sie das Füllen der Liste in Ihr Baseline-Profil aufnehmen möchten, rufen Sie den
FullyDrawnReporter mit getFullyDrawnReporter ab und fügen Sie in Ihrem App-Code einen Reporter
hinzu. Geben Sie den Reporter frei, sobald die Hintergrundaufgabe das Füllen der Liste abgeschlossen hat. Die Methode reportFullyDrawn wird vom FullyDrawnReporter erst aufgerufen, wenn alle Reporter freigegeben wurden. So enthält das Baseline-Profil die Codepfade, die zum Füllen der Liste erforderlich sind. Das Verhalten der App für den Nutzer ändert sich dadurch nicht, aber das Baseline-Profil enthält alle erforderlichen Codepfade.
Verwenden Sie die folgenden Compose-APIs, um den vollständig gezeichneten Status anzugeben:
ReportDrawn gibt an, dass Ihre zusammensetzbare Funktion sofort für die Interaktion bereit ist.
ReportDrawnWhen verwendet ein Prädikat wie list.count > 0, um
anzugeben, wann Ihre zusammensetzbare Funktion für die Interaktion bereit ist.
ReportDrawnAfter verwendet eine suspendierende Methode, die nach Abschluss angibt, dass Ihre zusammensetzbare Funktion für die Interaktion bereit ist.
Empfehlungen für Sie
Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.