App Size Optimization — скуп техника усмерених на смањење величине инсталационог фајла (APK, AAB, IPA) без губитка функционалности. Према Android Reduce APK Size Guide, сваки мегабајт смањења величине може повећати конверзију инсталација за 1–2% у регионима са спорим интернетом. App Thinning — кључна технологија компаније Apple која доставља само оне ресурсе који су потребни одређеном уређају.
Главне тачке
App Size Optimization — дисциплина развоја мобилних апликација усмерена на минимизацију величине инсталационог пакета апликације. Укључује уклањање мртвог кода и ресурса, компресију слика, оптимизацију библиотека, фрагментацију компилације за различите архитектуре и коришћење технологија доставе на захтев.
Величина апликације неравномерно утиче на различите сегменте корисника. У регионима са развијеном мобилном инфраструктуром (САД, Европа, Јапан) разлика између 50 и 100 MB може бити неприметна. У регионима у развоју (Индија, Индонезија, Бразил) сваки додатни мегабајт смањује конверзију инсталација због лимита тарифа и брзине мобилног интернета. Google Play ограничава величину APK на 200 MB, али препоручује држање величине испод 100 MB.
За iOS App Store максимална величина преузимања преко мобилне мреже је 200 MB (до 2023. године је било 150 MB). Ако IPA премашује ово ограничење, корисник може да инсталира апликацију само преко Wi-Fi-ја. Apple такође подржава App Thinning, који укључује Slicing, Bitcode и On-Demand Resources — технологије које аутоматски смањују величину инсталације на одређеном уређају без учешћа програмера.
Величина апликације утиче не само на конверзију инсталација, већ и на ретенцију, учесталост ажурирања и брзину првог покретања. Сваки додатни мегабајт је баријера између корисника и коришћења вашег производа.
Према подацима Google I/O 2024, смањење APK за 10 MB повећава конверзију инсталација у просеку за 3,5%. За апликације величине 150+ MB, конверзија може бити 20–30% нижа него за апликације исте класе величине 50 MB. Ефекат је посебно изражен у Google Play-у, где корисник види величину пре инсталације. У App Store-у величина се приказује на страници апликације, а корисници са ограниченим тарифним планом одлажу инсталацију до Wi-Fi-ја, након чега често забораве на апликацију.
Велика апликација се ређе ажурира преко ваздуха — корисници одлажу преузимање закрпа до Wi-Fi-ја, пропуштајући критичне безбедносне исправке. Google Play омогућава коришћење Incremental Updates (закрпе до 10 MB), али потпуна поновна инсталација ипак преузима цео APK или AAB. Apple App Store користи Delta Updates, преносећи само измењене фајлове, али чак и делта може бити значајна при промени ресурса.
Величина директно утиче на време првог покретања: апликација мора да распакује ресурсе, компајлира код (Android) или потпише кеш (iOS). Апликација величине 200 MB може да се покреће 10–15 секунди дуже од апликације величине 50 MB на просечном уређају. То погоршава Onboarding Experience — корисник може да затвори апликацију не чекајући учитавање.
| Величина | Време преузимања (3G) | Време првог покретања |
|---|---|---|
| 30 MB | –20 сек | 3–5 сек |
| 100 MB | –70 сек | 5–8 сек |
| 200 MB | –140 сек | 10–15 сек |
Ресурси — слике, фонтови, звуци, видео — чине 60–80% величине типичне мобилне апликације. Оптимизација ресурса даје највећу добит уз минималан утрошак рада. Главни правци: компресија, уклањање дупликата и неискоришћених асета, избор правих формата.
WebP — формат слика од Google-а, који обезбеђује 25–35% бољу компресију од PNG-а и 15–20% бољу од JPEG-а уз исти визуелни квалитет. Android подржава WebP изворно од API 18. За iOS, WebP се подржава преко библиотеке SDWebImage или Kingfisher, а од iOS 17 појавила се изворна подршка. AVIF — модернији формат, који даје додатних 10–15% уштеде у односу на WebP, али са споријим декодирањем.
Уклањање неискоришћених ресурса — најједноставнији начин за смањење величине. У Android-у користите рефакторисање са Android Studio: Analyze → Run Inspection → Unused Resources. У iOS-у — Build Settings → Remove Unused Resources. Често у пројектима остају спрајтови из ранијих верзија, старе иконе, неискоришћене слике почетног екрана које надувавају величину без икаквог функционалног оптерећења.
| Формат | Компресија у односу на PNG | Подршка |
|---|---|---|
| PNG | — | Све платформе |
| WebP | 25–35% | Android изворно, iOS преко библиотека |
| AVIF | 35–45% | Android 12+, iOS 17+ |
| JPEG XR | 30–40% | Само Windows |
Прилагођени фонтови могу заузимати 5–15 MB, посебно ако је повезана цела породица (сви стилови: Regular, Bold, Italic, BoldItalic). Користите само потребне стилове и подскупове знакова кроз subsetting — уклањање глифова за језике које апликација не подржава. Услуге попут Google Fonts и Transfonter омогућавају креирање минималног скупа знакова. За звукове користите AAC/HE-AAC уместо WAV и некомпримованих формата — уштеда до 90% без губитка квалитета.
Код чини 20–40% величине апликације, али његова оптимизација је тежа од ресурса, јер захтева анализу зависности, обфускацију и уклањање мртвог кода без ризика од нарушавања функционалности.
ProGuard — алат за Android који врши обфускацију, минификацију и оптимизацију кода. R8 — његов наследник, уграђен у Android Gradle Plugin, ради брже и ефикасније. R8 уклања неискоришћене класе и методе, скраћује имена променљивих и преписује код ради смањења броја инструкција. Типично смањење величине DEX фајлова помоћу R8 је 30–50%.
// build.gradle — подешавање R8 за минификацију
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt')
shrinkResources true
}
}
}
Библиотеке — чест узрок надуване величине. Једна библиотека може да повуче транзитивне зависности које повећавају величину за 5–20 MB без директне користи за апликацију. Користите Gradle Version Catalog за Android и Swift Package Manager за iOS са експлицитним навођењем зависности. Анализирајте величину помоћу Build Analyzer-а у Android Studio или Xcode Build Timeline-а. Замењујте тешке библиотеке лакшим алтернативама: на пример, OkHttp (3 MB) уместо Apache HTTP (15 MB).
Dead Code Stripping — аутоматско уклањање неискоришћених метода и класа у фази повезивања у Xcode-у. Укључује се кроз Build Settings → Dead Code Stripping = YES. Bitcode — посредна репрезентација коју Apple може да прекомпајлира за различите архитектуре, уклањајући неискоришћене функције. Међутим, од Xcode 14 Bitcode је постао опционалан, а његов допринос смањењу величине је 5–15% за Objective-C пројекте и мање за Swift.
App Thinning — технологија компаније Apple која аутоматски смањује величину инсталиране апликације достављањем само оних ресурса који су потребни одређеном уређају. Састоји се од три компоненте: Slicing, On-Demand Resources и Bitcode. У Android-у аналог је Android App Bundle (AAB) са Dynamic Delivery.
AAB — формат објављивања у Google Play-у, при чему продавница генерише APK за сваки уређај посебно, укључујући само ресурсе за његову архитектуру (armeabi-v7a, arm64-v8a), густину екрана (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) и језике. Типично смањење величине инсталације при преласку са универзалног APK на AAB је 20–40%. Play Feature Delivery омогућава преузимање модула на захтев, док се Install-time модули укључују у основну инсталацију.
// build.gradle — подешавање AAB и Dynamic Features
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
On-Demand Resources (ODR) — iOS механизам при којем се ресурси (нивои игре, слике високе резолуције, видео) преузимају са Apple сервера само када су стварно потребни кориснику. Величина почетне инсталације може бити смањена за 50–80%. Ресурси се деле на три категорије: Initial Install Tags (преузимају се при инсталацији), Prefetched Tag Order (преузимају се у позадини након инсталације) и On-Demand (преузимају се само на захтев). Apple препоручује коришћење ODR за садржај који није потребан на првом екрану: нивои игре, додатни садржај, видео упутства.
SwiftUI подржава ODR кроз атрибут Bundle.module, а UIKit кроз NSBundleResourceRequest. За игре на Unity и Unreal Engine, ODR се интегрише на нивоу изворног омотача. Главно ограничење — ODR ресурсе систем брише при недостатку простора, због чега подаци критични за рад морају бити укључени у главну компилацију.
Често постављана питања
Мање од 50 MB — идеална величина за максималну конверзију инсталација. 50–100 MB — прихватљиво за већину апликација. Преко 100 MB — захтева оправдање величином (игре, офлајн мапе, уређивачи садржаја).
Ресурси дају већу добит за краће време. Почните са уклањањем неискоришћених асета, конверзијом PNG у WebP и компресијом звукова. Затим пређите на оптимизацију кода кроз R8 или Dead Code Stripping.
Google Play генерише APK само за одређени уређај: arm64-v8a код, xhdpi ресурси, потребан језик. Универзални APK садржи све варијанте одједном, што повећава величину 1,5–2 пута. AAB решава овај проблем на нивоу продавнице.
Индиректно. Велика величина значи више кода за JIT/AOT компилацију, више ресурса за учитавање у меморију и више времена за парсирање манифеста. Међутим, директан утицај на перформансе у runtime-у је минималан — величина утиче на инсталацију и прво покретање.
Install-time — део основне инсталације, доступан одмах. On-Demand — преузима се при првом захтеву, не улази у почетну инсталацију. Користите On-Demand за функције које су потребне мање од 20% корисника: дијагностика, туторијали, AR филтери.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође