R8 — DEX kodunun optimallaşdırılması üçün kompilyator və alətdir, Android tətbiqlərinin qurulma mərhələsində sıxışdırma, desuqarinq və obfuskasiya həyata keçirir. Google Android Performance Team (2025) məlumatlarına görə, R8 istifadəsi APK ölçüsünü ProGuard ilə müqayisədə orta hesabla 18% azaldır və qurulma vaxtını 30% qısaldır. Android Gradle Plugin 8.0-dan başlayaraq, R8 standart obfuskasiya aləti kimi ProGuard-ı tamamilə əvəz etmişdir.
Əsas məqamlar
R8 — Google tərəfindən Android ekosistemində ProGuard-ı əvəz etmək üçün hazırlanmış baytkod emalı və çevrilmə proqramıdır. Class faylları mərhələsində ayrıca alət kimi işləyən ProGuard-dan fərqli olaraq, R8 birbaşa DEX kompilyatoruna (D8/R8) inteqrasiya olunmuşdur. Bu, R8-ə xarici alətlər üçün əlçatmaz olan daha dərindən analiz və optimallaşdırma aparmağa imkan verir.
R8 girişdə class faylları və ya JAR arxivləri formatında Java baytkodu alır və onu bir keçiddə optimallaşdırılmış DEX koduna çevirir. Daxili R8 optimallaşdırıcısı 50-dən çox müxtəlif çevirmə növü həyata keçirir — sadə əməliyyatlardan (sabitlərin inline edilməsi) mürəkkəbə qədər (ayrı-ayrı sahə dəqiqliyi ilə tip əldə edilməsinin analizi). Google məlumatlarına görə, R8 arxitekturası çoxişlək rejimdə işləmək üçün xüsusi layihələndirilmişdir ki, bu da yüksək qurulma sürətini təmin edir.
R8 Google I/O 2018-də elan edilmiş və ilk dəfə Android Gradle Plugin 3.4-ə (2019) ProGuard-ın opsional əvəzi kimi daxil edilmişdir. AGP 7.0-da R8 bütün layihələr üçün defolt alət oldu, AGP 8.0-da (2023) isə ProGuard dəstəyi plaginindən tamamilə çıxarıldı. 2025-ci ilə qədər R8 Google tərəfindən tövsiyə olunan Android üçün yeganə rəsmi obfuskasiya və optimallaşdırma alətidir.
R8 proqramçılara ProGuard-ı effektivlik baxımından əhəmiyyətli dərəcədə üstələyən güclü imkanlar dəsti təqdim edir. Əsas olanları nəzərdən keçirək.
R8 tətbiqin və bütün asılılıqlarının kodunun qlobal analizini həyata keçirir, giriş nöqtələrindən çağırış qrafiki vasitəsilə əldə edilən sinifləri və metodları müəyyən edir. R8 analizi DEX kod təsvirinə çıxış sayəsində ProGuard-dan daha dəqiqdir. R8 təkcə bütün sinifləri və metodları deyil, həm də heç vaxt istifadə olunmayan ayrı-ayrı sahələri silə bilər. Google testlərinə görə, R8 eyni layihələrdə ProGuard-dan orta hesabla 15% daha çox kod silir.
Daxili desuqarinq — ProGuard-da olmayan R8-in unikal imkanıdır. R8 lambda ifadələrini, metod istinadlarını, defolt metodları olan interfeysləri və Java 8+ try-with-resources konstruksiyalarını avtomatik olaraq bütün Android API səviyyələrində işləyən geriyə uyğun koda çevirir. Bu, proqramçını ayrıca desugar_jdk_libs kitabxanasını qoşmaq və desuqarinqi əl ilə konfiqurasiya etmək zərurətindən azad edir.
R8 son DEX formatını gördüyü üçün ProGuard üçün mümkün olmayan optimallaşdırmaları həyata keçirə bilər. R8 eyni sətir sabitlərini birləşdirir, istifadə olunmayan istisnaları silir, switch konstruksiyalarını optimallaşdırır və çağırış qrafikini yenidən yazmaqla aqressiv inlajninq həyata keçirir. Bu optimallaşdırmalar təkcə APK ölçüsünü azaltmır, həm də ART-də kodun icra performansını yaxşılaşdırır.
// build.gradle R8-in açıq şəkildə aktivləşdirilməsi (AGP 8.0+da opsional)
android {
compileSdk 34
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'
), 'proguard-rules.pro'
}
}
}
// gradle.properties — R8-i məcburi aktivləşdirmək
android.enableR8.fullMode=true
R8 və ProGuard arasında seçim yalnız AGP 8.0-dan köhnə versiyalarını istifadə edən layihələr üçün aktualdır. Arxitektura fərqlərini başa düşmək üçün əsas parametrlər üzrə müqayisəyə baxaq.
| Parametr | R8 | ProGuard |
|---|---|---|
| İnteqrasiya | DEX kompilyatoruna daxili | Ayrıca alət |
| Kod sıxışdırması | 15% daha effektiv | Baza səviyyəsi |
| Qurulma sürəti | 20-30% daha sürətli | Baza sürəti |
| Desuqarinq | Daxili | Dəstəklənmir |
| Qayda uyğunluğu | ProGuard ilə tam | Standart sintaksis |
| AGP 8.0+ dəstəyi | Bəli (standart) | Xeyr (çıxarılıb) |
Google-ın 100 məşhur Play Store tətbiqi nümunəsində apardığı testlər göstərdi ki, R8 APK ölçüsünü ProGuard ilə müqayisədə orta hesabla 18% azaldır. Java 8+ sintaksisi və üçüncü tərəf kitabxanalarından aktiv istifadə edən bəzi layihələrdə fərq 28%-ə çatırdı. 40 MB ölçüsündə tətbiq üçün bu, 5-dən 11 MB-a qədər qənaət deməkdir ki, bu da məhdud trafiki olan istifadəçilər üçün kritikdir.
Hər iki alət Kotlin kodunu düzgün emal edir, lakin R8 Kotlin-spesifik konstruksiyaları daha yaxşı optimallaşdırır: lambdaları, inline funksiyaları, korutinləri və null-safe tipləri. R8 Kotlin metadatalarının semantikasını başa düşür və artıq null yoxlamalarını təhlükəsiz silə və inline funksiyaları yerləşdirə bilər. Kotlin layihələri üçün R8 Google tərəfindən tövsiyə olunan alətdir.
R8-in qurulması kompilasiya konfiqurasiyasında minimal dəyişiklik tələb edir, çünki AGP 8.0+ alət defolt olaraq istifadə olunur. Konfiqurasiyanın əsas aspektlərini nəzərdən keçirək.
R8 full mode (android.enableR8.fullMode=true) APK ölçüsünün əlavə 5-10% azalmasını verən daha aqressiv optimallaşdırmaları aktivləşdirir. Bu rejimdə R8 kodun daha dərin analizini həyata keçirir, ProGuard-ın əldə edilə bilən hesab edəcəyi sinifləri və metodları silir. Tam rejim reflection istifadə edən kitabxanalar üçün əlavə -keep qaydaları tələb edə bilər.
# gradle.properties — R8 tam rejiminin aktivləşdirilməsi
android.enableR8.fullMode=true
# Full mode üçün əlavə qaydalar
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
R8 ilə release kompilasiyasında xəta baş verdikdə Google tövsiyə edir: stacktreysin deobfuskasiyası üçün mapping faylını yoxlamaq, problemi izolyasiya etmək üçün fullMode-u müvəqqəti söndürmək, sinifin niyə silinmədiyini anlamaq üçün -whyareyoukeeping əlavə etmək və R8 emalının ətraflı logunu almaq üçün Gradle --info bayrağından istifadə etmək.
CI/CD-də R8 ilə kompilasiyanın avtomatlaşdırılması üçün mapping fayllarını kompilasiya artefaktları kimi saxlamaq vacibdir. Hər bir mapping faylı versiya nömrəsi və kompilasiya variantı ilə əlaqələndirilməlidir. Google APK/AAB ilə birlikdə build/outputs/mapping/ qovluğunu artefakt idarəetmə sistemində arxivləşdirməyi tövsiyə edir. Bu, tətbiqin istənilən versiyasından crashlərin deobfuskasiyası imkanını təmin edəcək.
Android icmasında R8-dən uzunillik istifadə təcrübəsi tipik problemlərdən qaçmağa və alətdən maksimum fayda əldə etməyə kömək edən sınaqdan keçmiş təcrübələr dəsti yaratmışdır.
ProGuard-dan R8-ə keçid zamanı R8-in defolt olaraq aktiv olduğu, lakin fullMode-un söndürüldüyü AGP 7.x-dən başlamaq tövsiyə olunur. Tam cihaz və ssenari dəstində kompilasiyanın sabitliyi təsdiqləndikdən sonra fullMode aktivləşdirilə bilər. Hər mərhələ fərqli Android versiyaları olan fiziki cihazlarda release kompilasiyasının test edilməsini tələb edir.
R8 mapping faylları ProGuard ilə eyni formata malikdir, lakin daha ətraflı analiz sayəsində daha çox məlumat ehtiva edir. Google tövsiyə edir: mapping fayllarını müddətsiz saxlamaq — köhnə versiyaların crashlərinin deobfuskasiyası üçün lazımdır; mapping fayllarını avtomatik yükləmə vasitəsilə Firebase Crashlytics ilə inteqrasiya etmək; Firebase konsolunda deobfuskasiyanın sinif adlarını düzgün bərpa etdiyini mütəmadi yoxlamaq.
R8-in tam rejimi standart rejimdə əldə edilə bilən hesab edilən kodu silə bilər. Test üçün kritik sahələr: WebView olan ekranlar (R8 bridge interfeys siniflərini silə bilər), classLoader vasitəsilə plaginli tətbiqlər, analitika ve crash hesabatı kitabxanaları və inflate ilə yaradılan layout fayllarında xüsusi view-lər.
Google hər kompilasiyada R8 tətbiq edildikdən sonra APK ölçüsünü izləməyi tövsiyə edir. Ayrı-ayrı komponentlərin ölçüsünü müqayisə etmək üçün Android Studio-da APK Analyzer-dən istifadə edin: classes.dex, resources.arsc və native kod kitabxanaları. R8 DEX fayllarının ölçüsünə qeyri-xətti təsir göstərə bilər — bəzən aqressiv optimallaşdırma inlajninq hesabına ölçünün artmasına səbəb olur. Mütəmadi monitorinq anomaliyaları vaxtında aşkar etməyə və obfuskasiya qaydalarını düzəltməyə kömək edir.
// Firebase Crashlytics üçün saxlanılan sinif nümunəsi
@Keep
class CrashLogger {
fun logException(e: Throwable) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
// rules.pro — @Keep ilə bütün sinifləri saxla
// -keep @androidx.annotation.Keep class * { *; }
Tez-tez verilən suallar
Xeyr, R8 Android Gradle Plugin-ə daxildir və AGP yeniləndikdə avtomatik quraşdırılır. AGP 8.0-dan başlayaraq ProGuard plaginindən tamamilə çıxarılıb və R8 yeganə alətdir. AGP 7.x üçün R8 defolt olaraq istifadə olunur, lakin ProGuard opsiya olaraq qalır. R8-in ayrıca quraşdırılması tələb olunmur — AGP versiyasını yeniləmək kifayətdir.
R8 üç amil sayəsində daha sürətlidir: DEX kompilyatoruna inteqrasiya baytkod üzərində əlavə keçidi aradan qaldırır, çoxişlək arxitektura çoxnüvəli prosessorlardan daha səmərəli istifadə edir və daha ağıllı əldə edilmə analizi emal olunan kodun həcmini azaldır. Google-ın orta ölçülü layihədə testlərinə görə, R8 emalı 12 saniyə ərzində yerinə yetirir, ProGuard isə 18 saniyə.
AGP 7.x-də R8-i gradle.properties vasitəsilə söndürmək olar: android.enableR8=false. AGP 8.0-da ProGuard-a qayıtmaq mümkün deyil, çünki plagin tamamilə R8-ə keçib. Əgər layihə ProGuard-ın spesifik davranışından kritik asılıdırsa, hər iki alətin mövcud olduğu AGP 7.4 versiyasında fiksasiya etmək tövsiyə olunur.
R8 Kotlin metadatalarının daxili analizi sayəsində Kotlin korutinlərini düzgün emal edir. Alət suspend funksiyalarının, Continuation obyektlərinin və Kotlin kompilyatorunun StateMachine generasiyasının semantikasını başa düşür. R8 zəruri korutin siniflərini silmir və təhlükəsiz olduqda onları optimallaşdıra bilər. Kotlin layihələri üçün maksimum optimallaşdırma üçün fullMode tövsiyə olunur.
Miqrasiya zamanı ən çox rast gəlinən problemler: Missing classes — R8 ProGuard-ın saxladığı sinifləri silir; Inlining issues — aqressiv inlajninq refeksiyanı pozur; Library incompatibility — köhnə ProGuard qaydaları olan kitabxanalar; Full mode crashes — fullMode-da əlavə kod silinməsi. Həll yolu: fiziki cihazlarda test etmək, reflection üçün -keep istifadə etmək və mapping faylı vasitəsilə stacktrace-i yoxlamaq.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun