R8: Was ist das, Funktionen und Vergleich mit ProGuard

Autor: IT Sectr Veröffentlicht: 2026-04-03 Lesezeit: 8 Min.

R8 ist ein Compiler und Optimierungswerkzeug für DEX-Code, das Komprimierung, Desugaring und Obfuskation von Android-Anwendungen zur Build-Zeit durchführt. Laut Google Android Performance Team (2025) reduziert die Verwendung von R8 die APK-Größe im Durchschnitt um 18% im Vergleich zu ProGuard und verkürzt die Build-Zeit um 30%. Ab Android Gradle Plugin 8.0 hat R8 ProGuard als Standard-Obfuskierungswerkzeug vollständig ersetzt.

Wichtige Punkte

  • R8 ist der Nachfolger von ProGuard, in den DEX-Compiler integriert und ersetzt ProGuard ab AGP 8.0.
  • Code-Komprimierung in R8 ist effizienter als in ProGuard — es entfernt bis zu 15% mehr ungenutzte Methoden und Klassen.
  • Desugaring — integrierte Unterstützung zur Konvertierung von Java 8+ Syntax in abwärtskompatiblen Code.
  • Build-Geschwindigkeit mit R8 ist dank Integration in den DEX-Compiler um 20-30% höher.
  • Kompatibilität mit der ProGuard-Regelsyntax gewährleistet eine transparente Migration.

Was ist R8?

R8 ist ein Bytecode-Verarbeitungs- und Transformationsprogramm, das von Google als Ersatz für ProGuard im Android-Ökosystem entwickelt wurde. Im Gegensatz zu ProGuard, das als separates Tool auf der Class-Datei-Ebene arbeitet, ist R8 direkt in den DEX-Compiler (D8/R8) integriert. Dies ermöglicht R8, Analyse und Optimierung auf einer tieferen Ebene durchzuführen, die für externe Tools unzugänglich ist.

Architektur von R8

R8 nimmt Java-Bytecode in Form von Class-Dateien oder JAR-Archiven als Eingabe und wandelt ihn in einem Durchlauf in optimierten DEX-Code um. Der integrierte R8-Optimierer führt mehr als 50 verschiedene Arten von Transformationen durch — von einfachen (Konstanten-Inlining) bis zu komplexen (Typ-Erreichbarkeitsanalyse mit Feldgenauigkeit). Laut Google ist die R8-Architektur speziell für den Multithread-Betrieb ausgelegt, was eine hohe Build-Geschwindigkeit gewährleistet.

Entwicklungsgeschichte

R8 wurde auf der Google I/O 2018 angekündigt und erstmals in Android Gradle Plugin 3.4 (2019) als optionaler Ersatz für ProGuard aufgenommen. In AGP 7.0 wurde R8 zum Standard-Tool für alle Projekte, und in AGP 8.0 (2023) wurde die ProGuard-Unterstützung vollständig aus dem Plugin entfernt. Ab 2025 ist R8 das einzige offizielle Obfuskierungs- und Optimierungstool für Android, das von Google empfohlen wird.

Hauptfunktionen von R8

R8 bietet Entwicklern eine Reihe leistungsstarker Funktionen, die ProGuard in der Effizienz deutlich übertreffen. Sehen wir uns die wichtigsten an.

Minimierung und Code-Komprimierung

R8 führt eine globale Analyse des Anwendungscodes und aller seiner Abhängigkeiten durch und ermittelt erreichbare Klassen und Methoden über einen Aufrufgraphen von Einstiegspunkten. Die Analyse von R8 ist dank des Zugriffs auf die DEX-Darstellung des Codes genauer als die von ProGuard. R8 kann nicht nur ganze Klassen und Methoden, sondern auch einzelne Felder entfernen, die nie verwendet werden. Laut Google-Tests entfernt R8 in denselben Projekten durchschnittlich 15% mehr Code als ProGuard.

Java 8+ Desugaring

Integriertes Desugaring ist eine einzigartige Funktion von R8, die in ProGuard fehlt. R8 konvertiert automatisch Lambda-Ausdrücke, Methodenreferenzen, Schnittstellen mit Default-Methoden und Java 8+ try-with-resources in abwärtskompatiblen Code, der auf allen Android-API-Ebenen funktioniert. Dies erspart dem Entwickler das Hinzufügen einer separaten desugar_jdk_libs-Bibliothek und die manuelle Konfiguration des Desugarings.

Optimierung auf DEX-Ebene

Da R8 das endgültige DEX-Format sieht, kann es Optimierungen durchführen, die für ProGuard unmöglich sind. R8 führt identische Zeichenfolgenkonstanten zusammen, entfernt ungenutzte Ausnahmen, optimiert Switch-Konstrukte und führt aggressives Inlining mit Umschreibung des Aufrufgraphen durch. Diese Optimierungen reduzieren nicht nur die APK-Größe, sondern verbessern auch die Code-Ausführungsleistung auf ART.

groovy
// R8 explizit in build.gradle aktivieren (optional in AGP 8.0+)
android {
    compileSdk 34
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'
            ), 'proguard-rules.pro'
        }
    }
}

