R8 — DEX kodini optimallashtirish uchun kompilyator va vosita bo'lib, Android ilovalarini qurish bosqichida siqish, deshugaring va obfuskatsiyani amalga oshiradi. Google Android Performance Team (2025) ma'lumotlariga ko'ra, R8 dan foydalanish APK hajmini ProGuard bilan solishtirganda o'rtacha 18% ga kamaytiradi va qurish vaqtini 30% ga qisqartiradi. Android Gradle Plugin 8.0 dan boshlab, R8 standart obfuskatsiya vositasi sifatida ProGuard-ni to'liq almashtirdi.
Asosiy fikrlar
R8 — Google tomonidan Android ekotizimida ProGuard-ni almashtirish uchun ishlab chiqilgan baytkodni qayta ishlash va o'zgartirish dasturi. Class fayllari bosqichida alohida vosita sifatida ishlaydigan ProGuard-dan farqli o'laroq, R8 to'g'ridan-to'g'ri DEX kompilyatoriga (D8/R8) integratsiyalangan. Bu R8 ga tashqi vositalar uchun mavjud bo'lmagan chuqurroq tahlil va optimallashtirishni amalga oshirish imkonini beradi.
R8 kirishda class fayllari yoki JAR arxivlari formatida Java baytkodini oladi va uni bir o'tishda optimallashtirilgan DEX kodiga aylantiradi. O'rnatilgan R8 optimallashtiruvchisi 50 dan ortiq turli xil o'zgartirish turlarini amalga oshiradi — oddiydan (konstantalarni inline qilish) murakkabgacha (alohida maydon aniqligi bilan turlarning erishishini tahlil qilish). Google ma'lumotlariga ko'ra, R8 arxitekturasi ko'p oqimli rejimda ishlash uchun maxsus ishlab chiqilgan bo'lib, bu yuqori qurish tezligini ta'minlaydi.
R8 Google I/O 2018 da e'lon qilingan va birinchi marta Android Gradle Plugin 3.4 (2019) ga ProGuard-ning ixtiyoriy o'rnini bosuvchi sifatida kiritilgan. AGP 7.0 da R8 barcha loyihalar uchun standart vosita bo'ldi, AGP 8.0 (2023) da esa ProGuard qo'llab-quvvatlashi plaginidan butunlay olib tashlandi. 2025 yil holatiga ko'ra, R8 Google tomonidan tavsiya etilgan Android uchun yagona rasmiy obfuskatsiya va optimallashtirish vositasidir.
R8 dasturchilarga ProGuard-ni samaradorlik jihatidan sezilarli darajada ortda qoldiradigan kuchli imkoniyatlar to'plamini taqdim etadi. Keling, asosiylarini ko'rib chiqaylik.
R8 ilova va uning barcha bog'liqliklarining kodini global tahlil qiladi, kirish nuqtalaridan chaqiruv grafigi orqali erishiladigan sinflar va metodlarni aniqlaydi. R8 tahlili DEX kod tasviriga kirish tufayli ProGuard-dan aniqroqdir. R8 nafaqat butun sinflar va metodlarni, balki hech qachon ishlatilmaydigan alohida maydonlarni ham olib tashlashi mumkin. Google testlariga ko'ra, R8 bir xil loyihalarda ProGuard-ga qaraganda o'rtacha 15% ko'proq kodni olib tashlaydi.
O'rnatilgan deshugaring — ProGuard-da mavjud bo'lmagan R8 ning noyob imkoniyati. R8 lambda ifodalarini, metod havolalarini, standart metodlarga ega interfeyslarni va Java 8+ try-with-resources ni avtomatik ravishda barcha Android API darajalarida ishlaydigan orqaga mos kodga aylantiradi. Bu dasturchini alohida desugar_jdk_libs kutubxonasini ulash va deshugaringni qo'lda sozlash zaruratidan ozod qiladi.
R8 yakuniy DEX formatini ko'rgani uchun ProGuard uchun imkonsiz bo'lgan optimallashtirishlarni amalga oshirishi mumkin. R8 bir xil satr konstantalarini birlashtiradi, foydalanilmaydigan istisnolarni olib tashlaydi, switch konstruksiyalarini optimallashtiradi va chaqiruv grafigini qayta yozish bilan agressiv inline qiladi. Bu optimallashtirishlar nafaqat APK hajmini kamaytiradi, balki ARTda kodning bajarilish unumdorligini ham yaxshilaydi.
// build.gradle R8 ni aniq faollashtirish (AGP 8.0+ da ixtiyoriy)
android {
compileSdk 34
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt'
), 'proguard-rules.pro'
}
}
}
// gradle.properties — R8 ni majburan faollashtirish
android.enableR8.fullMode=true
R8 va ProGuard o'rtasidagi tanlov faqat AGP 8.0 dan eski versiyalarini ishlatadigan loyihalar uchun dolzarbdir. Arxitektura farqlarini tushunish uchun asosiy parametrlar bo'yicha solishtirishni ko'rib chiqaylik.
| Parametr | R8 | ProGuard |
|---|---|---|
| Integratsiya | DEX kompilyatoriga o'rnatilgan | Alohida vosita |
| Kod siqish | 15% samaraliroq | Asosiy daraja |
| Qurish tezligi | 20-30% tezroq | Asosiy tezlik |
| Deshugaring | O'rnatilgan | Qo'llab-quvvatlanmaydi |
| Qoidalar mosligi | ProGuard bilan to'liq | Standart sintaksis |
| AGP 8.0+ qo'llab-quvvatlash | Ha (standart) | Yo'q (olib tashlangan) |
Google-ning 100 ta mashhur Play Store ilovasi namunasidagi testlari shuni ko'rsatdiki, R8 APK hajmini ProGuard bilan solishtirganda o'rtacha 18% ga kamaytiradi. Java 8+ sintaksisi va uchinchi tomon kutubxonalaridan faol foydalanadigan ba'zi loyihalarda farq 28% ga yetgan. 40 MB hajmdagi ilova uchun bu 5 dan 11 MB gacha tejashni anglatadi, bu cheklangan trafikli foydalanuvchilar uchun juda muhimdir.
Ikkala vosita ham Kotlin kodini to'g'ri qayta ishlaydi, ammo R8 Kotlin-spesifik konstruksiyalarni yaxshiroq optimallashtiradi: lambdalar, inline funksiyalar, korutinlar va null-safe turlar. R8 Kotlin metama'lumotlarining semantikasini tushunadi va ortiqcha null tekshiruvlarini xavfsiz olib tashlashi va inline funksiyalarni joylashtirishi mumkin. Kotlin loyihalari uchun R8 Google tomonidan tavsiya etilgan vositadir.
R8 ni sozlash qurish konfiguratsiyasida minimal o'zgarishlarni talab qiladi, chunki AGP 8.0+ da vosita standart sifatida ishlatiladi. Keling, konfiguratsiyaning asosiy jihatlarini ko'rib chiqaylik.
R8 full mode (android.enableR8.fullMode=true) APK hajmining qo'shimcha 5-10% ga kamayishini beradigan agressiv optimallashtirishlarni faollashtiradi. Ushbu rejimda R8 kodni chuqurroq tahlil qiladi, ProGuard erishish mumkin deb hisoblagan sinflar va metodlarni olib tashlaydi. To'liq rejim reflection dan foydalanadigan kutubxonalar uchun qo'shimcha -keep qoidalarini talab qilishi mumkin.
# gradle.properties — R8 to'liq rejimini faollashtirish
android.enableR8.fullMode=true
# Full mode uchun qo'shimcha qoidalar
-keep class com.example.reflection.** { *; }
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
R8 bilan reliz qurishda xatoliklar yuz berganda Google tavsiya qiladi: stacktreysni deobfuskatsiya qilish uchun mapping faylini tekshirish, muammoni izolyatsiya qilish uchun fullMode-ni vaqtincha o'chirish, sinf nima uchun olib tashlanmaganini tushunish uchun -whyareyoukeeping qo'shish va R8 qayta ishlashining batafsil logini olish uchun Gradle --info bayrog'idan foydalanish.
CI/CD da R8 bilan qurishni avtomatlashtirish uchun mapping fayllarini qurish artefaktlari sifatida saqlash muhimdir. Har bir mapping fayli versiya raqami va qurish varianti bilan bog'lanishi kerak. Google APK/AAB bilan birga build/outputs/mapping/ ni artefaktlarni boshqarish tizimida arxivlashni tavsiya qiladi. Bu ilovaning istalgan versiyasidagi crashlarni deobfuskatsiya qilish imkoniyatini ta'minlaydi.
Android jamoasida R8 dan ko'p yillik foydalanish tajribasi odatdagi muammolardan qochish va vositadan maksimal foyda olishga yordam beradigan tasdiqlangan amaliyotlar to'plamini ishlab chiqdi.
ProGuard-dan R8 ga o'tishda R8 standart faol, ammo fullMode o'chirilgan AGP 7.x dan boshlash tavsiya etiladi. Qurilmalar va stsenariylarning to'liq to'plamida qurish barqarorligi tasdiqlangandan so'ng, fullMode-ni faollashtirish mumkin. Har bir bosqich turli xil Android versiyalariga ega jismoniy qurilmalarda reliz qurishni sinovdan o'tkazishni talab qiladi.
R8 mapping fayllari ProGuard bilan bir xil formatga ega, ammo batafsilroq tahlil tufayli ko'proq ma'lumotni o'z ichiga oladi. Google tavsiya qiladi: mapping fayllarini cheksiz muddatga saqlash — ular eski versiyalarning crashlarini deobfuskatsiya qilish uchun kerak; mapping fayllarini avtomatik yuklash orqali Firebase Crashlytics bilan integratsiya qilish; Firebase konsolidagi deobfuskatsiya sinf nomlarini to'g'ri tiklayotganini muntazam tekshirish.
R8 ning to'liq rejimi standart rejimda erishish mumkin deb hisoblangan kodni olib tashlashi mumkin. Sinov uchun muhim sohalar: WebView bilan ekranlar (R8 bridge interfeys sinflarini olib tashlashi mumkin), classLoader orqali plaginli ilovalar, analitika va crash hisobot kutubxonalari va inflate orqali yaratilgan layout fayllaridagi maxsus view-lar.
Google har bir qurishda R8 qo'llanilgandan so'ng APK hajmini kuzatishni tavsiya qiladi. Alohida komponentlarning hajmini solishtirish uchun Android Studio-dagi APK Analyzer-dan foydalaning: classes.dex, resources.arsc va native kod kutubxonalari. R8 DEX fayllarining hajmiga nochiziqli ta'sir ko'rsatishi mumkin — ba'zida agressiv optimallashtirish inline tufayli hajmning oshishiga olib keladi. Muntazam monitoring anomaliyalarni o'z vaqtida aniqlash va obfuskatsiya qoidalarini tuzatishga yordam beradi.
// Firebase Crashlytics uchun saqlangan sinf namunasi
@Keep
class CrashLogger {
fun logException(e: Throwable) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
// rules.pro — @Keep bilan barcha sinflarni saqlash
// -keep @androidx.annotation.Keep class * { *; }
Tez-tez so'raladigan savollar
Yo'q, R8 Android Gradle Plugin-ga o'rnatilgan va AGP yangilanganda avtomatik o'rnatiladi. AGP 8.0 dan boshlab ProGuard plaginidan butunlay olib tashlangan va R8 yagona vositadir. AGP 7.x uchun R8 standart ishlatiladi, ammo ProGuard variant sifatida qoladi. R8 ni alohida o'rnatish talab qilinmaydi — AGP versiyasini yangilash kifoya.
R8 uch omil tufayli tezroq: DEX kompilyatoriga integratsiya baytkod bo'ylab qo'shimcha o'tishni bartaraf qiladi, ko'p oqimli arxitektura ko'p yadroli protsessorlardan samaraliroq foydalanadi va aqlli erishish tahlili qayta ishlanadigan kod hajmini kamaytiradi. Google-ning o'rtacha hajmdagi loyihadagi testlariga ko'ra, R8 qayta ishlashni 12 soniyada amalga oshiradi, ProGuard esa 18 soniyada.
AGP 7.x da R8 ni gradle.properties orqali o'chirish mumkin: android.enableR8=false. AGP 8.0+ da ProGuard-ga qaytish mumkin emas, chunki plagin butunlay R8 ga o'tgan. Agar loyiha ProGuard-ning o'ziga xos xatti-harakatiga muhim bog'liq bo'lsa, ikkala vosita mavjud bo'lgan AGP 7.4 versiyasida fiksatsiya qilish tavsiya etiladi.
R8 Kotlin metama'lumotlarining o'rnatilgan tahlili tufayli Kotlin korutinlarini to'g'ri qayta ishlaydi. Vosita suspend funksiyalarining, Continuation ob'ektlarining va Kotlin kompilyatorining StateMachine generatsiyasining semantikasini tushunadi. R8 zarur korutin sinflarini olib tashlamaydi va xavfsiz bo'lganda ularni optimallashtirishi mumkin. Kotlin loyihalari uchun maksimal optimallashtirish uchun fullMode tavsiya etiladi.
Migratsiyada eng keng tarqalgan muammolar: Missing classes — R8 ProGuard saqlagan sinflarni olib tashlaydi; Inlining issues — agressiv inline refeksiyani buzadi; Library incompatibility — eski ProGuard qoidalari bilan kutubxonalar; Full mode crashes — fullMode-da qo'shimcha kod olib tashlash. Yechim: jismoniy qurilmalarda sinovdan o'tkazish, reflection uchun -keep ishlatish va mapping fayli orqali stacktreysni tekshirish.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.