Referenzprofile verbessern die Geschwindigkeit der Codeausführung ab dem ersten Start um etwa 30 %, da Interpretationen und JIT-Kompilierungsschritte (Just-in-Time) für enthaltene Codepfade vermieden werden.
Wenn Sie ein Baseline-Profil in eine App oder Bibliothek senden, kann Android Runtime (ART) bestimmte Codepfade durch Ahead-of-Time-Kompilierung (AOT) optimieren und Leistungsverbesserungen für jeden neuen Nutzer und jedes App-Update bereitstellen. Mit dieser Profilgeführten Optimierung (PGO) können Anwendungen den Start optimieren, Interaktionsverzögerungen reduzieren und die Gesamtlaufzeitleistung für Nutzer vom ersten Start an verbessern.
Diese Leistungsverbesserungen führen direkt zu verbesserten Geschäftsmesswerten wie Nutzerbindung, Transaktionen und Bewertungen. Weitere Informationen dazu, wie sich die Leistung auf Geschäftsmesswerte auswirkt, finden Sie in Josh, Lyft, TikTok und Zomato.
Vorteile von Baseline-Profilen
Mit Referenzprofilen werden alle Nutzerinteraktionen ab der ersten Ausführung reibungsloser gestaltet, z. B. App-Start, Navigation zwischen Bildschirmen oder Scrollen durch Inhalte. Durch Erhöhen der Geschwindigkeit und Reaktionsfähigkeit einer App können Baseline-Profile zu mehr aktiven Nutzern pro Tag und einer höheren durchschnittlichen Rückkehrrate führen.
Referenzprofile unterstützen die Optimierung über den App-Start hinaus, da sie gängige Nutzerinteraktionen bieten, die die App-Laufzeit vom ersten Start an verbessern. Die geführte AOT-Kompilierung hängt nicht von Nutzergeräten ab und kann einmal pro Release auf einem Entwicklungscomputer statt auf einem Mobilgerät durchgeführt werden. Durch das Versenden von Releases mit einem Baseline-Profil sind Anwendungsoptimierungen viel schneller verfügbar, als wenn nur Cloud-Profile verwendet werden.
Wenn Sie kein Baseline-Profil verwenden, wird der gesamte Anwendungscode entweder nach der Interpretation im Arbeitsspeicher JIT-kompiliert oder im Hintergrund in eine odex
-Datei geschrieben, wenn das Gerät inaktiv ist. Nach der Installation oder Aktualisierung einer App ist die Nutzerfreundlichkeit von der ersten Ausführung bis zur Optimierung neuer Codepfade für Nutzer nicht optimal.
Viele Apps messen nach der Optimierung Leistungssteigerungen von etwa 30 %.
Start-up-Profile
Startprofile ähneln Baseline-Profilen, haben aber den Unterschied, dass sie bei der Kompilierung und nicht für die On-Device-Optimierung verwendet werden. Ein Startprofil wird verwendet, um das Layout der DEX-Datei zu optimieren und so die Startzeiten zu verkürzen.
Der im Startprofil angegebene Code wird in die primäre Datei classes.dex
und der andere Code in separate DEX-Dateien eingefügt. Dies verkürzt die Startzeiten, da die Anzahl der Seitenfehler beim Start der Anwendung reduziert wird. Weitere Informationen dazu, wie Startprofile und DEX-Layoutoptimierungen die Startzeiten von Anwendungen verbessern können, finden Sie unter DEX-Layoutoptimierungen und Startprofile.
Erste Schritte
Informationen zum Optimieren der Leistung in Ihrer vorhandenen Anwendung finden Sie unter Referenzprofile erstellen.
Mindestens empfohlene stabile Versionen
Die Abhängigkeitskette stellt stabile Release- und Entwicklungsversionen bereit. Verwenden Sie zum Generieren und Installieren eines Baseline-Profils die folgenden unterstützten Versionen des Android-Gradle-Plug-ins, der MacroBenchmark-Bibliothek und des Profile Installers oder höher. Diese Abhängigkeiten sind zu unterschiedlichen Zeiten erforderlich und arbeiten als Toolchain zusammen, um ein optimales Baseline-Profil zu aktivieren.
- Android-Gradle-Plug-in:
com.android.tools.build:8.0.0
- MacroBenchmark-Bibliothek:
androidx.benchmark:benchmark-macro-junit4:1.2.4
- Profilinstallationsprogramm:
androidx.profileinstaller:profileinstaller:1.3.1
Wir empfehlen, die neueste Version von AGP zum Erstellen und Verwalten von Baseline-Profilen zu verwenden. Dies sind die wichtigsten Funktionen der verschiedenen AGP-Versionen:
AGP-Version | Funktionen |
---|---|
8,4 | Lokale App-Installationen von nicht Debug-fähigen Builds mithilfe des Gradle-Wrapper-Befehlszeilentools oder der Android Studio-Installation von Referenzprofilen, sodass die Leistung Ihres lokalen Release-Builds besser der Produktion entspricht Dieses Update wirkt sich nicht auf die Produktionsleistung von Baseline-Profilen aus. |
8,3 |
|
8.2 |
|
8.0 | Empfohlene Mindestversion:Verwenden Sie das Gradle-Plug-in „Baseline Profile“, um Baseline-Profile mit einer einzelnen Gradle-Aufgabe zu generieren.
|
7,4 |
Unterstützte Mindestversion: Anwendungen können Baseline-Profile aus Bibliotheken nutzen und ein eigenes Baseline-Profil in der Datei src/main/baseline-prof.txt angeben.
|
Beispiel für die Profilerstellung
Im Folgenden finden Sie eine Beispielklasse zum Erstellen eines Baseline-Profils für den App-Start sowie mehrerer Navigations- und Scroll-Ereignisse mit der empfohlenen MacroBenchmark-Bibliothek:
@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
// App startup journey.
startActivityAndWait()
device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
device.findObject(By.res("myLazyColumn")).also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
device.pressBack()
}
}
}
Sie können diesen Code im vollständigen Kontext und im Detail als Teil unserer Leistungsbeispiele auf GitHub sehen.
Inhalte
Wenn Sie Baseline-Profile in einer App verwenden, können Sie den App-Startcode und gängige Nutzerinteraktionen wie Navigation zwischen Bildschirmen oder Scrollen einbeziehen. Sie können auch vollständige Abläufe wie Registrierung, Anmeldung oder Zahlung erfassen. Alle Nutzerpfade, die Sie für wichtig halten, können von Baseline-Profilen profitieren, da sie die Laufzeitleistung verbessern.
Wenn Sie mit verschiedenen Ansätzen zur Verbesserung der Leistung experimentieren, sollten Sie Baseline-Profile für beide Testverzweigungen einbeziehen. Auf diese Weise können Sie die Interpretation der Ergebnisse vereinfachen und dafür sorgen, dass alle Nutzer konsistent kompilierten Code ausführen.
Bibliotheken können eigene Baseline-Profile bereitstellen und ihnen Releases zur Verfügung stellen, um die Anwendungsleistung zu verbessern. Entsprechende Informationen finden Sie beispielsweise im Abschnitt zur Verwendung eines Referenzprofils in der Jetpack Compose-Leistung.
Funktionsweise von Baseline-Profilen
Sie können beim Entwickeln Ihrer Anwendung oder Bibliothek Referenzprofile definieren, um gängige Nutzerinteraktionen abzudecken, bei denen Renderingzeit oder Latenz wichtig sind. Funktionsweise:
Für Ihre Anwendung werden menschenlesbare Profilregeln generiert und in der Anwendung in Binärform kompiliert. Sie finden sie unter
assets/dexopt/baseline.prof
. Anschließend können Sie das AAB wie gewohnt in Google Play hochladen.Google Play verarbeitet das Profil und sendet es zusammen mit dem APK direkt an die Nutzer. Während der Installation führt ART eine AOT-Kompilierung der Methoden im Profil durch, wodurch diese Methoden schneller ausgeführt werden. Wenn das Profil Methoden enthält, die beim App-Start oder während des Frame-Renderings verwendet werden, kann es zu kürzeren Startzeiten und weniger Verzögerungen kommen.
Dieser Ablauf arbeitet mit der Cloud-Profil-Aggregation zusammen, um die Leistung basierend auf der tatsächlichen Nutzung der Anwendung im Laufe der Zeit zu optimieren.
Cloud-Profile
Cloud-Profile bieten zusammen mit Baseline-Profilen eine zusätzliche Form von PGO, die vom Google Play Store aggregiert und für die Kompilierung der Installationszeit verteilt wird.
Cloud-Profile basieren zwar auf tatsächlichen Nutzerinteraktionen mit der Anwendung, aber es dauert nach der Aktualisierung eines Updates mehrere Stunden bis Tage, wodurch die Verfügbarkeit eingeschränkt wird. Solange keine Profile vollständig verteilt sind, ist die Anwendungsleistung für Nutzer neuer oder aktualisierter Anwendungen nicht optimal. Darüber hinaus unterstützen Cloud Profile nur Android-Geräte mit Android 9 (API-Level 28) oder höher und lassen sich nur gut für Anwendungen mit einer ausreichend großen Nutzerbasis skalieren.
Kompilierungsverhalten in verschiedenen Android-Versionen
Die Android Platform-Versionen verwenden unterschiedliche Ansätze zur App-Kompilierung, die jeweils einen entsprechenden Leistungsabschwächer mit sich bringen. Baseline-Profile bieten im Vergleich zu den vorherigen Kompilierungsmethoden ein Profil für alle Installationen.
Android-Version | Kompilierungsmethode | Optimierungsansatz |
---|---|---|
5 bis 6 (API-Level 21 bis 23) | Vollständiger AOT | Die gesamte Anwendung wird während der Installation optimiert, was zu langen Wartezeiten bei der Nutzung der Anwendung, erhöhter RAM- und Speicherplatznutzung und längerer Zeit zum Laden von Code von der Festplatte führt. Dies kann zu längeren Kaltstartzeiten führen. |
7 bis 8.1 (API-Level 24 bis 27) | Teilweise AOT (Baseline Profile) | Referenzprofile werden von androidx.profileinstaller bei der ersten Ausführung installiert, wenn das Anwendungsmodul diese Abhängigkeit definiert. ART kann dies weiter verbessern, indem während der Nutzung der Anwendung zusätzliche Profilregeln hinzugefügt und diese kompiliert werden, wenn das Gerät inaktiv ist. Dies optimiert den Speicherplatz und die Zeit zum Laden von Code vom Laufwerk, wodurch die Wartezeit für die Anwendung verkürzt wird. |
9 (API-Level 28) und höher | Teilweise AOT (Baseline + Cloud-Profil) | Play verwendet bei App-Installationen Baseline-Profile, um das APK und die Cloud-Profile zu optimieren, sofern verfügbar. Nach der Installation werden ART-Profile bei Play hochgeladen, aggregiert und dann anderen Nutzern als Cloud-Profile zur Verfügung gestellt, wenn diese die Anwendung installieren oder aktualisieren. |
Bekannte Probleme
Im Folgenden finden Sie mögliche Probleme und Lösungen bzw. Probleme, für die fortlaufende Lösungen zur Umgehung des Problems entwickelt werden:
Das Erstellen des Referenzprofils kann aufgrund von Berechtigungseinstellungen auf einigen Geräten, einschließlich OnePlus-Geräten, fehlschlagen. Sie können das Problem umgehen, indem Sie in den Entwickleroptionen die Option Berechtigungsmonitoring deaktivieren deaktivieren.
Das Erstellen des Referenzprofils wird auf Firebase Test Lab-Geräten, einschließlich von Gradle-verwalteten Test Lab-Geräten, nicht unterstützt (Problem 285187547).
Verwenden Sie zum Bereitstellen von Baseline-Profilen für Bibliotheken mindestens das Baseline Profile Gradle-Plug-in 1.2.3 oder AGP 8.3 (Problem #313992099).
Wenn Sie Baseline-Profile mit dem Befehl
./gradlew app:generateBaselineProfile
generieren, werden die Benchmarks im Testmodul ebenfalls ausgeführt und die Ergebnisse verworfen. In diesem Fall können Sie nur die Baseline-Profile generieren. Führen Sie dazu den Befehl mit-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
aus. Dieses Problem wurde in AGP 8.2 behoben.Mit dem Befehl zum Generieren von Baseline-Profilen für alle Build-Typen –
./gradlew app:generateBaselineProfile
– werden nur Baseline-Profile für den Release-Build-Typ generiert. Dieses Problem wurde in AGP 8.1 behoben.App-Vertriebskanäle, die nicht aus dem Google Play Store stammen, unterstützen die Verwendung von Baseline-Profilen bei der Installation möglicherweise nicht. Nutzer von Anwendungen, die über diese Kanäle installiert werden, sehen die Vorteile erst, wenn die Hintergrunddexoptimierung ausgeführt wird, was wahrscheinlich über Nacht erfolgt.
Die interne App-Freigabe im Play Store unterstützt keine Referenzprofile, wohl aber der interne Test-Track.
Akkuoptimierungen auf einigen Geräten, z. B. Huawei-Geräten, können die Profilinstallation beeinträchtigen. Deaktivieren Sie alle Akkuoptimierungen in Ihren Benchmark-Geräten, damit Ihre Profile effektiv installiert werden.
Zusätzliche Ressourcen
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Baseline-Profile erstellen {:#create-profile-rules}
- Baseline-Profile ohne MacroBenchmark erstellen und messen
- DEX-Layoutoptimierungen und Startprofile