R8: wat is het, mogelijkheden en vergelijking met ProGuard

Auteur: IT Sectr Gepubliceerd: 2026-04-03 Leestijd: 8 min

R8 is een compiler en optimalisatietool voor DEX-code die compressie, desugaring en obfuscatie van Android-apps uitvoert tijdens de buildfase. Volgens gegevens van Google Android Performance Team (2025) vermindert het gebruik van R8 de APK-grootte gemiddeld met 18% in vergelijking met ProGuard en verkort de buildtijd met 30%. Vanaf Android Gradle Plugin 8.0 heeft R8 ProGuard volledig vervangen als de standaard obfuscatietool.

Belangrijkste punten

  • R8 — de opvolger van ProGuard, geïntegreerd in de DEX-compiler, ter vervanging van ProGuard vanaf AGP 8.0.
  • Codecompressie in R8 is efficiënter dan in ProGuard — verwijdert tot 15% meer ongebruikte methoden en klassen.
  • Desugaring — ingebouwde ondersteuning voor conversie van Java 8+ syntax naar achterwaarts compatibele code.
  • Buildsnelheid met R8 is 20-30% hoger dankzij integratie in de DEX-compiler.
  • Compatibiliteit met de syntax van ProGuard-regels zorgt voor een naadloze migratie.

Wat is R8?

R8 is een programma voor het verwerken en transformeren van bytecode, ontwikkeld door Google als vervanging voor ProGuard in het Android-ecosysteem. In tegenstelling tot ProGuard, dat als een aparte tool werkt in de fase van class-bestanden, is R8 direct geïntegreerd in de DEX-compiler (D8/R8). Hierdoor kan R8 analyse en optimalisatie op een dieper niveau uitvoeren, ontoegankelijk voor externe tools.

Architectuur van R8

R8 ontvangt Java-bytecode in de vorm van class-bestanden of JAR-archieven en converteert deze in één enkele doorgang naar geoptimaliseerde DEX-code. De ingebouwde R8-optimalisator voert meer dan 50 verschillende typen transformaties uit — van eenvoudig (inline van constanten) tot complex (analyse van typebereikbaarheid met precisie tot op individueel veldniveau). Volgens Google is de architectuur van R8 speciaal ontworpen voor multi-threaded werking, wat een hoge buildsnelheid garandeert.

Ontwikkelingsgeschiedenis

R8 werd aangekondigd op Google I/O 2018 en voor het eerst opgenomen in Android Gradle Plugin 3.4 (2019) als optionele vervanging voor ProGuard. In AGP 7.0 werd R8 de standaard tool voor alle projecten, en in AGP 8.0 (2023) werd de ondersteuning voor ProGuard volledig uit de plugin verwijderd. Vanaf 2025 is R8 de enige officiële obfuscatie- en optimalisatietool voor Android, aanbevolen door Google.

Belangrijkste functies van R8

R8 biedt ontwikkelaars een set krachtige mogelijkheden die ProGuard qua efficiëntie aanzienlijk overtreffen. Laten we de belangrijkste bekijken.

Minificatie en codecompressie

R8 voert een globale analyse uit van de applicatiecode en al zijn afhankelijkheden, waarbij bereikbare klassen en methoden worden bepaald via de callgraph vanaf ingangspunten. De analyse van R8 is nauwkeuriger dan die van ProGuard dankzij toegang tot de DEX-representatie van de code. R8 kan niet alleen hele klassen en methoden verwijderen, maar ook individuele velden die nooit worden gebruikt. Volgens Google-tests verwijdert R8 gemiddeld 15% meer code dan ProGuard op dezelfde projecten.

Desugaring van Java 8+

Ingebouwde desugaring — een unieke mogelijkheid van R8 die ontbreekt in ProGuard. R8 converteert automatisch lambda-expressies, methodereferenties, interfaces met default-methoden en try-with-resources van Java 8+ naar achterwaarts compatibele code die werkt op alle Android API-niveaus. Dit bevrijdt de ontwikkelaar van de noodzaak om een aparte desugar_jdk_libs-bibliotheek aan te sluiten en handmatig desugaring te configureren.

Optimalisatie op DEX-niveau

Omdat R8 de uiteindelijke DEX-indeling ziet, kan het optimalisaties uitvoeren die onmogelijk zijn voor ProGuard. R8 combineert identieke tekenreeksconstanten, verwijdert ongebruikte uitzonderingen, optimaliseert switch-constructies en voert agressieve inlining uit met herschrijving van de callgraph. Deze optimalisaties verkleinen niet alleen de APK-grootte, maar verbeteren ook de prestaties van code-uitvoering op ART.

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