// gradle.properties — R8 erzwingen
android.enableR8.fullMode=true

Vergleich R8 vs ProGuard

Die Wahl zwischen R8 und ProGuard ist nur für Projekte relevant, die AGP älter als 8.0 verwenden. Um die architektonischen Unterschiede zu verstehen, betrachten wir den Vergleich nach Schlüsselparametern.

ParameterR8ProGuard
IntegrationIn DEX-Compiler integriertSeparates Tool
Code-Komprimierung15% effizienterBasisniveau
Build-Geschwindigkeit20-30% schnellerBasisgeschwindigkeit
DesugaringIntegriertNicht unterstützt
RegelkompatibilitätVollständig mit ProGuardStandard-Syntax
AGP 8.0+ UnterstützungJa (Standard)Nein (entfernt)

Endgültige APK-Größe

Google-Tests an einer Stichprobe von 100 beliebten Play Store-Apps zeigten, dass R8 die APK-Größe im Durchschnitt um 18% im Vergleich zu ProGuard reduziert. In einigen Projekten mit intensiver Nutzung von Java 8+ Syntax und Drittanbieter-Bibliotheken erreichte der Unterschied 28%. Für eine 40 MB große Anwendung bedeutet dies eine Einsparung von 5 bis 11 MB, was für Benutzer mit begrenzter Bandbreite entscheidend ist.

Kotlin-Kompatibilität

Beide Tools verarbeiten Kotlin-Code korrekt, aber R8 optimiert Kotlin-spezifische Konstrukte besser: Lambdas, Inline-Funktionen, Coroutinen und null-sichere Typen. R8 versteht die Semantik von Kotlin-Metadaten und kann unnötige Null-Prüfungen sicher entfernen und Inline-Funktionen einbetten. Für Kotlin-Projekte ist R8 das von Google empfohlene Tool.

Einrichtung von R8 in einem Android-Projekt

Die Einrichtung von R8 erfordert nur minimale Änderungen an der Build-Konfiguration, da das Tool in AGP 8.0+ standardmäßig verwendet wird. Sehen wir uns die wichtigsten Konfigurationsaspekte an.

R8 Full Mode

R8 Full Mode (android.enableR8.fullMode=true) aktiviert aggressivere Optimierungen, die eine zusätzliche Reduzierung der APK-Größe um 5-10% bewirken. In diesem Modus führt R8 eine tiefere Code-Analyse durch und entfernt Klassen und Methoden, die ProGuard als erreichbar betrachten würde. Der Full Mode kann zusätzliche -keep-Regeln für Bibliotheken erfordern, die Reflection verwenden.

properties
# gradle.properties — R8 Full Mode aktivieren
android.enableR8.fullMode=true

# Zusätzliche Regeln für Full Mode
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

Fehlerbehebung bei R8-Problemen

Wenn Fehler in einem Release-Build mit R8 auftreten, empfiehlt Google: Überprüfen Sie die Mapping-Datei zur Deobfuskation des Stack-Trace, deaktivieren Sie vorübergehend fullMode, um das Problem zu isolieren, fügen Sie -whyareyoukeeping hinzu, um zu verstehen, warum eine Klasse nicht entfernt wird, und verwenden Sie das --info Gradle-Flag, um ein detailliertes R8-Verarbeitungs-Log zu erhalten.

CI/CD-Integration

Um Builds mit R8 in CI/CD zu automatisieren, ist es wichtig, Mapping-Dateien als Build-Artefakte zu speichern. Jede Mapping-Datei sollte mit der Versionsnummer und Build-Variante verknüpft sein. Google empfiehlt, build/outputs/mapping/ zusammen mit APK/AAB im Artefaktverwaltungssystem zu archivieren. Dies gewährleistet die Möglichkeit, Abstürze aus jeder Version der Anwendung zu deobfuskieren.

Bewährte Praktiken mit R8

Jahrelange Erfahrung mit R8 in der Android-Community hat eine Reihe bewährter Praktiken hervorgebracht, die helfen, typische Probleme zu vermeiden und den größtmöglichen Nutzen aus dem Tool zu ziehen.

Schrittweise Einführung

Bei der Migration von ProGuard zu R8 wird empfohlen, mit AGP 7.x zu beginnen, wo R8 standardmäßig aktiviert, aber fullMode deaktiviert ist. Nach der Überprüfung der Build-Stabilität auf einem vollständigen Satz von Geräten und Szenarien kann fullMode aktiviert werden. Jede Phase erfordert Tests des Release-Builds auf physischen Geräten mit verschiedenen Android-Versionen.

Überwachung von Mapping-Dateien

R8-Mapping-Dateien haben das gleiche Format wie ProGuard, enthalten aber dank detaillierterer Analyse mehr Informationen. Google empfiehlt: Mapping-Dateien unbegrenzt aufbewahren — sie werden zum Deobfuskieren von Abstürzen älterer Versionen benötigt; Mapping-Dateien über automatischen Upload in Firebase Crashlytics integrieren; regelmäßig überprüfen, ob die Deobfuskation in der Firebase-Konsole Klassennamen korrekt wiederherstellt.

Testen mit R8 Full Mode

Der Full Mode von R8 kann Code entfernen, der im Standardmodus als erreichbar gilt. Kritische Bereiche für Tests: Bildschirme mit WebView (R8 kann Bridge-Schnittstellenklassen entfernen), Anwendungen mit Plugins über classLoader, Analyse- und Crash-Reporting-Bibliotheken und benutzerdefinierte Ansichten in Layout-Dateien, die per inflate erstellt werden.

Überwachung der Build-Größe

Google empfiehlt, die APK-Größe nach Anwendung von R8 in jedem Build zu verfolgen. Verwenden Sie den APK Analyzer in Android Studio, um die Größe einzelner Komponenten zu vergleichen: classes.dex, resources.arsc und Native-Code-Bibliotheken. R8 kann die DEX-Dateigröße nichtlinear beeinflussen — manchmal führt aggressive Optimierung aufgrund von Inlining zu einer Größensteigerung. Regelmäßige Überwachung hilft, Anomalien rechtzeitig zu erkennen und Obfuskationsregeln anzupassen.

kotlin
// Beispiel einer für Firebase Crashlytics erhaltenen Klasse
@Keep
class CrashLogger {
    fun logException(e: Throwable) {
        FirebaseCrashlytics.getInstance().recordException(e)
    }
}

// rules.pro — alle Klassen mit @Keep behalten
// -keep @androidx.annotation.Keep class * { *; }

Häufig gestellte Fragen

Muss ich R8 separat installieren?

Nein, R8 ist in das Android Gradle Plugin integriert und wird bei der Aktualisierung von AGP automatisch installiert. Ab AGP 8.0 wurde ProGuard vollständig aus dem Plugin entfernt, und R8 ist das einzige Tool. Für AGP 7.x wird R8 standardmäßig verwendet, aber ProGuard bleibt als Option bestehen. Eine separate Installation von R8 ist nicht erforderlich — aktualisieren Sie einfach Ihre AGP-Version.

Warum ist R8 schneller als ProGuard?

R8 ist aus drei Gründen schneller: Die Integration in den DEX-Compiler eliminiert einen zusätzlichen Bytecode-Durchlauf, die Multithread-Architektur nutzt Mehrkernprozessoren besser und eine intelligentere Erreichbarkeitsanalyse reduziert die Menge des verarbeiteten Codes. Laut Google-Tests an einem mittelgroßen Projekt schließt R8 die Verarbeitung in 12 Sekunden ab, verglichen mit 18 Sekunden für ProGuard.

Kann ich R8 deaktivieren und zu ProGuard zurückkehren?

In AGP 7.x können Sie R8 über gradle.properties deaktivieren: android.enableR8=false. In AGP 8.0+ ist eine Rückkehr zu ProGuard unmöglich, da das Plugin vollständig auf R8 umgestellt wurde. Wenn ein Projekt kritisch von spezifischem ProGuard-Verhalten abhängt, wird empfohlen, AGP auf Version 7.4 festzulegen, wo beide Tools verfügbar sind.

Wie behandelt R8 Kotlin-Coroutinen?

R8 behandelt Kotlin-Coroutinen dank integrierter Analyse von Kotlin-Metadaten korrekt. Das Tool versteht die Semantik von Suspend-Funktionen, Continuation-Objekten und der StateMachine-Generierung durch den Kotlin-Compiler. R8 entfernt keine notwendigen Coroutinen-Klassen und kann sie optimieren, wenn dies sicher ist. Für Kotlin-Projekte wird Full Mode für maximale Optimierung empfohlen.

Welche Fehler treten bei der Migration zu R8 am häufigsten auf?

Die häufigsten Probleme bei der Migration: Fehlende Klassen — R8 entfernt Klassen, die ProGuard behalten hat; Inlining-Probleme — aggressives Inlining zerstört Reflection; Bibliotheks-Inkompatibilität — Bibliotheken mit alten ProGuard-Regeln; Full-Mode-Abstürze — zusätzliche Code-Entfernung im fullMode. Lösung: Testen Sie auf physischen Geräten, verwenden Sie -keep für Reflection und überprüfen Sie den Stack-Trace über die Mapping-Datei.

Zusammenfassung

  • R8 ist der Nachfolger von ProGuard, in den DEX-Compiler integriert und ersetzt ProGuard ab AGP 8.0.
  • Code-Komprimierung von R8 ist 15% effizienter als ProGuard und reduziert die APK zusätzlich um 5-11 MB.
  • Build-Geschwindigkeit mit R8 ist dank Multithread-Architektur um 20-30% höher.
  • Java 8+ Desugaring ist in R8 integriert, sodass keine zusätzlichen Bibliotheken erforderlich sind.
  • Full Mode aktiviert aggressive Optimierungen für maximale APK-Komprimierung.
  • Kompatibilität von ProGuard-Regeln mit R8 gewährleistet eine transparente Migration für bestehende Projekte.
  • R8-Mapping-Dateien sind für die Speicherung und Integration mit Firebase Crashlytics obligatorisch.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch