Pro tip: můžete také přetáhnout soubory APK do editoru a otevřít jeAPK Analyzer umožňuje otevřít a zkontrolovat obsah libovolného souboru APK, který máte v počítači, ať už sestaveného z místního projektu Android Studia, nebo získaného ze sestavovacího serveru či jiného úložiště artefaktů. Nemusí být sestaven z žádného projektu, který máte otevřený v aplikaci Android Studio, a nepotřebujete zdrojový kód daného souboru APK.
Poznámka: APK Analyzer funguje nejlépe se sestaveními pro vydání. Pokud potřebujete analyzovat ladicí sestavení aplikace, ujistěte se, že používáte APK, který není instrumentován pro okamžité spuštění. K jeho získání můžete použít příkaz Sestavit → Sestavit APK. Zda jste otevřeli instrumentovaný soubor APK pro okamžité spuštění, zjistíte tak, že zkontrolujete přítomnost souboru instant-run.zip uvnitř archivu.
Použití analyzátoru APK je skvělý způsob, jak se prohrabat soubory APK a zjistit jejich strukturu, ověřit obsah souboru před vydáním nebo odladit některé běžné problémy, včetně problémů s velikostí APK a DEX.
Analyzátor APK vám může poskytnout mnoho užitečných a použitelných informací o velikosti aplikace. V horní části obrazovky můžete vidět Raw File Size (Surová velikost souboru), což je pouze velikost APK na disku. Velikost ke stažení ukazuje odhad, kolik dat bude použito ke stažení aplikace s přihlédnutím ke kompresi použité Obchodem Play.
Seznam souborů a složek je seřazen podle celkové velikosti sestupně. Díky tomu se skvěle hodí pro identifikaci nízko visících plodů optimalizace velikosti APK. Při každém prohloubení složky se zobrazí zdroje a další entity, které v souboru APK zabírají nejvíce místa.
V tomto příkladu jsem si při zkoumání APK z hlediska možného zmenšení velikosti mohl okamžitě všimnout, že třísnímková animace PNG je jedinou největší věcí v našich kreslitelných zdrojích, která váží 1,5 kg.5 MB, a to jen pro hustotu xxhdpi!
Protože tyto obrázky vypadají jako ideální kandidáti na uložení jako vektory, našli jsme zdrojové soubory kresby a importovali je jako VectorDrawables pomocí nové podpory PSD v nástroji pro import vektorových prostředků v aplikaci Android Studio 2.2.
Pokud jsme prošli stejným postupem pro další zbývající animaci (instruction_touch_*.png) a odstranili tyto soubory PNG ve všech hustotách, podařilo se nám ušetřit více než 5 MB. Abychom zachovali zpětnou kompatibilitu, použili jsme VectorDrawableCompat z podpůrné knihovny.
Při pohledu na ostatní složky zdrojů bylo snadné odhalit některé nekomprimované soubory WAV, které bylo možné převést na OGG, což znamenalo ještě větší úsporu, aniž bychom se dotkli jediného řádku kódu.
Další na seznamu věcí ke kontrole byla složka lib/, která obsahuje nativní knihovny pro tři podporovaná ABI.
Bylo rozhodnuto, že v našem sestavení Gradle použijeme podporu rozdělení APK a vytvoříme samostatné verze aplikace pro každé ABI.
Další jsem rychle prohlédl soubor AndroidManifest.xml a všiml jsem si, že v souboru <application> chybí atribut android:extractNativeLibs. Nastavení tohoto atributu na hodnotu false může ušetřit nějaké místo v zařízení, protože zabrání zkopírování nativních knihoven z APK do souborového systému. Jediným požadavkem je, aby byly soubory zarovnány na stránku a uloženy uvnitř APK bez komprese, což je podporováno novým balíčkovacím programem v zásuvném modulu Android Gradle verze 2.2.0+.
Po provedení těchto úprav jsem byl zvědavý, jak si nová verze aplikace povede ve srovnání s předchozí. Za tímto účelem jsem zkontroloval zdrojový kód z revize git, kterou jsem začal, zkompiloval APK a uložil jej do jiné složky. Poté jsem použil funkci Porovnat s…, abych se podíval na rozpis rozdílů ve velikosti mezi starým a novým sestavením.
Udělali jsme velký pokrok v oblasti zdrojů a nativních knihoven, celkem jsme ušetřili 17 MB při velmi malých změnách v aplikaci. Vidím však, že naše velikost DEX regresovala, přičemž soubor classes2.dex narostl o 400 KB.
Debugování problémů DEX
V tomto případě rozdíl vznikl aktualizací našich závislostí na novější verze a přidáním nových knihoven. Proguard a Multidex již byly pro naše sestavení povoleny, takže s velikostí našeho DEX se toho moc dělat nedá. Přesto je analyzátor APK skvělým nástrojem pro ladění případných problémů s tímto nastavením, zejména pokud povolujete Multidex nebo Proguard pro svůj projekt poprvé.
Když kliknete na libovolný soubor DEX, zobrazí se přehled, kolik tříd a metod definuje a kolik celkem obsahuje referencí (právě reference se započítávají do limitu 64K v jednom souboru DEX). Na tomto ukázkovém snímku je aplikace těsně před dosažením limitu, což znamená, že v blízké budoucnosti bude muset MultiDex rozdělit třídy do samostatných souborů.
Můžete se ponořit do balíčků a zjistit, které z nich využívají všechny reference. V tomto případě vidíme, že hlavní příčinou této situace jsou knihovna Support a služby Google Play: