App Size Optimization — funksionallığı itirmədən quraşdırma faylının (APK, AAB, IPA) ölçüsünü azaltmağa yönəlmiş texnikalar məcmusudur. Android Reduce APK Size Guide-a görə, hər bir megabayt ölçü azalması yavaş interneti olan regionlarda quraşdırma konversiyasını 1–2% artıra bilər. App Thinning — Apple-ın yalnız müəyyən cihaza lazım olan resursları çatdıran əsas texnologiyası.
Əsas məqamlar
App Size Optimization — tətbiqin quraşdırma paketinin ölçüsünü minimuma endirməyə yönəlmiş mobil tətbiq inkişafı fənnidir. Ölü kodun və resursların silinməsi, şəkillərin sıxışdırılması, kitabxanaların optimallaşdırılması, müxtəlif arxitekturalar üçün kompilyasiyanın fraqmentləşdirilməsi və tələb üzrə çatdırılma texnologiyalarından istifadə daxildir.
Tətbiq ölçüsü qeyri-bərabər təsir edir müxtəlif istifadəçi seqmentlərinə. İnkişaf etmiş mobil infrastrukturu olan regionlarda (ABŞ, Avropa, Yaponiya) 50 və 100 MB arasındakı fərq hiss olunmaz ola bilər. İnkişaf etməkdə olan regionlarda (Hindistan, İndoneziya, Braziliya) hər əlavə meqabayt tarif limitləri və mobil internet sürəti səbəbindən quraşdırma konversiyasını azaldır. Google Play APK ölçüsünü 200 MB ilə məhdudlaşdırır, lakin ölçünü 100 MB-dan aşağı saxlamağı tövsiyə edir.
iOS App Store üçün mobil şəbəkə ilə yükləmənin maksimum ölçüsü 200 MB-dır (2023-cü ilə qədər 150 MB idi). IPA bu həddi keçərsə, istifadəçi tətbiqi yalnız Wi-Fi vasitəsilə quraşdıra bilər. Apple həmçinin App Thinning-i dəstəkləyir ki, bura Slicing, Bitcode və On-Demand Resources daxildir — proqramçının iştirakı olmadan müəyyən cihazda quraşdırma ölçüsünü avtomatik azaldan texnologiyalar.
Tətbiq ölçüsü təkcə quraşdırma konversiyasına deyil, həm də retention-ə, yeniləmə tezliyinə və ilk işə salınma sürətinə təsir edir. Hər əlavə meqabayt istifadəçi ilə məhsulunuz arasında maneədir.
Google I/O 2024 məlumatlarına görə, APK-nın 10 MB azaldılması quraşdırma konversiyasını orta hesabla 3,5% artırır. 150+ MB ölçüsündə tətbiqlər üçün konversiya 50 MB ölçüsündə eyni sinif tətbiqlərlə müqayisədə 20–30% aşağı ola bilər. Effekt xüsusilə Google Play-də nəzərə çarpır, burada istifadəçi quraşdırmadan əvvəl ölçünü görür. App Store-da ölçü tətbiq səhifəsində göstərilir və məhdud tarifi olan istifadəçilər quraşdırmanı təxirə salır Wi-Fi-ya qədər, sonra isə çox vaxt tətbiqi unudurlar.
Böyük tətbiq hava ilə daha az yenilənir — istifadəçilər yamaların yüklənməsini Wi-Fi-ya qədər təxirə salır, kritik təhlükəsizlik düzəlişlərini qaçırırlar. Google Play Incremental Updates-dən (10 MB-a qədər yamalar) istifadə etməyə imkan verir, lakin tam yenidənqurma yenə də bütün APK və ya AAB-ni yükləyir. Apple App Store Delta Updates istifadə edir, yalnız dəyişdirilmiş faylları ötürür, lakin hətta delta resurslar dəyişdikdə əhəmiyyətli ola bilər.
Ölçü birbaşa ilk işə salınma vaxtına təsir edir: tətbiq resursları açmalı, kodu kompilyasiya etməli (Android) və ya keşi imzalamalıdır (iOS). 200 MB ölçüsündə tətbiq orta cihazda 50 MB ölçüsündə tətbiqdən 10–15 saniyə gec işə düşə bilər. Bu Onboarding Experience-i pisləşdirir — istifadəçi yüklənməni gözləmədən tətbiqi bağlaya bilər.
| Ölçü | Yükləmə vaxtı (3G) | İlk işə salınma vaxtı |
|---|---|---|
| 30 MB | –20 san | 3–5 san |
| 100 MB | –70 san | 5–8 san |
| 200 MB | –140 san | 10–15 san |
Resurslar — şəkillər, şriftlər, səslər, video — tipik mobil tətbiqin ölçüsünün 60–80%-ni təşkil edir. Resursların optimallaşdırılması minimal əmək sərfi ilə ən böyük qazancı verir. Əsas istiqamətlər: sıxışdırma, dublikatların və istifadə olunmayan aktivlərin silinməsi, düzgün formatların seçilməsi.
WebP — Google-dan şəkil formatı, eyni vizual keyfiyyətdə PNG-dən 25–35%, JPEG-dən isə 15–20% daha yaxşı sıxışdırma təmin edir. Android WebP-ni API 18-dən etibarən yerli olaraq dəstəkləyir. iOS üçün WebP SDWebImage və ya Kingfisher kitabxanası vasitəsilə dəstəklənir, iOS 17-dən isə yerli dəstək ortaya çıxdı. AVIF — daha müasir format, WebP-ə nisbətən əlavə 10–15% qənaət verir, lakin daha yavaş dekodlaşdırma ilə.
İstifadə olunmayan resursların silinməsi — ölçü azaltmağın ən sadə yoludur. Android-də Android Studio-da refaktorinqdən istifadə edin: Analyze → Run Inspection → Unused Resources. iOS-da — Build Settings → Remove Unused Resources. Çox vaxt layihələrdə əvvəlki versiyalardan qalan spritelar, köhnə ikonlar, istifadə olunmayan başlanğıc ekran şəkilləri qalır ki, bunlar şişirdir ölçünü heç bir funksional yük olmadan.
| Format | PNG-yə nisbətən sıxışdırma | Dəstək |
|---|---|---|
| PNG | — | Bütün platformalar |
| WebP | 25–35% | Android yerli, iOS kitabxanalar vasitəsilə |
| AVIF | 35–45% | Android 12+, iOS 17+ |
| JPEG XR | 30–40% | Yalnız Windows |
Xüsusi şriftlər 5–15 MB yer tuta bilər, xüsusən də bütün dəst bağlanıbsa (bütün stillər: Regular, Bold, Italic, BoldItalic). Yalnız zəruri stillərdən və simvol alt çoxluqlarından subsetting vasitəsilə istifadə edin — tətbiq tərəfindən dəstəklənməyən dillər üçün gliflərin silinməsi. Google Fonts və Transfonter kimi xidmətlər minimal simvol dəsti yaratmağa imkan verir. Səslər üçün WAV və sıxışdırılmamış formatlar əvəzinə AAC/HE-AAC istifadə edin — keyfiyyət itkisi olmadan 90%-ə qədər qənaət.
Kod tətbiq ölçüsünün 20–40%-ni təşkil edir, lakin onun optimallaşdırılması resurslardan daha çətindir, çünki asılılıqların təhlili, obfuskasiya və funksionallığı pozma riski olmadan ölü kodun silinməsini tələb edir.
ProGuard — Android üçün kod obfuskasiyası, minifikasiyası və optimallaşdırılmasını həyata keçirən alət. R8 — onun varisi, Android Gradle Plugin-in tərkibində, daha sürətli və səmərəli işləyir. R8 istifadə olunmayan sinifləri və metodları silir, dəyişən adlarını qısaldır və təlimatların sayını azaltmaq üçün kodu yenidən yazır. R8 ilə DEX fayllarının tipik ölçü azalması 30–50% təşkil edir.
// build.gradle — R8-nin minifikasiya üçün konfiqurasiyası
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt')
shrinkResources true
}
}
}
Kitabxanalar — şişkin ölçünün ümumi səbəbi. Bir kitabxana tətbiq üçün birbaşa faydası olmadan ölçünü 5–20 MB artıran tranzitiv asılılıqlar çəkə bilər. Android üçün Gradle Version Catalog və iOS üçün Swift Package Manager istifadə edin, asılılıqları açıq şəkildə göstərin. Android Studio-da Build Analyzer və ya Xcode Build Timeline ilə ölçünü təhlil edin. Ağır kitabxanaları daha yüngül alternativlərlə əvəz edin: məsələn, OkHttp (3 MB) Apache HTTP (15 MB) əvəzinə.
Dead Code Stripping — Xcode-da linkləmə mərhələsində istifadə olunmayan metodların və siniflərin avtomatik silinməsi. Build Settings → Dead Code Stripping = YES vasitəsilə aktivləşdirilir. Bitcode — Apple-ın müxtəlif arxitekturalar üçün yenidən kompilyasiya edə biləcəyi, istifadə olunmayan funksiyaları silən aralıq təsvir. Lakin Xcode 14-dən Bitcode isteğe bağlı oldu və ölçü azalmasına töhfəsi Objective-C layihələri üçün 5–15%, Swift üçün isə daha azdır.
App Thinning — Apple-ın quraşdırılan tətbiqin ölçüsünü yalnız müəyyən cihaz üçün lazım olan resursları çatdırmaqla avtomatik azaldan texnologiyası. Üç komponentdən ibarətdir: Slicing, On-Demand Resources və Bitcode. Android-də analoqu Dynamic Delivery ilə Android App Bundle (AAB)-dir.
AAB — Google Play-də nəşr formatı, burada mağaza hər bir cihaz üçün yalnız onun arxitekturası (armeabi-v7a, arm64-v8a), ekran sıxlığı (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) və dilləri üçün resursları daxil etməklə APK yaradır. Universal APK-dan AAB-yə keçid zamanı quraşdırma ölçüsünün tipik azalması 20–40% təşkil edir. Play Feature Delivery modulları tələb üzrə yükləməyə imkan verir, Install-time modulları isə baza quraşdırmasına daxil edilir.
// build.gradle — AAB və Dynamic Features konfiqurasiyası
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
On-Demand Resources (ODR) — iOS mexanizmi, burada resurslar (oyun səviyyələri, yüksək keyfiyyətli şəkillər, video) Apple serverlərindən yalnız istifadəçiyə həqiqətən lazım olduqda yüklənir. İlkin quraşdırmanın ölçüsü 50–80% azaldıla bilər. Resurslar üç kateqoriyaya bölünür: Initial Install Tags (quraşdırma zamanı yüklənir), Prefetched Tag Order (quraşdırmadan sonra fonda yüklənir) və On-Demand (yalnız tələb əsasında yüklənir). Apple ODR-dən məzmun üçün istifadə etməyi tövsiyə edir ki, ilk ekranda lazım deyil: oyun səviyyələri, əlavə məzmun, video təlimatlar.
SwiftUI ODR-ni Bundle.module atributu vasitəsilə, UIKit isə NSBundleResourceRequest vasitəsilə dəstəkləyir. Unity və Unreal Engine oyunları üçün ODR yerli səviyyədə inteqrasiya olunur. Əsas məhdudiyyət — ODR resursları yer çatışmazlığı olduqda sistem tərəfindən silinir, buna görə də iş üçün kritik məlumatlar əsas kompilyasiyaya daxil edilməlidir.
Tez-tez verilən suallar
50 MB-dan az — maksimum quraşdırma konversiyası üçün ideal ölçü. 50–100 MB — əksər tətbiqlər üçün məqbuldur. 100 MB-dan yuxarı — ölçü ilə əsaslandırma tələb olunur (oyunlar, oflayn xəritələr, məzmun redaktorları).
Resurslar daha az vaxtda daha çox qazanc verir. İstifadə olunmayan aktivlərin silinməsi, PNG-nin WebP-yə çevrilməsi və səslərin sıxışdırılması ilə başlayın. Sonra R8 və ya Dead Code Stripping vasitəsilə kod optimallaşdırmasına keçin.
Google Play APK yaradır yalnız müəyyən cihaz üçün: arm64-v8a kodu, xhdpi resursları, lazımi dil. Universal APK bütün variantları bir dəfəyə ehtiva edir ki, bu da ölçünü 1,5–2 dəfə artırır. AAB bu problemi mağaza səviyyəsində həll edir.
Dolayı yolla. Böyük ölçü JIT/AOT kompilyasiyası üçün daha çox kod, yaddaşa yükləmək üçün daha çox resurs və manifestləri pars etmək üçün daha çox vaxt deməkdir. Lakin iş vaxtı performansa birbaşa təsir minimaldır — ölçü quraşdırmaya və ilk işə salınmaya təsir edir.
Install-time — əsas quraşdırmanın hissəsi, dərhal mövcuddur. On-Demand — ilk müraciət zamanı yüklənir, ilkin quraşdırmaya daxil deyil. On-Demand-ı 20%-dən az istifadəçiyə lazım olan funksiyalar üçün istifadə edin: diaqnostika, dərsliklər, AR filtrləri.
Nəticə
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