R8: ce este, caracteristici și comparație cu ProGuard

Autor: IT Sectr Publicat: 2026-04-03 Timp de citire: 8 min

R8 este un compilator și instrument de optimizare a codului DEX care efectuează compresie, desugaring și ofuscare a aplicațiilor Android în etapa de compilare. Conform datelor Google Android Performance Team (2025), utilizarea R8 reduce dimensiunea APK cu o medie de 18% comparativ cu ProGuard și scurtează timpul de compilare cu 30%. Începând cu Android Gradle Plugin 8.0, R8 a înlocuit complet ProGuard ca instrument standard de ofuscare.

Principalele puncte

  • R8 — succesorul ProGuard, integrat în compilatorul DEX, înlocuind ProGuard începând cu AGP 8.0.
  • Compresia codului în R8 este mai eficientă decât în ProGuard — elimină cu până la 15% mai multe metode și clase neutilizate.
  • Desugaring — suport încorporat pentru conversia sintaxei Java 8+ în cod compatibil retroactiv.
  • Viteza de compilare cu R8 este cu 20-30% mai mare datorită integrării în compilatorul DEX.
  • Compatibilitatea cu sintaxa regulilor ProGuard asigură o migrare transparentă.

Ce este R8?

R8 este un program de procesare și transformare a bytecodului, dezvoltat de Google ca înlocuitor pentru ProGuard în ecosistemul Android. Spre deosebire de ProGuard, care funcționează ca un instrument separat în etapa fișierelor class, R8 este integrat direct în compilatorul DEX (D8/R8). Acest lucru permite R8 să efectueze analiza și optimizarea la un nivel mai profund, inaccesibil instrumentelor externe.

Arhitectura R8

R8 primește la intrare bytecod Java în format fișiere class sau arhive JAR și îl transformă în cod DEX optimizat într-o singură trecere. Optimizatorul încorporat R8 execută peste 50 de tipuri diferite de transformări — de la simple (inline constante) la complexe (analiza accesibilității tipurilor cu precizie până la un câmp individual). Conform Google, arhitectura R8 a fost special concepută pentru a funcționa în mod multi-threading, ceea ce asigură o viteză ridicată de compilare.

Istoria dezvoltării

R8 a fost anunțat la Google I/O 2018 și inclus pentru prima dată în Android Gradle Plugin 3.4 (2019) ca înlocuitor opțional al ProGuard. În AGP 7.0, R8 a devenit instrumentul implicit pentru toate proiectele, iar în AGP 8.0 (2023) suportul pentru ProGuard a fost complet eliminat din plugin. În 2025, R8 este singurul instrument oficial de ofuscare și optimizare pentru Android, recomandat de Google.

Caracteristici cheie ale R8

R8 oferă dezvoltatorilor un set de capabilități puternice care depășesc semnificativ ProGuard în ceea ce privește eficiența. Să analizăm principalele.

Minificare și compresie a codului

R8 efectuează o analiză globală a codului aplicației și a tuturor dependențelor sale, determinând clasele și metodele accesibile prin graficul de apeluri de la punctele de intrare. Analiza R8 este mai precisă decât cea a ProGuard datorită accesului la reprezentarea codului în DEX. R8 poate elimina nu doar clase și metode întregi, ci și câmpuri individuale care nu sunt niciodată utilizate. Conform testelor Google, R8 elimină în medie cu 15% mai mult cod decât ProGuard pe aceleași proiecte.

Desugaring Java 8+

Desugaringul încorporat — o capacitate unică a R8 care lipsește în ProGuard. R8 transformă automat expresiile lambda, referințele la metode, interfețele cu metode default și try-with-resources Java 8+ în cod compatibil retroactiv care funcționează pe toate nivelurile API Android. Acest lucru eliberează dezvoltatorul de necesitatea de a conecta o bibliotecă separată desugar_jdk_libs și de a configura manual desugaringul.

Optimizare la nivel DEX

Deoarece R8 vede formatul final DEX, poate efectua optimizări imposibile pentru ProGuard. R8 combină constantele șir identice, elimină excepțiile neutilizate, optimizează construcțiile switch și efectuează inline agresiv cu rescrierea graficului de apeluri. Aceste optimizări nu doar reduc dimensiunea APK, dar îmbunătățesc și performanța execuției codului pe ART.

groovy
// build.gradle activarea explicită a R8 (opțional în AGP 8.0+)
android {
    compileSdk 34
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile(
                'proguard-android-optimize.txt'
            ), 'proguard-rules.pro'
        }
    }
}

