Start-Profile sind eine Teilmenge der Baseline-Profile. Start-up-Profile werden verwendet vom Build-System verwendet, um die darin enthaltenen Klassen und Methoden weiter zu optimieren indem du das Codelayout in den DEX-Dateien deines APK verbessert. Mit Startprofilen ist der App-Start in der Regel zwischen 15 % und 30 % schneller als nur mit Baseline-Profilen.
Voraussetzungen
Wir empfehlen, Start-up-Profile mit den folgenden Tools zu verwenden:
- Jetpack Macro Benchmark 1.2.0 oder höher
- Android-Gradle-Plug-in 8.2 oder höher
- Android Studio Iguana oder höher
Darüber hinaus sind die folgenden Einstellungen in Ihrer App erforderlich:
- R8 muss aktiviert sein. Legen Sie für Ihren Release-Build Folgendes fest:
isMinifyEnabled = true
- DEX-Layoutoptimierungen aktiviert. Im
baselineProfile {}
-Block des Build-Datei des App-Moduls aufdexLayoutOptimization = true
festgelegt.
Startprofil erstellen
Android Studio erstellt neben einem Baseline-Profil ein Start-up-Profil, wenn Sie die Standardvorlage „Baseline Profile Generator“ verwenden.
Die allgemeinen Schritte zum Erstellen und Generieren eines Startprofils sind dieselben wie beim Erstellen eines Baseline-Profils.
Die Standardmethode zum Erstellen eines Start-up-Profils ist die Verwendung des Baseline-Profils
Vorlage für Generatormodul in Android Studio. Dazu gehören Start-ups
Interaktionen, die ein einfaches Start-up-Profil bilden. So erweitern Sie dieses Start-up-Profil
mit mehr kritischen User Journeys (Critical User Journeys, CUJs) haben, fügen Sie Ihre App-Start-CUJs zu einem rule
hinzu
mit includeInStartupProfile
auf true
gesetzt. Bei einfachen Apps kann der Start
Die MainActivity
der App kann ausreichen. Bei komplexeren Anwendungen
Ihrer App die häufigsten Einstiegspunkte hinzufügen, z. B. das Starten der App von
zum Startbildschirm oder zu einem Deeplink.
Das folgende Code-Snippet zeigt einen Generator für Basisprofile (standardmäßig die
BaselineProfileGenerator.kt
-Datei), bei denen die App unter anderem aus dem
und in einen Deeplink starten. Der Deeplink führt direkt zum
aus dem Nachrichtenfeed der App, nicht aus dem 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 Konfiguration Generate Baseline Profile for app (Baseline-Profil für Anwendung generieren) aus und suchen Sie nach der
Regeln für Start-up-Profil unter
src/<variant>/generated/baselineProfiles/startup-prof.txt
Optimierung von Start-up-Profilen bestätigen
Um die Optimierung des DEX-Layouts zu bestätigen, verwende Android Studio, um das APK zu öffnen und
die Klassen in den DEX-Dateien überprüfen. Die primäre classes.dex
darf nicht
vollständig ausgefüllt sind. Wenn Ihre App nur aus einer einzigen DEX-Datei besteht, können Sie
Gibt an, ob die Anwendung nach der Aktivierung des Startprofils zwei DEX-Dateien enthält.
Android Studio warnt Sie, wenn die Startklassen nicht in eine einzelne DEX-Datei passen.
Um Diagnoseinformationen zu erhalten, die die Anzahl der Nicht-Startmethoden in
die Startklassen, achten Sie darauf, dass der R8-Compiler mindestens auf die Version
8.3.36-dev durch folgende Änderungen an der Datei settings.gradle
beim
wenden Sie das Start-up-Profil an:
Kotlin
pluginManagement { buildscript { repositories { mavenCentral() maven { url = uri("https://storage.googleapis.com/r8-releases/raw") } } dependencies { classpath("com.android.tools:r8:8.3.6-dev") } } }
Cool
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Füge danach --info
hinzu
assembleRelease
im folgenden Befehl, wenn Sie Builds mit Gradle erstellen.
./gradlew assembleRelease --info
Die Diagnose wird dann an das Terminal ausgegeben.
Wenn Ihre App oder Bibliotheken auf nicht mehr unterstützte APIs verweisen, werden die gebündelten Kompatibilitätsimplementierungen dieser Klassen immer in der letzten DEX-Datei. Diese endgültige DEX-Datei ist nicht Teil des DEX-Layouts Optimierungen vor.
Überlegungen zum Erstellen von Start-up-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 beim Erstellen eines Start-up-Profils abgedeckt werden sollen, bei dem die meisten Nutzenden die App starten. Normalerweise ist das aus dem Launcher nachdem sie sich angemeldet haben. Dies ist auch der einfachste Pfad für das Baseline-Profil.
Nachdem der erste Anwendungsfall behandelt wurde, folgen Sie dem Nutzertrichter für die App Start-up. In vielen Fällen folgen App-Starttrichter dieser Liste:
- Hauptaktivität des Launchers
- Benachrichtigungen, die App-Start auslösen
- Optionale Launcher-Aktivitäten
Arbeite diese Liste von oben an und halte an, bevor „classes.dex“ voll ist. Deckung weitere Journeys hinzufügen, Code aus dem Startpfad verschieben und Reisen. Wenn Sie Code aus dem Startpfad entfernen möchten, prüfen Sie die Perfetto-Traces während des App-Starts und suchen Sie nach lang laufenden Vorgängen. Sie können auch einen Makro-Benchmark verwenden, mit aktiviertem Methoden-Tracing für eine automatisierbare und vollständige Ansicht der Methodenaufrufe während des App-Starts.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Baseline-Profile erstellen {:#creating-profile-rules}
- Baseline-Profile {:#baseline-profiles}
- MicroBenchmark schreiben