Mit Baseline-Profilen lässt sich die Codeausführungsgeschwindigkeit im Vergleich zur ersten Ausführung um etwa 30% verbessern, da die Interpretation und die Just-in-Time-Kompilierung (JIT) für die enthaltenen Codepfade vermieden werden.
Wenn Sie ein Baseline-Profil in einer App oder Bibliothek bereitstellen, kann die Android Runtime (ART) bestimmte Codepfade durch eine AOT-Kompilierung (Ahead-of-Time) optimieren und so die Leistung für jeden neuen Nutzer und jedes App-Update verbessern. Mit dieser profilgestützten Optimierung (PGO) können Apps den Start optimieren, Ruckler bei Interaktionen reduzieren und die Gesamtlaufzeitleistung für Nutzer ab dem ersten Start verbessern.
Diese Leistungsverbesserungen führen direkt zu besseren Geschäftsmesswerten wie Nutzerbindung, Transaktionen und Bewertungen. Weitere Informationen dazu, wie sich die Leistung auf Geschäftsmesswerte auswirkt, finden Sie in den Erfolgsgeschichten von Josh, Lyft, TikTok und Zomato.
Vorteile von Baseline-Profilen
Mit Baseline-Profilen werden alle Nutzerinteraktionen wie das Starten der App, das Wechseln zwischen Bildschirmen oder das Scrollen durch Inhalte von Anfang an flüssiger. Durch die Steigerung der Geschwindigkeit und Reaktionsfähigkeit einer App können Baseline-Profile zu mehr aktiven Nutzern pro Tag und einer höheren durchschnittlichen Wiederkehrrate führen.
Mit Baseline-Profilen können Sie die App nicht nur beim Start optimieren, sondern auch häufige Nutzerinteraktionen berücksichtigen, um die App-Laufzeit ab dem ersten Start zu verbessern. Die AOT-Kompilierung mit Anleitung ist unabhängig von Nutzergeräten und kann einmal pro Release auf einem Entwicklungscomputer statt auf einem Mobilgerät durchgeführt werden. Wenn Sie Releases mit einem Baseline-Profil bereitstellen, sind App-Optimierungen viel schneller verfügbar als bei der Verwendung von Cloud-Profilen allein.
Wenn kein Baseline-Profil verwendet wird, wird der gesamte App-Code 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 Leistung für Nutzer suboptimal, bis neue Codepfade optimiert wurden.
Bei vielen Apps wird nach der Optimierung eine Leistungssteigerung von etwa 30% gemessen.
Start-up-Profile
Start-Profile ähneln Baseline-Profilen, werden aber zur Kompilierungszeit und nicht für die On-Device-Optimierung verwendet. Mit einem Startprofil wird das Layout der DEX-Datei optimiert, um die Startzeiten zu verbessern.
Der im Startprofil angegebene Code wird in die primäre classes.dex
-Datei und anderer Code in separate DEX-Dateien kopiert. Dadurch werden die Startzeiten verbessert, da die Anzahl der Seitenfehler beim Starten der App reduziert wird. Weitere Informationen dazu, wie Startprofile und DEX-Layoutoptimierungen die App-Startzeiten verbessern können, finden Sie unter DEX-Layoutoptimierungen und Startprofile.
Erste Schritte
Informationen zum Optimieren der Leistung Ihrer bestehenden App finden Sie unter Baseline-Profile erstellen.
Empfohlene stabile Mindestversionen
Die Abhängigkeitskette bietet stabile und Entwicklungsversionen. Verwenden Sie zum Generieren und Installieren eines Baseline-Profils die folgenden unterstützten Versionen oder höher des Android Gradle-Plug-ins, der Macrobenchmark-Bibliothek und des Profil-Installationsprogramms. Diese Abhängigkeiten sind zu unterschiedlichen Zeiten erforderlich und bilden zusammen eine Toolchain, die ein optimales Baseline-Profil ermöglicht.
- Android-Gradle-Plug-in:
com.android.tools.build:8.0.0
- Macrobenchmark-Bibliothek:
androidx.benchmark:benchmark-macro-junit4:1.3.3
- Profil-Installationsprogramm:
androidx.profileinstaller:profileinstaller:1.4.1
Wir empfehlen, die neueste Version von AGP zu verwenden, um Baseline-Profile zu erstellen und zu verwalten. Hier sind die wichtigsten Funktionen der verschiedenen AGP-Versionen:
AGP-Version | Funktionen |
---|---|
8,4 | Bei lokalen App-Installationen nicht debugbarer Builds mit dem Gradle-Wrapper-Befehlszeilentool oder Android Studio-Installationsgrundlagenprofilen entspricht die Leistung des lokalen Release-Builds eher der Produktionsumgebung. Diese Aktualisierung hat keine Auswirkungen auf die Produktionsleistung von Baseline-Profilen. |
8,3 |
|
8.2 |
|
8.0 | Empfohlene Mindestversion:Verwenden Sie das Baseline Profile Gradle-Plug-in, um Baseline-Profile mit einer einzelnen Gradle-Aufgabe zu generieren.
|
7.4 |
Mindestunterstützte Version:Apps können Baseline-Profile aus Bibliotheken verwenden und ein eigenes Baseline-Profil in der Datei src/main/baseline-prof.txt angeben.
|
Beispiel für die Profilgenerierung
Im Folgenden finden Sie eine Beispielklasse zum Erstellen eines Baseline-Profils für den App-Start sowie mehrere Navigations- und Scrollereignisse 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()
}
}
}
Den vollständigen Code und weitere Details finden Sie in unseren Leistungsbeispielen auf GitHub.
Inhalte
Wenn Sie Baseline-Profile in einer App verwenden, können Sie Code zum Starten der App und gängige Nutzerinteraktionen wie die Navigation zwischen Bildschirmen oder das Scrollen einbinden. Sie können auch ganze Abläufe wie Registrierung, Anmeldung oder Zahlung erfassen. Alle Nutzerpfade, die Sie für kritisch halten, können von Baseline-Profilen profitieren, da sich so die Laufzeitleistung verbessert.
Wenn Sie mit verschiedenen Ansätzen zur Leistungssteigerung experimentieren, sollten Sie für beide Verzweigungen Ihres Tests Baseline-Profile einbeziehen. So können Sie Ihre Ergebnisse leichter interpretieren, da alle Nutzer immer den kompilierten Code ausführen.
Bibliotheken können eigene Baseline-Profile bereitstellen und mit Releases ausliefern, um die App-Leistung zu verbessern. Weitere Informationen finden Sie beispielsweise im Abschnitt Grundlagenprofil für die Leistung von Jetpack Compose verwenden.
Funktionsweise von Baseline-Profilen
Definieren Sie bei der Entwicklung Ihrer App oder Bibliothek Baseline-Profile, um gängige Nutzerinteraktionen abzudecken, bei denen die Renderingzeit oder Latenz wichtig sind. So funktioniert es:
Für Ihre App werden für Menschen lesbare Profilregeln generiert und in der App in binäre Form kompiliert. Sie finden sie in
assets/dexopt/baseline.prof
. Anschließend können Sie das AAB wie gewohnt bei 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 Starten der App oder beim Frame-Rendering verwendet werden, kann der Nutzer schnellere Startzeiten und weniger Ruckler feststellen.
Dieser Ablauf arbeitet mit der Cloud-Profile-Aggregation zusammen, um die Leistung basierend auf der tatsächlichen Nutzung der App 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 zur Kompilierung zur Installationszeit verteilt wird.
Cloud-Profile basieren auf echten Nutzerinteraktionen mit der App. Nach einem Update dauert es jedoch mehrere Stunden bis Tage, bis sie verteilt werden. Das schränkt ihre Verfügbarkeit ein. Bis die Profile vollständig verteilt sind, ist die App-Leistung für Nutzer neuer oder aktualisierter Apps nicht optimal. Außerdem werden Cloud-Profile nur von Android-Geräten mit Android 9 (API-Level 28) oder höher unterstützt und skalieren nur gut für Apps mit einer ausreichend großen Nutzerbasis.
Kompilierungsverhalten bei verschiedenen Android-Versionen
Für die verschiedenen Android-Plattformversionen werden unterschiedliche Ansätze zur App-Kompilierung verwendet, die jeweils mit einem entsprechenden Leistungskompromiss verbunden sind. Baseline-Profile sind eine Verbesserung gegenüber den bisherigen Kompilierungsmethoden, da sie ein Profil für alle Installationen bereitstellen.
Android-Version | Kompilierungsmethode | Optimierungsansatz |
---|---|---|
5 bis 6 (API-Level 21 bis 23) | Vollständige AOT | Die gesamte App wird während der Installation optimiert. Das führt zu langen Wartezeiten, erhöhter RAM- und Festplattenspeichernutzung sowie längeren Ladezeiten für Code von der Festplatte, was möglicherweise die Startzeit nach dem Ausschalten verlängert. |
7 bis 8.1 (API-Ebene 24 bis 27) | Teilweise AOT (Baseline-Profil) | Baseline-Profile werden von androidx.profileinstaller bei der ersten Ausführung installiert, wenn das App-Modul diese Abhängigkeit definiert. ART kann dies weiter verbessern, indem während der Nutzung der App zusätzliche Profilregeln hinzugefügt und kompiliert werden, wenn das Gerät inaktiv ist. Dadurch wird der Speicherplatz optimiert und die Zeit zum Laden von Code vom Laufwerk verkürzt, was die Wartezeit für die App verringert. |
9 (API-Level 28) und höher | Teilweise AOT (Baseline + Cloud-Profil) | Google Play verwendet bei App-Installationen Baseline-Profile, um die APK- und Cloud-Profile zu optimieren, sofern verfügbar. Nach der Installation werden ART-Profile in Play hochgeladen, aggregiert und dann anderen Nutzern als Cloud-Profile zur Verfügung gestellt, wenn sie die App installieren oder aktualisieren. |
Bekannte Probleme
Im Folgenden finden Sie mögliche Probleme und Lösungen oder Probleme, für die derzeit Lösungen entwickelt werden:
Die Generierung des Baseline-Profils kann auf einigen Geräten, einschließlich OnePlus-Geräten, aufgrund von Berechtigungseinstellungen fehlschlagen. Deaktivieren Sie dazu in den Entwickleroptionen die Option Berechtigungsüberwachung deaktivieren.
Die Generierung von Baseline-Profilen wird auf Firebase Test Lab-Geräten nicht unterstützt, einschließlich von Gradle verwalteter Test Lab-Geräte (Problem #285187547).
Verwenden Sie mindestens das Baseline Profile Gradle-Plug-in 1.2.3 oder AGP 8.3, um Baseline-Profile für Bibliotheken bereitzustellen (Problem 313992099).
Wenn Sie mit dem Befehl
./gradlew app:generateBaselineProfile
Baseline-Profile generieren, werden auch die Benchmarks im Testmodul ausgeführt und die Ergebnisse verworfen. In diesem Fall können Sie nur die Baseline-Profile generieren, indem Sie den Befehl mit-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
ausführen. Dieses Problem wurde in AGP 8.2 behoben.Der Befehl zum Generieren von Baseline-Profilen für alle Buildtypen (
./gradlew app:generateBaselineProfile
) generiert nur Baseline-Profile für den Release-Buildtyp. Dieses Problem wurde in AGP 8.1 behoben.App-Vertriebskanäle, die nicht zum Google Play Store gehören, unterstützen die Verwendung von Baseline-Profilen bei der Installation möglicherweise nicht. Nutzer von Apps, die über diese Kanäle installiert wurden, profitieren erst von den Vorteilen, wenn dexopt im Hintergrund ausgeführt wird – was wahrscheinlich über Nacht geschieht.
Die interne App-Freigabe im Play Store unterstützt keine Baseline-Profile. Der Track für interne Tests unterstützt sie jedoch.
Die Akkuoptimierung auf einigen Geräten, z. B. auf Huawei-Geräten, kann die Profilinstallation beeinträchtigen. Damit Ihre Profile effektiv installiert werden, deaktivieren Sie alle Akkuoptimierungen auf Ihren Benchmark-Geräten.
Weitere Informationen
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Baseline-Profile erstellen {:#creating-profile-rules}
- Grundlagenprofile ohne Makrobenchmark erstellen und messen
- DEX-Layoutoptimierungen und Startprofile