Sie können bestimmte Pakete mit R8 und packageScope optimieren. Dies ist als optionaler erster Schritt für Apps gedacht, die R8 noch nicht verwenden, und wird für Apps, die R8 bereits verwenden, nicht empfohlen.
Überlegen Sie, ob Sie packageScope verwenden möchten.
Wenn Ihre App bereits R8 verwendet, sollten Sie packageScope nicht verwenden, da dies in Bezug auf Leistung und App-Größe eine suboptimale Konfiguration ist. Stattdessen sollten Sie die R8-Konfiguration Ihrer App mit verbesserten Keep-Regeln optimieren oder, wenn Sie den Kompatibilitätsmodus verwenden, zum vollständigen Modus von R8 migrieren.
Bei Apps, die R8 noch nicht verwenden, aber auf R8 umgestellt werden, können Sie packageScope verwenden, um die Umstellung schrittweise zu verwalten. R8 wendet leistungsstarke Optimierungen an, die das App-Verhalten ändern können. Wenn Sie diese Optimierungen auf bestimmte Pakete beschränken, die sicher optimiert werden können, z. B. AndroidX und Kotlin, können Sie die Leistung mit minimalem Risiko steigern. Sobald Ihre App stabil ist, können Sie diese Optimierungen schrittweise auf den Rest Ihrer Codebasis und Abhängigkeiten ausweiten und die Stabilität in jeder Phase testen.
Voraussetzungen
Für die Verwendung von R8 mit packageScope ist das Android-Gradle-Plug-in 9.0 oder höher erforderlich.
Optimierung konfigurieren
Führen Sie die folgenden Schritte aus, um die Optimierung mit packageScope zu aktivieren.
Zu optimierende Bibliotheken auswählen
Ermitteln Sie die zu optimierenden Bibliotheken. Wir empfehlen, mit den AndroidX- und Kotlin-Bibliotheken androidx.**, kotlin.** und kotlinx.** zu beginnen, da es sich um stabile Bibliotheken handelt, die für die R8-Kompatibilität konfiguriert wurden.
Unterstützung für die Verwendung von R8 mit packageScope aktivieren
Fügen Sie der Datei gradle.properties Ihres Projekts Folgendes hinzu:
android.r8.gradual.support=true
Optimierungsblock einrichten
Fügen Sie in der Datei build.gradle.kts (oder build.gradle) auf Modulebene einen optimization-Block in die Release-Build-Konfiguration ein. Verwenden Sie innerhalb dieses Blocks packageScope, um die zu optimierenden Pakete aufzulisten. Schließen Sie in der Datei build.gradle.kts die Paketliste in setOf() ein.
Kotlin
android { buildTypes { release { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
Optimierung testen
Nachdem Sie die packageScope-Erklärung angewendet oder aktualisiert haben, sollten Sie Ihre App gründlich testen, um zu prüfen, ob es zu unerwarteten Abstürzen oder Verhaltensänderungen gekommen ist.
Von der Optimierung bestimmter Pakete zur Optimierung der gesamten App wechseln
Um die Vorteile der Optimierung zu maximieren, sollten Sie nach und nach von der Verwendung von packageScope zur Verwendung von R8 in Ihrer gesamten App übergehen. Dieser Prozess umfasst die schrittweise Erweiterung der Optimierungsabdeckung:
- Mit stabilen Bibliotheken beginnen: Beginnen Sie damit, nur weit verbreitete, stabile Bibliotheken, die mit den Optimierungen von R8 kompatibel sind, in die Liste
packageScopeaufzunehmen. Beginnen Sie mit den AndroidX- und Kotlin-Bibliothekenandroidx.**,kotlin.**undkotlinx.**. - Pakete schrittweise hinzufügen: Fügen Sie der
packageScopenach und nach neue Paketpräfixe hinzu:- Abhängigkeiten bewerten: Überprüfen Sie die Bibliotheken Ihrer App. Gute Kandidaten für die
packageScope-Liste sind offizielle Google-Bibliotheken (z. B.com.google.**) und andere robuste Bibliotheken wieOkHttp(z. B.okhttp3.**undokio.**). Priorisieren Sie Bibliotheken, die keine umfangreichen Reflexions-, Serialisierungs- oder nativen Codeaufrufe (JNI) erfordern. - Basierend auf der Paketgröße priorisieren: Mit dem APK Analyzer von Android Studio können Sie die größten Faktoren für die Größe Ihrer App ermitteln.
1. Erstellen Sie ein Release-AAB oder ‑APK, bei dem R8 deaktiviert ist.
1. Öffnen Sie die Datei im Analysetool und prüfen Sie die
dex-Dateien. 1. Pakete nach Größe sortieren. Die größten Pakete bieten den höchsten Return on Investment (ROI) für die Optimierung. Wenn Sie diese zuerst anvisieren, erreichen Sie die größte Größenreduzierung zu Beginn des Prozesses, sofern diese Bibliotheken keine zu weit gefassten Keep-Regeln haben. Weitere Informationen finden Sie unter Bibliotheken mit Bedacht auswählen.
- Abhängigkeiten bewerten: Überprüfen Sie die Bibliotheken Ihrer App. Gute Kandidaten für die
- Verhaltensänderungen überprüfen Führen Sie nach dem Hinzufügen jedes neuen Paketpräfixes umfassende Tests durch, um Regressionen oder unerwartetes Verhalten zu erkennen und zu beheben.
- App-Pakete zuletzt hinzufügen: Wenn in Ihren App-Paketen nicht viel Reflection verwendet wird, nehmen Sie die App-Pakete in
packageScopeauf und fügen Sie nach Bedarf inkrementell Keep-Regeln hinzu. Wenn in Ihren App-Paketen viel Reflection verwendet wird, fügen Sie die Pakete inpackageScopeein und fügen Sie paketweite Keep-Regeln für die erforderlichen Pakete hinzu. Wiederholen Sie die Schritte für die Aufbewahrungsregeln, um sie zu optimieren. - R8 für die gesamte App verwenden: Nachdem die meisten Abhängigkeiten Ihrer App in der
packageScope-Deklaration enthalten sind und Ihre App stabil ist, entfernen SiepackageScope, um die gesamte App im Vollmodus zu optimieren.