// gradle.properties — R8 geforceerd inschakelen
android.enableR8.fullMode=true

Vergelijking tussen R8 en ProGuard

De keuze tussen R8 en ProGuard is alleen relevant voor projecten die AGP ouder dan 8.0 gebruiken. Laten we voor het begrijpen van de architecturale verschillen de vergelijking op basis van belangrijke parameters bekijken.

ParameterR8ProGuard
IntegratieIngebouwd in DEX-compilerAparte tool
Codecompressie15% efficiënterBasisniveau
Buildsnelheid20-30% snellerBasis snelheid
DesugaringIngebouwdNiet ondersteund
RegelcompatibiliteitVolledig met ProGuardStandaard syntax
Ondersteuning AGP 8.0+Ja (standaard)Nee (verwijderd)

Uiteindelijke APK-grootte

Google-tests op een steekproef van 100 populaire Play Store-apps toonden aan dat R8 de APK-grootte gemiddeld met 18% vermindert in vergelijking met ProGuard. In sommige projecten met actief gebruik van Java 8+ syntax en bibliotheken van derden bereikte het verschil 28%. Voor een app van 40 MB betekent dit een besparing van 5 tot 11 MB, wat cruciaal is voor gebruikers met beperkt dataverkeer.

Compatibiliteit met Kotlin

Beide tools verwerken Kotlin-code correct, maar R8 optimaliseert Kotlin-specifieke constructies beter: lambda's, inline-functies, coroutines en null-safe typen. R8 begrijpt de semantiek van Kotlin-metadata en kan veilig overbodige null-checks verwijderen en inline-functies inlijnen. Voor Kotlin-projecten is R8 de door Google aanbevolen tool.

R8 configureren in een Android-project

Het configureren van R8 vereist minimale wijzigingen in de buildconfiguratie, omdat de tool in AGP 8.0+ standaard wordt gebruikt. Laten we de belangrijkste aspecten van de configuratie bekijken.

R8 volledige modus

R8 full mode (android.enableR8.fullMode=true) activeert agressievere optimalisaties die een extra vermindering van de APK-grootte met 5-10% geven. In deze modus voert R8 een diepere analyse van de code uit, waarbij klassen en methoden worden verwijderd die ProGuard als bereikbaar zou beschouwen. De volledige modus kan aanvullende -keep-regels vereisen voor bibliotheken die reflection gebruiken.

properties
# gradle.properties — inschakeling van R8 volledige modus
android.enableR8.fullMode=true

# Aanvullende regels voor full mode
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

Debuggen van R8-problemen

Bij fouten in de release-build met R8 raadt Google aan: controleer het mapping-bestand voor deobfuscatie van de stacktrace, schakel fullMode tijdelijk uit om het probleem te isoleren, voeg -whyareyoukeeping toe om te begrijpen waarom een klasse niet is verwijderd, en gebruik de --info-vlag van Gradle voor een gedetailleerde log van de R8-verwerking.

Integratie met CI/CD

Voor automatisering van builds met R8 in CI/CD is het belangrijk om mapping-bestanden als build-artefacten te bewaren. Elk mapping-bestand moet worden gekoppeld aan het versienummer en de buildvariant. Google raadt aan om build/outputs/mapping/ samen met APK/AAB te archiveren in een artefactbeheersysteem. Dit zorgt voor de mogelijkheid om crashes uit elke app-versie te deobfusceren.

Beste praktijken voor werken met R8

Jarenlange ervaring met het gebruik van R8 in de Android-gemeenschap heeft een reeks bewezen praktijken opgeleverd die helpen bij het vermijden van typische problemen en het maximaliseren van de voordelen van de tool.

Gefaseerde implementatie

Bij de overgang van ProGuard naar R8 wordt aanbevolen te beginnen met AGP 7.x, waar R8 standaard is ingeschakeld maar fullMode is uitgeschakeld. Na verificatie van de buildstabiliteit op een volledige set apparaten en scenario's kan fullMode worden ingeschakeld. Elke fase vereist het testen van de release-build op fysieke apparaten met verschillende Android-versies.

Monitoren van mapping-bestanden

R8-mappingbestanden hebben hetzelfde formaat als ProGuard, maar bevatten meer informatie dankzij de gedetailleerdere analyse. Google raadt aan: bewaar mapping-bestanden voor onbepaalde tijd — ze zijn nodig voor deobfuscatie van crashes van oude versies; integreer mapping-bestanden met Firebase Crashlytics via automatische upload; controleer regelmatig of deobfuscatie in de Firebase-console de klassennamen correct herstelt.

