Veranstaltungen und Programme

R8 zum Verkleinern, Optimieren und Beschleunigen Ihrer App verwenden

Lesezeit: 5 Minuten
Ben Weiss
Developer Relations Engineer

R8 zum Verkleinern, Optimieren und Beschleunigen Ihrer App verwenden

Willkommen zum ersten Tag der Android Performance Spotlight Week!

Wir beginnen mit der wichtigsten Änderung, die Sie mit wenig Aufwand vornehmen können, um die Leistung Ihrer App zu verbessern: Aktivieren Sie den R8-Optimierer im Vollmodus.

Wahrscheinlich kennen Sie R8 bereits als Tool zum Verkleinern Ihrer App. Damit lassen sich nicht verwendeter Code und nicht verwendete Ressourcen entfernen, wodurch die Größe Ihrer App reduziert wird. Seine wahre Stärke, die g-R8, liegt jedoch in seiner Funktion als Optimizer.

Wenn Sie den vollständigen Modus aktivieren und Optimierungen zulassen, führt R8 umfassende Optimierungen des gesamten Programms durch und schreibt Ihren Code so um, dass er grundsätzlich effizienter ist. Das ist nicht nur eine kleine Änderung.

Nachdem Sie diesen Artikel gelesen haben, können Sie sich auf YouTube die Einführung in die Performance Spotlight Week zum R8-Optimierer ansehen.

So verbessert R8 die Leistung Ihrer App

image.png

Sehen wir uns die wichtigsten Schritte an, die der R8-Optimierer zur Verbesserung der App-Leistung unternimmt.

Tree Shaking ist der wichtigste Schritt, um die App-Größe zu reduzieren. In dieser Phase entfernt der R8-Optimizer ungenutzten Code aus Bibliotheken, von denen Ihre App abhängt, sowie Dead Code aus Ihrer eigenen Codebasis.

Beim Methoden-Inlining wird ein Methodenaufruf durch den tatsächlichen Code ersetzt, was die Laufzeitleistung verbessert.

Klassenzusammenführung und andere Strategien werden angewendet, um den Code kompakter zu machen. Alle Ihre schönen Abstraktionen wie Schnittstellen und Klassenhierarchien spielen an dieser Stelle keine Rolle und werden wahrscheinlich entfernt.

Bei der Code-Minifizierung werden die Namen von Klassen, Feldern und Methoden in kürzere, bedeutungslose Namen geändert. Statt MyDataModel haben Sie dann möglicherweise eine Klasse namens a. Das führt zu den meisten Verwirrungen beim Lesen von Stacktraces aus einer R8-optimierten App. (In AGP 9.0 haben wir das verbessert.)

Ressourcenreduzierung verringert die Größe einer App weiter, indem ungenutzte Ressourcen wie XML-Dateien und Drawables entfernt werden.

Durch die Anwendung dieser Schritte verbessert der R8-Optimierer die App-Startzeiten, ermöglicht ein flüssigeres Rendern der Benutzeroberfläche mit weniger langsamen und eingefrorenen Frames und verbessert die allgemeine Nutzung von Ressourcen auf dem Gerät.

Fallstudie: Leistungsverbesserungen bei Reddit mit R8

Ein Beispiel für die Leistungsverbesserungen, die R8 bieten kann, finden Sie auf Reddit. Nachdem R8 im Vollmodus aktiviert wurde, konnte die Reddit-App für Android in verschiedenen Bereichen eine deutliche Leistungssteigerung verzeichnen.

image.png

Bildunterschrift: So hat R8 die App-Leistung von Reddit verbessert

Das Team stellte einen 40% schnelleren Kaltstart, eine 30% ige Reduzierung von „App antwortet nicht“-Fehlern (ANR), eine 25% ige Verbesserung beim Rendern von Frames und eine 14% ige Reduzierung der App-Größe fest.

Diese Verbesserungen sind entscheidend für die Nutzerzufriedenheit. Ein schnellerer Start bedeutet weniger Wartezeit und schnelleren Zugriff auf Inhalte. Weniger ANRs führen zu einer stabileren und zuverlässigeren App, was die Nutzerzufriedenheit steigert. Durch das flüssigere Rendern von Frames wird das Ruckeln der Benutzeroberfläche reduziert, sodass sich Scrollen und Animationen flüssig und reaktionsschnell anfühlen. Diese positiven technischen Auswirkungen waren auch deutlich in der Nutzerstimmung zu erkennen.

