Für eine optimale Nutzererfahrung sollten Sie Ihre App so klein und schnell wie möglich gestalten. Unser App-Optimierungstool R8 optimiert Ihre App, indem es ungenutzten Code und ungenutzte Ressourcen entfernt, Code neu schreibt, um die Laufzeitleistung zu optimieren, und vieles mehr. Für Ihre Nutzer bedeutet das:
- App startet schneller
- Verbesserte Rendering- und Laufzeitleistung
- Weniger ANRs
Wenn Sie die App-Optimierung aktivieren möchten, legen Sie isMinifyEnabled = true (für die Code-Optimierung) und isShrinkResources = true (für die Ressourcenoptimierung) im Build-Skript auf App-Ebene Ihres Release-Builds fest, wie im folgenden Code dargestellt. Wir empfehlen, immer beide Einstellungen zu aktivieren. Wir empfehlen, die App-Optimierung nur in der endgültigen Version Ihrer App zu aktivieren, die Sie vor der Veröffentlichung testen – in der Regel Ihr Release-Build. Die Optimierungen verlängern die Build-Zeit Ihres Projekts und können das Debugging erschweren, da sie den Code ändern.
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
Ressourcenverkleinerung für noch kleinere Apps optimieren
Mit Version 8.12.0 des Android-Gradle-Plug-ins (AGP) wird die optimierte Ressourcenverkleinerung eingeführt, bei der Ressourcen- und Codeoptimierung integriert werden, um noch kleinere und schnellere Apps zu erstellen.
Optimierte Ressourcenverkleinerung aktivieren
Wenn Sie die neue optimierte Pipeline zum Verkleinern von Ressourcen für eine Version von AGP vor 9.0.0 aktivieren möchten, fügen Sie der Datei gradle.properties Ihres Projekts Folgendes hinzu:
android.r8.optimizedResourceShrinking=true
Wenn Sie AGP 9.0.0 oder eine neuere Version verwenden, müssen Sie android.r8.optimizedResourceShrinking=true nicht festlegen. Die optimierte Ressourcenverkleinerung wird automatisch angewendet, wenn isShrinkResources = true in Ihrer Build-Konfiguration aktiviert ist.
R8-Optimierungseinstellungen prüfen und konfigurieren
Damit R8 seine vollständigen Optimierungsfunktionen nutzen kann, entfernen Sie die folgende Zeile aus der gradle.properties-Datei Ihres Projekts, falls sie vorhanden ist:
android.enableR8.fullMode=false # Remove this line from your codebase.
Wenn Sie die App-Optimierung aktivieren, sind Stacktraces schwer zu verstehen, insbesondere wenn R8 Klassen- oder Methodennamen umbenennt. Informationen dazu, wie Sie Stacktraces erhalten, die Ihrem Quellcode entsprechen, finden Sie unter Original-Stacktrace wiederherstellen.
Wenn R8 aktiviert ist, sollten Sie auch Startprofile erstellen, um die Startleistung noch weiter zu verbessern.
Wenn Sie die App-Optimierung aktivieren und dadurch Fehler auftreten, können Sie Folgendes versuchen:
- Behalteregeln hinzufügen, um bestimmten Code unverändert zu lassen.
- Optimierungen schrittweise vornehmen:
- Aktualisieren Sie Ihren Code, um Bibliotheken zu verwenden, die sich besser für die Optimierung eignen.
Wenn Sie die Build-Geschwindigkeit optimieren möchten, finden Sie unter Konfigurieren der Ausführung von R8 Informationen zum Konfigurieren von R8 basierend auf Ihrer Umgebung.
Verhaltensänderungen bei AGP- und R8-Versionen
In der folgenden Tabelle sind die wichtigsten Funktionen aufgeführt, die in verschiedenen Versionen des Android-Gradle-Plug-ins (AGP) und des R8-Compilers eingeführt wurden.
| AGP-Version | Eingeführte Funktionen |
|---|---|
| 9.0 |
Optimierte Ressourcenverkleinerung:Standardmäßig aktiviert (mit android.r8.optimizedResourceShrinking steuerbar). Die optimierte Ressourcenverkleinerung hilft, die Ressourcenverkleinerung in die Codeoptimierungs-Pipeline zu integrieren, was zu kleineren und schnelleren Apps führt. Durch die gleichzeitige Optimierung von Code- und Ressourcenreferenzen werden Ressourcen identifiziert und entfernt, auf die ausschließlich von nicht verwendetem Code verwiesen wird. Das ist eine erhebliche Verbesserung gegenüber den bisherigen separaten Optimierungsprozessen.Das ist besonders nützlich für Apps, die erhebliche Ressourcen und Code über verschiedene Formfaktor-Vertikalen hinweg gemeinsam nutzen. Hier sind Verbesserungen der App-Größe von über 50% möglich. Die resultierende Größenreduzierung führt zu kleineren Downloads, schnelleren Installationen und einer besseren Nutzererfahrung mit schnellerem Start, verbesserter Darstellung und weniger ANR-Fehlern. Filtern von Bibliotheksregeln:Die Unterstützung für globale Optionen (z. B. -dontobfuscate) in Regeln für Bibliotheksnutzer wurde eingestellt und Apps filtern sie heraus. Weitere Informationen finden Sie unter Globale Optionen hinzufügen.Kotlin-Nullprüfungen:Standardmäßig optimiert (mit -processkotlinnullchecks gesteuert). In dieser Version wurden auch erhebliche Verbesserungen bei der Build-Geschwindigkeit eingeführt. Weitere Informationen finden Sie unter Globale Optionen für zusätzliche Optimierung.Bestimmte Pakete optimieren:Mit packageScope können Sie bestimmte Pakete optimieren. Dies ist eine experimentelle Funktion. Weitere Informationen finden Sie unter Angegebene Pakete mit packageScope optimieren.Standardmäßig optimiert:Die Unterstützung für getDefaultProguardFile("proguard-android.txt") wurde eingestellt, da sie -dontoptimize enthält, was vermieden werden sollte. Verwenden Sie stattdessen "proguard-android-optimize.txt". Wenn Sie die Optimierung in Ihrer App global deaktivieren müssen, fügen Sie das Flag manuell in eine ProGuard-Datei ein.
|
| 8.12 |
Verkleinern von Ressourcen:Erste Unterstützung hinzugefügt (standardmäßig deaktiviert). Aktivieren Sie die Verwendung von isShrinkResources. Die Ressourcenreduzierung funktioniert in Verbindung mit R8, um nicht verwendete Ressourcen effektiv zu identifizieren und zu entfernen.Logcat-Retracing:Unterstützung für automatisches Retracing im Logcat-Fenster von Android Studio. |
| 8.6 |
Verbessertes Retracing:Dateiname und Zeilennummer werden standardmäßig für alle minSdk-Ebenen zurückverfolgt (zuvor war minSdk 26+ in Version 8.2 erforderlich).Durch die Aktualisierung von R8 wird dafür gesorgt, dass Stacktraces aus verschleierten Builds leicht und deutlich lesbar sind. In dieser Version wurde die Zuordnung von Zeilennummern und Quelldateien verbessert. Dadurch können Tools wie Logcat in Android Studio Abstürze leichter automatisch zum ursprünglichen Quellcode zurückverfolgen. |
| 8.0 |
Standardmäßig vollständiger Modus:Der vollständige R8-Modus bietet eine deutlich leistungsstärkere Optimierung. Dieser Parameter ist standardmäßig aktiviert. Sie können die Funktion über android.enableR8.fullMode=false deaktivieren.
|
| 7 |
Vollständiger Modus verfügbar:Als Opt-in-Funktion mit android.enableR8.fullMode=true eingeführt. Im vollständigen Modus werden leistungsfähigere Optimierungen angewendet, indem strengere Annahmen darüber getroffen werden, wie Ihr Code Reflexion und andere dynamische Funktionen verwendet. Dadurch wird die App-Größe reduziert und die Leistung verbessert. Möglicherweise sind jedoch zusätzliche Keep-Regeln erforderlich, um zu verhindern, dass notwendiger Code entfernt wird.
|