Asosiy kontentga o‘tish
Innovialabs

iOS va Android’da mobil ilova hajmini qanday kamaytirish mumkin

Amaliyot4 daq

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 .aab dan aniq qurilma uchun APK yig‘adigan bundletool yordam 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:

ResursNima qilish kerak
PNG illyustratsiyalarWebP/HEIC yoki vektor formatlarga o‘tkazish
IkonkalarVektorlardan foydalanish (Vector Drawable, SF Symbols, SVG)
ShriftlarFaqat kerakli qalinliklar, simvollar to‘plamini qisqartirish
Video, onboardingBuild’ga qo‘ymasdan serverdan yuklash
Lottie va animatsiyalarIchidagi rastr rasmlarni olib tashlash, soddalashtirish
LokalizatsiyalarQo‘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 appbundle va flutter build ipa bilan yig‘ing, debug ma’lumotini ajratish uchun --split-debug-info va --obfuscate dan foydalaning. --analyze-size flagi 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.

Ko‘p beriladigan savollar

Do‘kon aniq qurilma uchun variant yig‘adi va uni yuklab olish uchun siqadi. O‘rnatilgandan keyingi hajm ham boshqacha: fayllar ochiladi, Android’da esa kod kompilyatsiya qilinishi mumkin.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.