// gradle.properties — forțarea activării R8
android.enableR8.fullMode=true

Comparație între R8 și ProGuard

Alegerea între R8 și ProGuard este relevantă doar pentru proiectele care folosesc AGP mai vechi de 8.0. Pentru înțelegerea diferențelor arhitecturale, să analizăm comparația după parametrii cheie.

ParametruR8ProGuard
IntegrareIntegrat în compilatorul DEXInstrument separat
Compresia coduluiCu 15% mai eficientăNivel de bază
Viteza de compilareCu 20-30% mai rapidăViteză de bază
DesugaringÎncorporatNu este suportat
Compatibilitate reguliCompletă cu ProGuardSintaxă standard
Suport AGP 8.0+Da (standard)Nu (eliminat)

Dimensiunea APK final

Testele Google pe un eșantion de 100 de aplicații populare din Play Store au arătat că R8 reduce dimensiunea APK cu o medie de 18% comparativ cu ProGuard. În unele proiecte cu utilizare activă a sintaxei Java 8+ și a bibliotecilor terțe, diferența ajungea la 28%. Pentru o aplicație de 40 MB, aceasta înseamnă o economie de 5 până la 11 MB, ceea ce este critic pentru utilizatorii cu trafic limitat.

Compatibilitate cu Kotlin

Ambele instrumente procesează corect codul Kotlin, dar R8 optimizează mai bine construcțiile specifice Kotlin: lambda, funcții inline, corutine și tipuri null-safe. R8 înțelege semantica metadatelor Kotlin și poate elimina în siguranță verificările null suplimentare și poate încorpora funcții inline. Pentru proiectele în Kotlin, R8 este instrumentul recomandat de Google.

Configurarea R8 într-un proiect Android

Configurarea R8 necesită modificări minime în configurația de compilare, deoarece în AGP 8.0+ instrumentul este folosit implicit. Să analizăm aspectele cheie ale configurației.

Modul complet R8

Modul complet R8 (android.enableR8.fullMode=true) activează optimizări mai agresive care oferă o reducere suplimentară a dimensiunii APK cu 5-10%. În acest mod, R8 efectuează o analiză mai profundă a codului, eliminând clase și metode pe care ProGuard le-ar considera accesibile. Modul complet poate necesita reguli -keep suplimentare pentru bibliotecile care folosesc reflection.

properties
# gradle.properties — activarea modului complet R8
android.enableR8.fullMode=true

# Reguli suplimentare pentru full mode
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

Depanarea problemelor R8

În cazul erorilor la compilarea release cu R8, Google recomandă: verificarea fișierului mapping pentru deofuscarea stacktrace-ului, dezactivarea temporară a fullMode pentru izolarea problemei, adăugarea -whyareyoukeeping pentru înțelegerea motivului pentru care clasa nu a fost eliminată și utilizarea flagului --info Gradle pentru obținerea unui log detaliat al procesării R8.

Integrare cu CI/CD

Pentru automatizarea compilării cu R8 în CI/CD, este importantă păstrarea fișierelor mapping ca artefacte de compilare. Fiecare fișier mapping trebuie asociat cu numărul de versiune și varianta de compilare. Google recomandă arhivarea build/outputs/mapping/ împreună cu APK/AAB în sistemul de gestionare a artefactelor. Aceasta va asigura posibilitatea deofuscării crash-urilor din orice versiune a aplicației.

Cele mai bune practici de lucru cu R8

Experiența de mai mulți ani de utilizare a R8 în comunitatea Android a dezvoltat un set de practici verificate care ajută la evitarea problemelor tipice și la obținerea beneficiului maxim de pe urma instrumentului.

Implementare treptată

La trecerea de la ProGuard la R8 se recomandă începerea cu AGP 7.x, unde R8 este activat implicit, dar fullMode este dezactivat. După verificarea stabilității compilării pe setul complet de dispozitive și scenarii, se poate activa fullMode. Fiecare etapă necesită testarea compilării release pe dispozitive fizice cu diferite versiuni de Android.

Monitorizarea fișierelor mapping

Fișierele mapping R8 au același format ca ProGuard, dar conțin mai multe informații datorită analizei mai detaliate. Google recomandă: păstrarea fișierelor mapping pe termen nelimitat — sunt necesare pentru deofuscarea crash-urilor versiunilor vechi; integrarea fișierelor mapping cu Firebase Crashlytics prin încărcare automată; verificarea periodică că deofuscarea în consola Firebase restabilește corect numele claselor.

Testarea cu R8 full mode

Modul complet R8 poate elimina cod care este considerat accesibil în modul standard. Domenii critice pentru testare: ecrane cu WebView (R8 poate elimina clasele interfețelor bridge), aplicații cu pluginuri prin classLoader, biblioteci de analitică și raportare a crash-urilor și view-uri personalizate în fișierele layout create prin inflate.

Monitorizarea dimensiunii compilării

Google recomandă urmărirea dimensiunii APK după aplicarea R8 în fiecare compilare. Utilizați APK Analyzer în Android Studio pentru compararea dimensiunii componentelor individuale: classes.dex, resources.arsc și bibliotecile de cod nativ. R8 poate influența dimensiunea fișierelor DEX neliniar — uneori optimizarea agresivă duce la creșterea dimensiunii din cauza inlinării. Monitorizarea regulată ajută la detectarea la timp a anomaliilor și corectarea regulilor de ofuscare.

kotlin
// Exemplu de clasă păstrată pentru Firebase Crashlytics
@Keep
class CrashLogger {
    fun logException(e: Throwable) {
        FirebaseCrashlytics.getInstance().recordException(e)
    }
}

// rules.pro — păstrează toate clasele cu @Keep
// -keep @androidx.annotation.Keep class * { *; }

Întrebări frecvente

Este necesar să instalez R8 separat?

Nu, R8 este încorporat în Android Gradle Plugin și se instalează automat la actualizarea AGP. Începând cu AGP 8.0, ProGuard a fost complet eliminat din plugin, iar R8 este singurul instrument. Pentru AGP 7.x, R8 este utilizat implicit, dar ProGuard rămâne ca opțiune. Instalarea separată a R8 nu este necesară — este suficient să actualizați versiunea AGP.

De ce este R8 mai rapid decât ProGuard?

R8 este mai rapid datorită a trei factori: integrarea în compilatorul DEX elimină o trecere suplimentară prin bytecod, arhitectura multi-threading utilizează mai eficient procesoarele multi-core, iar analiza mai inteligentă a accesibilității reduce volumul de cod procesat. Conform testelor Google pe un proiect de dimensiune medie, R8 efectuează procesarea în 12 secunde față de 18 secunde pentru ProGuard.

Pot dezactiva R8 și reveni la ProGuard?

În AGP 7.x se poate dezactiva R8 prin gradle.properties: android.enableR8=false. În AGP 8.0+ revenirea la ProGuard nu este posibilă, deoarece pluginul a trecut complet la R8. Dacă proiectul depinde critic de comportamentul specific al ProGuard, se recomandă fixarea AGP la versiunea 7.4, unde ambele instrumente sunt disponibile.

Cum procesează R8 corutinele Kotlin?

R8 procesează corect corutinele Kotlin datorită analizei încorporate a metadatelor Kotlin. Instrumentul înțelege semantica funcțiilor suspend, a obiectelor Continuation și a generării StateMachine de către compilatorul Kotlin. R8 nu elimină clasele necesare de corutine și le poate optimiza dacă este sigur. Pentru proiectele în Kotlin, se recomandă fullMode pentru optimizare maximă.

Ce erori apar cel mai frecvent la trecerea la R8?

Cele mai frecvente probleme la migrare: Missing classes — R8 elimină clase pe care ProGuard le păstra; Inlining issues — inlinarea agresivă strică reflecția; Library incompatibility — biblioteci cu reguli vechi ProGuard; Full mode crashes — eliminarea suplimentară a codului în fullMode. Soluție: testați pe dispozitive fizice, utilizați -keep pentru reflection și verificați stacktrace-ul prin fișierul mapping.

Rezumat

  • R8 — succesorul ProGuard, integrat în compilatorul DEX, înlocuind ProGuard începând cu AGP 8.0.
  • Compresia codului R8 este cu 15% mai eficientă decât ProGuard, reducând APK suplimentar cu 5-11 MB.
  • Viteza de compilare cu R8 este cu 20-30% mai mare datorită arhitecturii multi-threading.
  • Desugaring Java 8+ este încorporat în R8, eliminând necesitatea bibliotecilor suplimentare.
  • Full mode activează optimizări agresive pentru compresia maximă a APK.
  • Compatibilitatea regulilor ProGuard cu R8 asigură o migrare transparentă pentru proiectele existente.
  • Fișierele mapping R8 sunt obligatorii pentru stocare și integrare cu Firebase Crashlytics.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și