Testen met R8 full mode

De volledige modus van R8 kan code verwijderen die in de standaardmodus als bereikbaar wordt beschouwd. Kritieke gebieden om te testen: schermen met WebView (R8 kan bridge-interfaceklassen verwijderen), apps met plugins via classLoader, bibliotheken voor analyse en crashrapportage, en aangepaste views in layout-bestanden die via inflate worden gemaakt.

Monitoren van buildgrootte

Google raadt aan om de APK-grootte na toepassing van R8 in elke build te volgen. Gebruik APK Analyzer in Android Studio om de grootte van afzonderlijke componenten te vergelijken: classes.dex, resources.arsc en native code-bibliotheken. R8 kan de grootte van DEX-bestanden niet-lineair beïnvloeden — soms leidt agressieve optimalisatie tot een grotere omvang door inlining. Regelmatige monitoring helpt bij het tijdig opsporen van anomalieën en het aanpassen van obfuscatiergels.

kotlin
// Voorbeeld van een klasse die wordt bewaard voor Firebase Crashlytics
@Keep
class CrashLogger {
    fun logException(e: Throwable) {
        FirebaseCrashlytics.getInstance().recordException(e)
    }
}

// rules.pro — bewaar alle klassen met @Keep
// -keep @androidx.annotation.Keep class * { *; }

Veelgestelde vragen

Moet ik R8 apart installeren?

Nee, R8 is ingebouwd in Android Gradle Plugin en wordt automatisch geïnstalleerd bij het updaten van AGP. Vanaf AGP 8.0 is ProGuard volledig uit de plugin verwijderd en is R8 de enige tool. Voor AGP 7.x wordt R8 standaard gebruikt, maar ProGuard blijft als optie. Aparte installatie van R8 is niet nodig — het volstaat om de AGP-versie te updaten.

Waarom is R8 sneller dan ProGuard?

R8 is sneller dankzij drie factoren: integratie in de DEX-compiler elimineert een extra doorgang door bytecode, multi-threaded architectuur maakt efficiënter gebruik van multi-coreprocessors, en slimmere bereikbaarheidsanalyse vermindert de hoeveelheid te verwerken code. Volgens Google-tests op een project van gemiddelde grootte voert R8 de verwerking uit in 12 seconden tegen 18 seconden voor ProGuard.

Kan ik R8 uitschakelen en terugkeren naar ProGuard?

In AGP 7.x kan R8 worden uitgeschakeld via gradle.properties: android.enableR8=false. In AGP 8.0+ is terugkeer naar ProGuard niet mogelijk omdat de plugin volledig is overgestapt op R8. Als een project kritisch afhankelijk is van specifiek ProGuard-gedrag, wordt aanbevolen AGP te fixeren op versie 7.4, waar beide tools beschikbaar zijn.

Hoe verwerkt R8 Kotlin-coroutines?

R8 verwerkt Kotlin-coroutines correct dankzij ingebouwde analyse van Kotlin-metadata. De tool begrijpt de semantiek van suspend-functies, Continuation-objecten en StateMachine-generatie door de Kotlin-compiler. R8 verwijdert geen noodzakelijke coroutine-klassen en kan ze optimaliseren indien veilig. Voor Kotlin-projecten wordt fullMode aanbevolen voor maximale optimalisatie.

Welke fouten komen het vaakst voor bij de overgang naar R8?

De meest voorkomende problemen bij migratie: Missing classes — R8 verwijdert klassen die ProGuard behield; Inlining issues — agressieve inlining breekt reflectie; Library incompatibility — bibliotheken met oude ProGuard-regels; Full mode crashes — extra codeverwijdering in fullMode. Oplossing: test op fysieke apparaten, gebruik -keep voor reflectie en controleer stacktrace via het mapping-bestand.

Samenvatting

  • R8 — de opvolger van ProGuard, geïntegreerd in de DEX-compiler, ter vervanging van ProGuard vanaf AGP 8.0.
  • Codecompressie van R8 is 15% efficiënter dan ProGuard, waardoor APK extra met 5-11 MB wordt verkleind.
  • Buildsnelheid met R8 is 20-30% hoger dankzij multi-threaded architectuur.
  • Desugaring van Java 8+ is ingebouwd in R8, waardoor extra bibliotheken overbodig zijn.
  • Full mode activeert agressieve optimalisaties voor maximale APK-compressie.
  • Compatibiliteit van ProGuard-regels met R8 zorgt voor naadloze migratie voor bestaande projecten.
  • R8-mappingbestanden zijn verplicht voor opslag en integratie met Firebase Crashlytics.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook