AXV

ProGuard va R8 yordamida Kodni Optimallashtirish

Shrinking, Obfuscation, Optimization va Resource Shrinking mexanizmlari

10-sinfAdvanced Android2-hafta · 5-dars

Bugun nimani o'rganamiz?

ProGuard vs R8

Android ekotizimida R8 kompilyatorining o'rni va D8 bilan integratsiyalashgan tezkorligi

4 ta bosqich

Code Shrinking (Tree Shaking), Resource Shrinking, Optimization va Obfuscation

minifyEnabled

build.gradleda optimallashtirishni yoqish va APK hajmini 40% gacha kamaytirish

01

Nega Optimallashtirish Shart?

Ilova hajmini kamaytirish va kodni kiberhujumlardan himoyalash

Ilovaning tozalash mashinasi

«Ilova qanchalik chiroyli ishlamasin, agar uning og'irligi katta bo'lsa yoki kodi oson o'g'irlansa, u muvaffaqiyatga erisha olmaydi.»

Hajm muammosi

Katta kutubxonalar ulanishi natijasida APK hajmi 60–80 MB ga yetadi. Foydalanuvchilar katta ilovani yuklab olishni istamaydi.

Kiberxavfsizlik

Oddiy APK faylini dekompilyatsiya qilib, barcha server API manzillari va biznes mantiqni o'g'irlash juda oson.

ProGuard vs R8 arxitektura taqqoslovi

ESKI: PROGUARD Alohida 2 bosqichli jarayon Java Baytkod (.class) 1-qadam: ProGuard (Shrink & Obfuscate) 2-qadam: D8/DX (DEX Kompilyatsiya) YANGI: R8 ENGINE Yagona integratsiyalashgan qadam Kotlin / Java Baytkodi R8 Kompilyatori Bir vaqtning o'zida: Shrink + Obfuscate + DEX 3x Tezroq yig'ish!
02

R8 Optimallashtirishning 4 Bosqichi

Shrinking, Resource Shrinking, Optimization va Obfuscation

4 ta fundamental operatsiya

1. Code Shrinking (Tree Shaking)

Loyihadagi foydalanilmagan sinflar, metodlar va o'zgaruvchilarni ildizidan tozalaydi.

2. Resource Shrinking

Koddagi keraksiz qismlar o'chirilgach, ishlatilmay qolgan rasmlar va XML fayllarni ham chiqarib tashlaydi.

3. Optimization

Kodni tahlil qilib, bo'sh if-else larni olib tashlaydi, funksiyalarni inline qiladi.

4. Obfuscation

Klass, metod va maydon nomlarini qisqa tushunarsiz harflarga (a, b, c) aylantiradi.

Tree Shaking: Keraksiz kodlarni tozalash

MainActivity Kirish nuqtasi (Root) PaymentRepository Ishlatilmoqda: SAQLANADI Retrofit API UnusedAdminFeature Hech qayerda chaqirilmagan R8 O'CHIRIB TASHLAYDI

Obfuscation: Kod nomlarini chalkashtirish

ASL KOD (Ochiq & Tushunarli) class BankAccountManager { val userSecretToken = "..." fun verifyCardPin(pin) { return pin == 1234 } } OBFUSCATED (Himoyalangan) class a { val a = "..." fun a(b) { return b == 1234 } }
03

build.gradle Sozlamalari

minifyEnabled, shrinkResources va standart qoidalar

Release rejimida R8 ni yoqish

Konfiguratsiya kodi

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles(
            getDefaultProguardFile(
                "proguard-android-optimize.txt"
            ),
            "proguard-rules.pro"
        )
    }
}

Muhim qoidalar

shrinkResources true — faqat minifyEnabled true bilan ishlaydi.

proguard-android-optimize.txt — Google tomonidan taqdim etilgan universal optimallashtirish qoidalari.

proguard-rules.pro — Sizning loyihangizga xos maxsus qoidalar fayli.

APK hajmining 40-50% ga qisqarishi

Debug APK Optimallashtirilmagan 38 MB Barcha o'lik kodlar va resurslar bor -55% Release APK (R8) To'liq siqilgan va tozalangan 17 MB Tez yuklanadi, RAM tejaladi

Release yig'ish va tahlil qilish bosqichlari

1

minifyEnabled: true

Modul darajasidagi build.gradleda Release rejimida R8 ni yoqing.

2

shrinkResources: true

Ishlatilmagan rasm va dizaynlarni tozalashni faollashtiring.

3

Generate Signed APK

Android Studio menyusidan Release APK yoki AAB faylini yig'ing.

4

APK Analyzer

Build $\to$ Analyze APK orqali hajmni va DEX strukturasini ko'rib chiqing.

Optimallashtirilmagan vs R8 bilan tozalangan APK

R8 siz (Xom holat)

APK hajmi 2 barobar og'ir bo'ladi.

Kodni JADX orqali osongina o'qish mumkin.

Barcha keraksiz kutubxona kodlari paket ichida yotadi.

R8 bilan (Professional)

Hajm 40–50% ga qisqaradi.

Klasslar a, b, c qilib chalkashtirilgan, xavfsizlik yuqori.

Faqat foydalanilgan kodlar qoladi, ilova chaqqon ishlaydi.

Tezkor bilim sinovi

R8 optimallashtirish jarayonida Obfuscation (kodni chalkashtirish) nima uchun kerak?
Faqat dasturchi kodini chiroyli ko'rsatish uchun
Klass va metod nomlarini qisqartirib, ilovani dekompilyatsiya va buzilishdan himoyalash uchun
Rasmlarni rangini o'zgartirish uchun
Emulyatorda tezroq ishga tushirish uchun

Amaliy laboratoriya mashg'uloti

1. R8 ni yoqish

app/build.gradleda minifyEnabled true va shrinkResources true parametrlarini qo'shing.

2. APK Analyzer tahlili

Release APK yig'ib, APK Analyzer orqali classes.dex faylini oching va chalkashtirilgan klasslarni ko'ring.

Darsning asosiy xulosalari

Hajm va Xavfsizlik

R8 bir vaqtning o'zida ham APK hajmini kamaytiradi, ham biznes mantig'ini himoyalaydi.

Release standarti

Har bir professional ilova Google Play'ga chiqarilishidan avval to'liq R8 filtridan o'tishi shart.

Keyingi dars: ProGuard qoidalari (-keep) va xatoliklarni deobfuskatsiya qilish