App Size Optimization — soubor technik zaměřených na zmenšení instalačního souboru (APK, AAB, IPA) bez ztráty funkčnosti. Podle Android Reduce APK Size Guide může každý megabajt zmenšení velikosti zvýšit konverzi instalací o 1–2% v regionech s pomalým internetem. App Thinning — klíčová technologie Apple, doručující pouze ty zdroje, které potřebuje konkrétní zařízení.
Hlavní body
App Size Optimization — disciplína vývoje mobilních aplikací zaměřená na minimalizaci velikosti instalačního balíčku aplikace. Zahrnuje odstraňování mrtvého kódu a zdrojů, kompresi obrázků, optimalizaci knihoven, fragmentaci kompilace pro různé architektury a využití technologií doručování na vyžádání.
Velikost aplikace nerovnoměrně ovlivňuje různé segmenty uživatelů. V regionech s rozvinutou mobilní infrastrukturou (USA, Evropa, Japonsko) může být rozdíl mezi 50 a 100 MB nepostřehnutelný. V rozvojových regionech (Indie, Indonésie, Brazílie) každý další megabajt snižuje konverzi instalací kvůli limitům tarifů a rychlosti mobilního internetu. Google Play omezuje velikost APK na 200 MB, ale doporučuje udržovat velikost pod 100 MB.
Pro iOS App Store je maximální velikost stahování přes mobilní síť 200 MB (do roku 2023 to bylo 150 MB). Pokud IPA překročí tento limit, uživatel může aplikaci nainstalovat pouze přes Wi-Fi. Apple také podporuje App Thinning, který zahrnuje Slicing, Bitcode a On-Demand Resources — technologie automaticky zmenšující velikost instalace na konkrétním zařízení bez účasti vývojáře.
Velikost aplikace ovlivňuje nejen konverzi instalací, ale také retenci, frekvenci aktualizací a rychlost prvního spuštění. Každý další megabajt je bariérou mezi uživatelem a používáním vašeho produktu.
Podle údajů Google I/O 2024 zvyšuje zmenšení APK o 10 MB konverzi instalací v průměru o 3,5%. Pro aplikace o velikosti 150+ MB může být konverze o 20–30% nižší než u aplikací stejné třídy o velikosti 50 MB. Efekt je zvláště patrný v Google Play, kde uživatel vidí velikost před instalací. V App Store se velikost zobrazuje na stránce aplikace a uživatelé s omezeným tarifem odkládají instalaci na Wi-Fi, načež často na aplikaci zapomenou.
Velká aplikace se méně často aktualizuje vzduchem — uživatelé odkládají stahování záplat na Wi-Fi, čímž zmeškají kritické bezpečnostní opravy. Google Play umožňuje použití Incremental Updates (záplaty do 10 MB), ale úplná přeinstalace stejně stahuje celý APK nebo AAB. Apple App Store používá Delta Updates, přenáší pouze změněné soubory, ale i delta může být při změně zdrojů významná.
Velikost přímo ovlivňuje čas prvního spuštění: aplikace musí rozbalit zdroje, zkompilovat kód (Android) nebo podepsat mezipaměť (iOS). Aplikace o velikosti 200 MB může na průměrném zařízení startovat o 10–15 sekund déle než aplikace o velikosti 50 MB. To zhoršuje Onboarding Experience — uživatel může aplikaci zavřít, aniž by počkal na načtení.
| Velikost | Doba stahování (3G) | Doba prvního spuštění |
|---|---|---|
| 30 MB | –20 s | 3–5 s |
| 100 MB | –70 s | 5–8 s |
| 200 MB | –140 s | 10–15 s |
Zdroje — obrázky, písma, zvuky, video — tvoří 60–80% velikosti typické mobilní aplikace. Optimalizace zdrojů přináší největší zisk s minimálním úsilím. Hlavní směry: komprese, odstraňování duplikátů a nepoužívaných aktiv, výběr správných formátů.
WebP — formát obrázků od Google, poskytující o 25–35% lepší kompresi než PNG a o 15–20% lepší než JPEG při stejné vizuální kvalitě. Android podporuje WebP nativně od API 18. Pro iOS je WebP podporován prostřednictvím knihovny SDWebImage nebo Kingfisher, a od iOS 17 je k dispozici nativní podpora. AVIF — modernější formát, poskytující dalších 10–15% úspory oproti WebP, ale s pomalejším dekódováním.
Odstranění nepoužívaných zdrojů — nejjednodušší způsob, jak zmenšit velikost. V Androidu použijte refaktorování v Android Studio: Analyze → Run Inspection → Unused Resources. V iOS — Build Settings → Remove Unused Resources. Často v projektech zůstávají sprite z dřívějších verzí, staré ikony, nepoužívané obrázky úvodní obrazovky, které nafukují velikost bez jakéhokoli funkčního zatížení.
| Formát | Komprese oproti PNG | Podpora |
|---|---|---|
| PNG | — | Všechny platformy |
| WebP | 25–35% | Android nativně, iOS přes knihovny |
| AVIF | 35–45% | Android 12+, iOS 17+ |
| JPEG XR | 30–40% | Pouze Windows |
Vlastní písma mohou zabírat 5–15 MB, zejména pokud je připojena celá rodina (všechny styly: Regular, Bold, Italic, BoldItalic). Používejte pouze potřebné styly a podmnožiny znaků pomocí subsetting — odstraňování glyfů pro jazyky, které aplikace nepodporuje. Služby jako Google Fonts a Transfonter umožňují vytvořit minimální sadu znaků. Pro zvuky používejte AAC/HE-AAC místo WAV a nekomprimovaných formátů — úspora až 90% bez ztráty kvality.
Kód tvoří 20–40% velikosti aplikace, ale jeho optimalizace je obtížnější než u zdrojů, protože vyžaduje analýzu závislostí, obfuskaci a odstranění mrtvého kódu bez rizika narušení funkčnosti.
ProGuard — nástroj pro Android provádějící obfuskaci, minifikaci a optimalizaci kódu. R8 — jeho nástupce, integrovaný v Android Gradle Plugin, pracuje rychleji a efektivněji. R8 odstraňuje nepoužívané třídy a metody, zkracuje názvy proměnných a přepisuje kód pro snížení počtu instrukcí. Typické zmenšení velikosti DEX souborů pomocí R8 je 30–50%.
// build.gradle — konfigurace R8 pro minifikaci
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(
'proguard-android-optimize.txt')
shrinkResources true
}
}
}
Knihovny — častá příčina nafouknuté velikosti. Jedna knihovna může přinést tranzitivní závislosti, které zvyšují velikost o 5–20 MB bez přímého užitku pro aplikaci. Používejte Gradle Version Catalog pro Android a Swift Package Manager pro iOS s explicitním uvedením závislostí. Analyzujte velikost pomocí Build Analyzer v Android Studio nebo Xcode Build Timeline. Nahrazujte těžké knihovny lehčími alternativami: například OkHttp (3 MB) místo Apache HTTP (15 MB).
Dead Code Stripping — automatické odstraňování nepoužívaných metod a tříd ve fázi linkování v Xcode. Aktivuje se přes Build Settings → Dead Code Stripping = YES. Bitcode — mezilehlá reprezentace, kterou může Apple překompilovat pro různé architektury a odstranit nepoužívané funkce. Od Xcode 14 je však Bitcode volitelný a jeho příspěvek ke zmenšení velikosti je 5–15% pro Objective-C projekty a méně pro Swift.
App Thinning — technologie Apple automaticky zmenšující velikost instalované aplikace doručováním pouze těch zdrojů, které jsou potřebné pro konkrétní zařízení. Skládá se ze tří komponent: Slicing, On-Demand Resources a Bitcode. V Androidu je analogem Android App Bundle (AAB) s Dynamic Delivery.
AAB — formát publikace v Google Play, při kterém obchod generuje APK pro každé zařízení zvlášť, včetně pouze zdrojů pro jeho architekturu (armeabi-v7a, arm64-v8a), hustotu obrazovky (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) a jazyky. Typické zmenšení velikosti instalace při přechodu z univerzálního APK na AAB je 20–40%. Play Feature Delivery umožňuje stahovat moduly na vyžádání, zatímco moduly Install-time jsou zahrnuty v základní instalaci.
// build.gradle — konfigurace AAB a Dynamic Features
android {
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
abi {
enableSplit = true
}
}
}
On-Demand Resources (ODR) — mechanismus iOS, při kterém se zdroje (herní úrovně, obrázky ve vysokém rozlišení, video) stahují ze serverů Apple pouze tehdy, když je uživatel skutečně potřebuje. Velikost počáteční instalace může být snížena o 50–80%. Zdroje se dělí do tří kategorií: Initial Install Tags (stahují se při instalaci), Prefetched Tag Order (stahují se na pozadí po instalaci) a On-Demand (stahují se pouze na vyžádání). Apple doporučuje používat ODR pro obsah, který není potřeba na první obrazovce: úrovně her, doplňkový obsah, video návody.
SwiftUI podporuje ODR prostřednictvím atributu Bundle.module a UIKit prostřednictvím NSBundleResourceRequest. Pro hry na Unity a Unreal Engine je ODR integrován na úrovni nativního obalu. Hlavní omezení — zdroje ODR jsou systémem odstraněny při nedostatku místa, proto kritická data pro provoz musí být zahrnuta v hlavní kompilaci.
Často kladené otázky
Méně než 50 MB — ideální velikost pro maximální konverzi instalací. 50–100 MB — přijatelné pro většinu aplikací. Nad 100 MB — vyžaduje ospravedlnění velikostí (hry, offline mapy, editory obsahu).
Zdroje přinášejí větší zisk za kratší dobu. Začněte odstraněním nepoužívaných aktiv, konverzí PNG na WebP a kompresí zvuků. Poté přejděte k optimalizaci kódu pomocí R8 nebo Dead Code Stripping.
Google Play generuje APK pouze pro konkrétní zařízení: kód arm64-v8a, zdroje xhdpi, požadovaný jazyk. Univerzální APK obsahuje všechny varianty najednou, což zvětšuje velikost 1,5–2krát. AAB řeší tento problém na úrovni obchodu.
Nepřímo. Velká velikost znamená více kódu pro JIT/AOT kompilaci, více zdrojů k načtení do paměti a více času na parsování manifestů. Přímý dopad na výkon za běhu je však minimální — velikost ovlivňuje instalaci a první spuštění.
Install-time — součást základní instalace, okamžitě dostupný. On-Demand — stahuje se při prvním vyžádání, není součástí počáteční instalace. Používejte On-Demand pro funkce, které potřebuje méně než 20% uživatelů: diagnostika, tutoriály, AR filtry.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také