Start-up-Profile sind eine Teilmenge der Baseline-Profile. Startprofile 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 APK verbessert wird. Mit Start-up-Profilen ist Ihr Anwendungs-Start bis zu 15% schneller als mit Baseline-Profilen allein.
![](https://developer.android.com/static/topic/performance/images/dex-layout-optimizations.png?authuser=6&hl=de)
Voraussetzungen
Wir empfehlen, Start-up-Profile mit den folgenden Tools zu verwenden:
- Jetpack MacroBenchmark 1.2.0 oder höher
- Android Gradle-Plug-in 8.2 oder höher
- Android Studio Iguana oder höher
Außerdem benötigen Sie in Ihrer App die folgenden Einstellungen:
- R8 aktiviert ist. Legen Sie für Ihren Release-Build
isMinifyEnabled = true
fest. - DEX-Layoutoptimierungen aktiviert. Legen Sie im Block
baselineProfile {}
der Build-Datei des AnwendungsmodulsdexLayoutOptimization = true
fest.
Start-up-Profil erstellen
Android Studio erstellt neben einem Baseline-Profil ein Startprofil, wenn Sie die Standardvorlage für den 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 Startprofils ist die Verwendung der Modulvorlage des Baseline Profile Generators in Android Studio. Dazu gehören Startinteraktionen, die ein grundlegendes Startprofil bilden. Wenn Sie dieses Startprofil um kritische User Journeys (CUJs) ergänzen möchten, fügen Sie Ihre Start-CUJs in einen rule
-Block ein, wobei includeInStartupProfile
auf true
festgelegt ist. Für einfache Anwendungen kann es ausreichend sein, die MainActivity
der Anwendung zu starten. Bei komplexeren Apps können Sie die häufigsten Einstiegspunkte in Ihre App einbinden, z. B. indem Sie die App vom Startbildschirm aus starten oder über einen Deeplink öffnen.
Das folgende Code-Snippet zeigt einen Baseline-Profilgenerator (standardmäßig die Datei BaselineProfileGenerator.kt
), mit dem Ihre App vom Startbildschirm aus gestartet und über einen Deeplink gestartet wird. Der Deeplink führt direkt zum Nachrichtenfeed der App, nicht zum 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 Baseline-Profil für die Anwendung generieren aus und suchen Sie die Startprofilregeln unter src/<variant>/generated/baselineProfiles/startup-prof.txt
.
Optimierung der Startprofile bestätigen
Öffnen Sie zum Bestätigen der DEX-Layoutoptimierung Android Studio, um das APK zu öffnen und die Klassen in den DEX-Dateien zu prüfen. Achte darauf, dass die primäre classes.dex
nicht vollständig ausgefüllt ist. Wenn Ihre Anwendung aus einer einzigen DEX-Datei besteht, können Sie nach der Aktivierung des Startprofils prüfen, ob die Anwendung zwei DEX-Dateien enthält.
Android Studio warnt Sie, wenn die Startklassen nicht in eine einzelne DEX-Datei passen.
Damit Sie Diagnoseinformationen erhalten, die die Anzahl der Nicht-Startmethoden in den Startklassen enthalten, muss der R8-Compiler auf mindestens Version 8.3.36-dev aktualisiert werden. Nehmen Sie dazu die folgenden Änderungen in der Datei settings.gradle
vor, wenn Sie das Startprofil anwenden:
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") } } }
Groovig
pluginManagement { buildscript { repositories { mavenCentral() maven { url uri('https://storage.googleapis.com/r8-releases/raw') } } dependencies { classpath 'com.android.tools:r8:8.3.6-dev" } } }
Achten Sie darauf, dass Sie --info
nach assembleRelease
in den folgenden Befehl einfügen, wenn Sie Builds mit Gradle erstellen.
./gradlew assembleRelease --info
Die Diagnose wird dann auf dem Terminal ausgegeben.
Verweisen Ihre App oder Bibliotheken auf gewünschte APIs, sind die gebündelten Kompatibilitätsimplementierungen dieser Klassen immer in der letzten DEX-Datei enthalten. Diese letzte DEX-Datei nimmt nicht an der DEX-Layoutoptimierung teil.
Empfehlungen für dich
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Baseline-Profile erstellen {:#create-profile-rules}
- Baseline-Profile {:#baseline-profiles}
- Mikro-Benchmark schreiben