iOS va Android’da mobil ilova hajmini qanday kamaytirish mumkin
Amaliyot4 daqInnovialabs tahririyati
Qisqacha
Avval do‘kon konsollarida aniq qurilma uchun yuklab olish hajmini o‘lchang, keyin uni tartib bilan kamaytiring: App Bundle va App Thinning, R8, rasm va shriftlarni siqish, ortiqcha SDK larni olib tashlash va kam ishlatiladigan kontentni so‘rov bo‘yicha yuklash.
Qisqacha: hajmni nima haqiqatan kamaytiradi
Foydalanuvchi sizning APK yoki IPA faylingizni to‘liq yuklamaydi, balki do‘kon uning qurilmasi uchun yig‘gan variantni oladi. Shuning uchun ish ikki bosqichda boradi: haqiqiy yuklab olish hajmini o‘lchash va unga sababsiz tushayotgan narsalarni olib tashlash. Eng sezilarli natijani odatda quyidagilar beradi:
- Android App Bundle orqali nashr qilish va iOS’da App Thinning;
- Android’da R8 (kod va resurslarni qisqartirish), iOS’da simvollarni strip qilish;
- og‘ir rasm, shrift, video va animatsiyalarni siqish yoki almashtirish;
- ishlatilmaydigan SDK va kutubxonalarni olib tashlash;
- kam kerak bo‘ladigan kontentni so‘rov bo‘yicha yuklashga o‘tkazish.
Hajmni to‘g‘ri o‘lchash
Kompyuteringizdagi build fayl hajmi deyarli har doim chalg‘itadi: unda barcha ekran zichliklari va arxitekturalar uchun resurslar bor.
- Android. Google Play Console’da ilova hajmi hisoboti bor: odatiy qurilma konfiguratsiyalari uchun yuklab olish va o‘rnatish hajmi. Lokal tahlil uchun Android Studio’dagi APK Analyzer va
.aabdan aniq qurilma uchun APK yig‘adiganbundletoolyordam beradi. - iOS. Xcode’da arxivni eksport qilganda App Thinning Size Report’ni yoqing — u har bir qurilma varianti hajmini ko‘rsatadi. Build qayta ishlangach, yakuniy raqamlar App Store Connect’da ham ko‘rinadi.
Har bir relizda hajmni qayd eting. O‘sish bitta build’da sezilmaydi, lekin yarim yillik grafikda yaqqol ko‘rinadi.
Android: App Bundle va R8
App Bundle (.aab) Google Play’ga har bir qurilmaga faqat kerakli ekran zichligi resurslari, tillar va uning arxitekturasi uchun native kutubxonalarni berish imkonini beradi. Play’dagi yangi ilovalar uchun bu standart format.
R8 ishlatilmaydigan kodni olib tashlaydi, nomlarni qisqartiradi va shrinkResources bilan birga ishlatilmaydigan resurslarni tozalaydi:
android {
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
R8 ni yoqqandan keyin reliz build’ni albatta test qiling: refleksiya yoki serializatsiya orqali chaqiriladigan kod o‘chirib yuborilishi mumkin va unga -keep qoidalari kerak bo‘ladi.
iOS: App Thinning va build sozlamalari
App Store App Thinning’ni o‘zi qo‘llaydi: slicing qurilmaga faqat kerakli asset va arxitekturani beradi. Sizning vazifangiz — unga xalaqit bermaslik:
- rasmlarni bundle’da sochilgan fayllar sifatida emas, Asset Catalog’da saqlang — shunda ekran o‘lchamiga mos yetkazish ishlaydi;
- relizda debug simvollar strip qilinganiga ishonch hosil qiling (crash hisobotlari uchun dSYM alohida yuklanadi);
- bog‘liqliklar bir xil kutubxonalarning o‘z nusxalarini olib kelmayaptimi, tekshiring.
On-Demand Resources kam ishlatiladigan resurslarni (o‘yin bosqichlari, o‘quv videolari) o‘rnatishdan keyin yuklash imkonini beradi. Android’dagi analoglari — Play Asset Delivery va Play Feature Delivery.
Resurslar: rasmlar, shriftlar, media
Resurslar ko‘pincha koddan og‘irroq bo‘ladi. Nimani tekshirish kerak:
| Resurs | Nima qilish kerak |
|---|---|
| PNG illyustratsiyalar | WebP/HEIC yoki vektor formatlarga o‘tkazish |
| Ikonkalar | Vektorlardan foydalanish (Vector Drawable, SF Symbols, SVG) |
| Shriftlar | Faqat kerakli qalinliklar, simvollar to‘plamini qisqartirish |
| Video, onboarding | Build’ga qo‘ymasdan serverdan yuklash |
| Lottie va animatsiyalar | Ichidagi rastr rasmlarni olib tashlash, soddalashtirish |
| Lokalizatsiyalar | Qo‘llab-quvvatlanmaydigan tillarni qo‘shmaslik |
Ortiqcha SDK va bog‘liqliklar
Har bir analitika, reklama yoki chat SDK kod, resurs va ba’zan native kutubxonalar qo‘shadi. Har chorakda reviziya qiling: qaysi SDK haqiqatan ishlatiladi, qaysilari bir-birini takrorlaydi, qaysilari bitta funksiya uchun to‘liq ulangan. Unutilgan bitta SDK ni olib tashlash ko‘pincha bir necha hafta rasmlarni optimallashtirishdan ko‘proq foyda beradi.
Flutter va React Native xususiyatlari
- Flutter.
flutter build appbundlevaflutter build ipabilan yig‘ing, debug ma’lumotini ajratish uchun--split-debug-infova--obfuscatedan foydalaning.--analyze-sizeflagi joyni nima egallayotganini ko‘rsatadi. Ikonka shriftlari relizda standart holatda tree shaking qilinadi. - React Native. Hermes’ni yoqing — uning bytecode’i odatda ixchamroq va tezroq ishga tushadi. Android loyihasida R8 ni yoqing, JS bundle’ni og‘ir bog‘liqliklarga tekshiring (barcha lokallar bilan sana kutubxonalari, to‘liq ikonka to‘plamlari).
Ko‘p uchraydigan xatolar
- Do‘kon hisobotlari o‘rniga lokal fayl hajmiga qarash.
- R8 ni reliz testlarisiz yoqish va production’da crash olish.
- Onboarding videolari va katta rasmlarni build’da saqlash.
- SDK larni «kelajak uchun» ulab, hech qachon olib tashlamaslik.