Weitere Informationen zu den Verbesserungen finden Sie in unserem Blog.

Nicht technische Nebenwirkungen der Verwendung von R8

Bei der Zusammenarbeit mit Partnern haben wir festgestellt, dass sich diese technischen Verbesserungen direkt auf die Nutzerzufriedenheit auswirken und sich in der Nutzerbindung, den Interaktionen und der Sitzungslänge widerspiegeln können. Auch die Wiederkehrrate, die anhand der aktiven Nutzer pro Tag, Woche oder Monat gemessen werden kann, hat sich durch die Verbesserungen der technischen Leistung positiv entwickelt. Wir haben beobachtet, dass die App-Bewertungen im Play Store mit der Einführung von R8 gestiegen sind. Wenn Sie diese Informationen mit Ihren Produktverantwortlichen, CTOs und Entscheidungsträgern teilen, kann die Leistung Ihrer App verbessert werden.

image.png

Nennen wir es also beim Namen: Die bewusste Leistungsoptimierung ist eine Tugend.

Anleitungen für eine leistungsstärkere App

Wir haben gehört, dass unsere Entwicklerleitfäden für R8 verbessert werden müssen. Also haben wir uns an die Arbeit gemacht. Die Entwicklerleitfäden für das R8-Optimierungstool sind jetzt viel praxisorientierter und bieten umfassende Anleitungen zum Aktivieren und Debuggen von R8.

Die Dokumentation enthält eine allgemeine Strategie für die Einführung und betont, wie wichtig es ist, optimierungsfreundliche Bibliotheken auszuwählen und die Funktionen von R8 schrittweise einzuführen, um die Stabilität zu gewährleisten. Mit diesem stufenweisen Ansatz können Sie die Vorteile von R8 sicher nutzen und erhalten gleichzeitig Unterstützung bei Problemen, die schwer zu debuggen sind.

Wir haben unsere Anleitung zu Keep-Regeln, dem primären Mechanismus zur Steuerung des R8-Optimierers, erheblich erweitert. Wir haben einen Abschnitt dazu eingefügt, was Keep-Regeln sind und wie Sie sie anwenden. Außerdem finden Sie dort Best Practices für das Erstellen und Verwalten von Keep-Regeln. Außerdem stellen wir praktische und umsetzbare Anwendungsfälle und Beispiele zur Verfügung, damit Sie verstehen, wie Sie verhindern können, dass R8 Code entfernt, der zur Laufzeit benötigt wird, z. B. Code, auf den über Reflection oder über die JNI-native Schnittstelle zugegriffen wird.

Die Dokumentation umfasst jetzt auch wichtige Folgeschritte und erweiterte Szenarien. Wir haben einen Abschnitt zum Testen und zur Fehlerbehebung hinzugefügt, damit Sie die Leistungssteigerungen überprüfen und potenzielle Probleme beheben können. Im Abschnitt Erweiterte Konfigurationen wird beschrieben, wie Sie bestimmte Build-Varianten ausrichten, anpassen, welche Ressourcen beibehalten oder entfernt werden, und spezielle Optimierungsanweisungen für Bibliotheksautoren bereitstellen, damit Sie ein optimiertes und R8-kompatibles Paket für andere Entwickler bereitstellen können.

Das volle Potenzial des R8‑Optimierungstools nutzen

Ab Version 8.0 des Android-Gradle-Plug-ins wird für den R8-Optimizer standardmäßig der „Full Mode“ verwendet. Wenn Ihr Projekt über viele Jahre hinweg entwickelt wurde, enthält es möglicherweise noch ein altes Flag zum Deaktivieren. Suchen Sie in Ihrer gradle.properties-Datei nach dieser Zeile und entfernen Sie sie.

android.enableR8.fullMode=false // delete this line to enable R8's full potential

Prüfen Sie nun, ob Sie R8 in der build.gradle.kts-Datei Ihrer App für die Release-Variante aktiviert haben. Sie wird aktiviert, indem Sie „isMinifyEnabled“ und „isShrinkResources“ auf „true“ setzen. Sie können in diesem Schritt auch Standard- und benutzerdefinierte Konfigurationsdateien übergeben.

  release {

   isMinifyEnabled = true

   isShrinkResources = true

   proguardFiles(

       getDefaultProguardFile("proguard-android-optimize.txt"),

       "keep-rules.pro"

   )

}

Fallstudie: Leistungsverbesserungen bei Disney+

Die Entwickler von Disney+ arbeiten an der App-Leistung und optimieren die Nutzerfreundlichkeit der App. Manchmal können selbst scheinbar kleine Änderungen einen großen Unterschied machen. Bei der Überprüfung der R8-Konfiguration stellte das Team fest, dass das Flag -dontoptimize verwendet wurde. Sie wurde durch eine Standardkonfigurationsdatei eingeführt, die auch heute noch in vielen Apps verwendet wird.

Nachdem das Disney+‑Team proguard-android.txt durch proguard-android-optimize.txt ersetzt hatte, konnte es die Leistung seiner App deutlich verbessern.

image.png

Nachdem eine neue Version der App mit dieser Änderung für Nutzer eingeführt wurde, konnte Disney+ einen 30% schnelleren App-Start und 25% weniger vom Nutzer wahrgenommene ANRs verzeichnen. 

Viele Apps verwenden heute noch die Datei proguard-android.txt, die das Flag dontoptimize enthält. Hier kommen unsere Tool-Verbesserungen ins Spiel.

Tooling-Support

Ab dem Android Studio Narwhal 3 Feature Drop wird eine Lint-Warnung angezeigt, wenn Sie proguard-android.txt verwenden. 

image.png

Ab AGP 9.0 wird die Datei nicht mehr unterstützt. Das bedeutet, dass Sie zu proguard-android-optimize.txt migrieren müssen.

Wir haben auch in neue Android Studio-Funktionen investiert, um das Debuggen von R8-optimiertem Code zu vereinfachen. Ab AGP 9.0 können Sie Stacktraces in Logcat von Android Studio für mit R8 verarbeitete Builds jetzt automatisch deobfuskieren. So können Sie die genaue Codezeile ermitteln, die ein Problem verursacht, auch in einer vollständig optimierten App. Das wird im morgigen Blogpost zu dieser Android Performance Spotlight Week genauer behandelt.

Nächste Schritte

Auf YouTube finden Sie eine Einführung in die Performance Spotlight Week zum R8-Optimierer.

📣 Nehmen Sie an der Performance Challenge teil!

Überzeugen Sie sich selbst von den Vorteilen.

Wir empfehlen Ihnen, den vollständigen R8-Modus für Ihre App noch heute zu aktivieren.

  1. Folgen Sie unserem Entwicklerleitfaden, um loszulegen: App-Optimierung aktivieren.
  2. Prüfen Sie, ob Sie noch proguard-android.txt verwenden, und ersetzen Sie es durch proguard-android-optimize.txt.
  3. Messen Sie dann die Auswirkungen. Spüren Sie nicht nur den Unterschied, sondern bestätigen Sie ihn. Messen Sie die Leistungssteigerungen, indem Sie den Code aus unserer  Macrobenchmark-Beispiel-App auf GitHub anpassen, um die Startzeiten vor und nach der Optimierung zu messen.

Wir sind zuversichtlich, dass sich die Leistung Ihrer App dadurch deutlich verbessern wird. Verwenden Sie #optimizationEnabled für alle Fragen zur Aktivierung oder Fehlerbehebung von R8. Wir helfen dir gerne weiter.

Fragen für die „Ask Android“-Sitzung am Freitag einreichen

Verwende den Social-Media-Tag #AskAndroid, um Fragen zur Leistung zu stellen. Wir werden Ihre Fragen im Laufe der Woche im Blick behalten und am Freitag, 21. November, in der Ask Android-Sitzung zum Thema Leistung einige davon beantworten. Morgen geht es weiter mit dem Debugging und der Fehlerbehebung. Beginnen Sie aber jetzt mit R8, um Ihre App auf den richtigen Weg zu bringen.

Verfasst von:

Weiterlesen