Každý vysvetlený formát súboru pre Android: APK, AAB, XAPK, APKS, APKM, OBB a ďalšie

A filing tray with tabs labeled APK, AAB, XAPK, APKS, APKM and OBB

Ekosystém Android používa rôzne formáty súborov na balenie, distribúciu a ukladanie údajov aplikácií. Ak ste si niekedy stiahli aplikáciu zo zdroja tretej strany, pravdepodobne ste sa stretli s príponami súborov nad rámec známeho súboru APK. Formáty ako XAPK, APKS, APKM, AAB a OBB slúžia na konkrétny účel v životnom cykle aplikácie pre Android.

Táto príručka má byť úplnou referenciou pre každý hlavný formát súborov systému Android. Vývojári, pokročilí používatelia, ktorí sťahujú aplikácie bokom, a zvedaví čitatelia, ktorí chcú len vedieť, čo tieto súbory skutočne obsahujú, nájdu každý formát vysvetlený v jednoduchom jazyku nižšie.

APK: Android Package Kit

APK je základným formátom súborov pre aplikácie pre Android. Je to štandardný inštalačný formát od začiatku Androidu a zostáva formátom, ktorý operačný systém Android natívne chápe pre inštaláciu aplikácií.

Čo obsahuje

Súbor APK je v podstate archív ZIP so špecifickou vnútornou štruktúrou:

  • AndroidManifest.xml, binárny súbor XML deklarujúci názov balíka aplikácie, komponenty, povolenia a požiadavky
  • classes.dex (a classes2.dex atď.), Kompilovaný bajtový kód Dalvik obsahujúci kód Java/Kotlin aplikácie
  • resources.arsc, zostavená tabuľka zdrojov mapujúca ID prostriedkov na ich hodnoty
  • res/, adresár obsahujúci zdroje, ako sú rozloženia, výkresy a reťazce, na ktoré odkazuje ID
  • assets/, súbory nespracovaných aktív, ku ktorým má aplikácia prístup za behu cez AssetManager
  • lib/, Natívne knižnice usporiadané podľa architektúry CPU (napr). lib/arm64-v8a/
  • META-INF/, Podpisové súbory a informácie o certifikátoch

Keď sa s tým stretnete

Súbory APK sú to, čo si stiahnete pri bočnom načítaní aplikácií zo zdrojov tretích strán. Sú to tiež to, čo sa nainštaluje do vášho zariadenia z Obchodu Play, hoci moderné inštalácie Obchodu Play často používajú rozdelené súbory APK generované z balíkov aplikácií.

Ako to zvládnuť

Súbory APK je možné nainštalovať priamo do systému Android ich otvorením pomocou správcu súborov alebo pomocou adb install. Môžete tiež preskúmať ich obsah premenovaním rozšírenia na .zip a extrahovaním alebo použitím nášho Verifikátor súboru APK na kontrolu podpisov a metadát.

AAB: Android App Bundle

Android App Bundle je formát publikovania spoločnosti Google pre Obchod Play. Od augusta 2021 musia byť všetky nové aplikácie v Obchode Play odosielané ako súbory AAB, nie súbory APK.

Čo obsahuje

Súbor AAB používa formát založený na vyrovnávacej pamäti protokolu a obsahuje:

  • Kód základnej aplikácie Základný modul: a zdroje potrebné na každom zariadení
  • Rozdelenie konfigurácie: Zdroje usporiadané podľa hustoty obrazovky, architektúry CPU a jazyka
  • Moduly dynamických funkcií: Voliteľné funkcie, ktoré je možné stiahnuť na požiadanie
  • Metadáta balíka: Pokyny pre Google Play na generovanie súborov APK pre konkrétne zariadenie

Keď sa s tým stretnete

Ako bežný používateľ sa zvyčajne priamo nestretnete so súbormi AAB. Používajú ich vývojári počas procesu zostavovania a nahrávania. Ak však získate súbor AAB (možno z artefaktov zostavy open-source projektu), musíte ho pred inštaláciou previesť do formátu APK.

Ako to zvládnuť

Použite nástroj príkazového riadka bundletool od spoločnosti Google alebo náš nástroj Konvertor AAB na APK na vygenerovanie inštalovateľného súboru APK zo súboru AAB. Proces konverzie vytvorí buď univerzálny súbor APK (väčší, funguje všade) alebo súbory APK špecifické pre zariadenie (menšie, zacielené na zariadenie).

XAPK: Rozšírený súbor APK

XAPK je formát kontajnera popularizovaný APKPure, ktorý spája súbor APK spolu s pridruženými dátovými súbormi OBB alebo rozdeľuje konfigurácie APK do jedného balíka na stiahnutie.

Čo obsahuje

Súbor XAPK je archív ZIP, ktorý obsahuje:

  • Základný súbor APK (hlavná aplikácia)
  • Súbory OBB (rozširujúce údaje pre hry a veľké aplikácie)
  • Voliteľne rozdeľte súbory APK pre rôzne konfigurácie zariadenia
  • Súbor manifest.json popisujúci obsah balíka a pokyny na inštaláciu
  • Súbor ikon na účely zobrazenia

Keď sa s tým stretnete

So súbormi XAPK sa stretnete pri sťahovaní veľkých aplikácií alebo hier z úložísk aplikácií tretích strán. Hry, ktoré vyžadujú ďalšie dátové súbory (predtým distribuované ako súbory OBB), sú bežne zabalené ako XAPK, aby sa zjednodušil proces sťahovania do jedného súboru.

Ako to zvládnuť

Súbory XAPK nemožno priamo nainštalovať predvoleným inštalátorom balíkov systému Android. Potrebujete buď vyhradenú inštalačnú aplikáciu XAPK, alebo môžete použiť náš Prevodník XAPK na APK na extrahovanie základného súboru APK. Pre hry, ktoré vyžadujú údaje OBB, budete tiež musieť extrahovať a umiestniť súbory OBB do správneho adresára pomocou nášho OBB extraktor.

APKS: Sada APK

Formát APKS je výstupom nástroja bundletool spoločnosti Google pri generovaní súborov APK pre konkrétne zariadenie zo súboru AAB. Používajú ho aj niektoré nástroje na zálohovanie aplikácií na ukladanie rozdelených inštalácií APK.

Čo obsahuje

Súbor APKS je archív ZIP, ktorý obsahuje:

  • toc.pb, Obsah vyrovnávacej pamäte protokolu popisujúci štruktúru rozdelenia
  • splits/, Adresár obsahujúci základný súbor APK a všetky konfiguračné rozdelené súbory APK
  • Voliteľne samostatné súbory APK pre zariadenia, ktoré nepodporujú rozdelené inštalácie

Keď sa s tým stretnete

So súbormi APKS sa stretnete pri lokálnom používaní bundletool, pri zálohovaní aplikácií nainštalovaných z Obchodu Play alebo pri sťahovaní z určitých úložísk tretích strán, ktoré zachovávajú rozdelenú štruktúru APK.

Ako to zvládnuť

Súbory APKS môžete nainštalovať pomocou príkazu install-apks bundletool alebo ich previesť na jeden súbor APK pomocou nášho Zlúčenie APKS do APK. Upozorňujeme, že zlúčením rozdelených súborov APK do univerzálneho súboru APK sa môže zväčšiť veľkosť súboru, pretože všetky konfiguračné zdroje sú kombinované.

APKM: Balík APKMirror

APKM je proprietárny formát kontajnera vytvorený APKMirror na distribúciu aplikácií, ktoré pozostávajú z viacerých rozdelených súborov APK. Slúži na podobný účel ako XAPK a APKS, ale používa vlastnú štruktúru APKMirror.

Čo obsahuje

Súbor APKM je archív ZIP, ktorý obsahuje:

  • Základný súbor APK
  • Rozdelenie súborov APK pre rôzne konfigurácie (hustota, ABI, jazyk)
  • Súbor metadát popisujúci štruktúru balíka

Keď sa s tým stretnete

Na súbory APKM narazíte výlučne pri sťahovaní z APKMirror. Stránka používa tento formát pre aplikácie, ktoré sú distribuované ako balíky aplikácií v Obchode Play, a preto pozostávajú z viacerých rozdelených súborov APK.

Ako to zvládnuť

Súbory APKM vyžadujú na priamu inštaláciu aplikáciu APKMirror Installer, alebo môžete extrahovať obsah (keďže ide o súbor ZIP) a manuálne nainštalovať rozdelené súbory APK pomocou príkazu install-multiple ADB. Základný súbor APK možno extrahovať a nainštalovať aj samostatne, hoci niektoré funkcie môžu byť obmedzené bez rozdelenia konfigurácie.

OBB: Nepriehľadný binárny blob

Súbory OBB sú rozširujúce súbory, ktoré používajú aplikácie pre Android (predovšetkým hry) na ukladanie veľkého množstva údajov, ktoré presahujú limit veľkosti APK v Obchode Play. Aj keď spoločnosť Google do značnej miery nahradila tento systém službou Play Asset Delivery, mnohé existujúce aplikácie stále používajú súbory OBB.

Čo obsahuje

Súbory OBB môžu obsahovať akýkoľvek typ údajov, ktoré aplikácia potrebuje:

  • Herné textúry a 3D modely
  • Zvukové súbory a zvukové stopy
  • Video obsah
  • Údaje o úrovni a mapy
  • Akékoľvek veľké binárne údaje, ktoré sa vývojár rozhodne externe uložiť

Formát údajov v súbore OBB je výlučne na vývojárovi. Niektoré používajú kompresiu ZIP, iné používajú vlastné binárne formáty. "Nepriehľadné" v názve odráža, že Android zaobchádza so súborom ako s čiernou skrinkou.

Keď sa s tým stretnete

Súbory OBB sa vyskytujú pri bočnom načítaní veľkých hier alebo keď sú združené v balíkoch XAPK. Sú uložené v /Android/obb/[package.name]/ na zdieľanom úložisku zariadenia.

Ako to zvládnuť

Súbory OBB musia byť umiestnené v správnom adresári, aby ich aplikácia našla. Názov súboru sa zvyčajne riadi vzorom main.[version].[package.name].obb alebo patch.[version].[package.name].obb. Použite náš OBB extraktor na extrahovanie súborov OBB z balíkov XAPK.

DEX: Spustiteľný súbor Dalvik

Súbory DEX obsahujú skompilovaný bajtový kód, ktorý beží v runtime prostredí Androidu. Nachádzajú sa v súboroch APK, ale môžu existovať aj nezávisle počas vývoja a ladenia.

Čo obsahuje

Súbor DEX obsahuje:

  • Kompilovaný bajtový kód Java/Kotlin vo formáte inštrukcie Dalvik
  • Reťazcové konštanty a definície typov
  • Odkazy na metódy a polia
  • Definície tried a ich hierarchia

Technické detaily

Jeden súbor DEX má limit 65 536 odkazov na metódy ("limit 64 kB"). Aplikácie, ktoré prekračujú tento limit, používajú viacero súborov DEX (classes.dex, classes2.dex atď.), čo je technika nazývaná multidex. Moderné stavebné nástroje to zvládajú automaticky.

Súbory ODEX, VDEX a ART

Toto sú optimalizované verzie súborov DEX vytvorených modulom Android Runtime počas inštalácie alebo po nej:

  • ODEX (optimalizované DEX): Obsahuje vopred skompilovaný natívny strojový kód pre často používané metódy. Generuje sa počas nečinnej údržby na základe profilov používania.
  • VDEX (overené DEX): Obsahuje overený bajtový kód DEX s vopred vypočítanými výsledkami overenia. To urýchľuje následné spúšťanie a spúšťanie aplikácií preskočením opätovného overenia.
  • ART (Android Runtime Image): Obsahuje predinicializované objekty triedy a údaje haldy. To umožňuje runtime preskočiť načítanie tried a inicializáciu pre bežné triedy rámcov počas spúšťania.

Tieto súbory sú generované systémom a nie sú niečo, s čím by používatelia zvyčajne priamo interagovali. Sú uložené v /data/dalvik-cache/ alebo vedľa APK v /data/app/.

SO: Zdieľaný objekt (natívne knižnice)

Súbory s príponou .so sú natívne zdieľané knižnice zostavené pre špecifické architektúry CPU. Obsahujú strojový kód napísaný v C, C++ alebo Rust, ktorý beží priamo na procesore bez réžie runtime Dalvik/ART.

Varianty architektúry

  • armeabi-v7a, 32-bitový ARM (väčšina starších zariadení)
  • arm64-v8a, 64-bitový ARM (väčšina moderných telefónov)
  • x86, 32-bitový Intel/AMD (niektoré tablety a emulátory)
  • x86_64, 64-bitový Intel/AMD (Chromebooky a emulátory)

Keď súbor APK obsahuje natívne knižnice, musí obsahovať správnu architektúru pre cieľové zariadenie. Ak je zahrnutá nesprávna architektúra, aplikácia spadne so UnsatisfiedLinkError.

Súbory XML v systéme Android

Android vo veľkej miere používa XML, ale v dvoch rôznych formách:

Binárny XML

Vo vnútri súborov APK sú zdroje XML (rozloženia, manifesty, reťazcové súbory) uložené v kompilovanom binárnom formáte nazývanom AXML. Tento formát je kompaktnejší a rýchlejšie sa analyzuje ako textový XML. Nástroje ako aapt2 alebo apktool dokážu dekompilovať binárne XML späť na čitateľný text.

Text XML

Počas vývoja sú súbory XML v štandardnom textovom formáte. Proces zostavovania ich skompiluje do binárneho XML na zahrnutie do súboru APK. Konfiguračné súbory ako network_security_config.xml a zdrojové súbory v adresári res/ začínajú ako textové XML.

Mapovacie súbory ProGuard/R8

Hoci nejde o formát špecifický pre Android, mapovacie súbory (mapping.txt sú dôležité na pochopenie nejasných aplikácií). Keď vývojári používajú nástroje na zmenšovanie kódu, ako je R8, názvy tried a metód sú nahradené krátkymi, nezmyselnými identifikátormi. Mapovací súbor zaznamenáva preklady názvov z pôvodného do zahmlených, čo je nevyhnutné na čítanie správ o zlyhaní.

Android Backup Format (AB)

Súbory s príponou .ab sú záložné archívy Android vytvorené adb backup. Obsahujú archív tar (voliteľne komprimovaný a šifrovaný) adresára s údajmi aplikácie. Tento formát je zastaraný v prospech cloudových zálohovacích riešení, ale stále ho používajú niektoré zálohovacie nástroje.

IMG a obrázky oddielov

Hoci obrázky systému Android nesúvisia s aplikáciami, používajú niekoľko formátov, ktoré stojí za zmienku:

  • system.img: Systémový oddiel iba na čítanie obsahujúci rámec Android a predinštalované aplikácie
  • boot.img: Obsahuje jadro Linuxu a počiatočný ramdisk
  • vendor.img: Ovládače a firmvér špecifické pre hardvér
  • super.img: Dynamický kontajner oddielov používaný v moderných zariadeniach (Android 10+)

Porovnávacia tabuľka formátov

Tu je rýchly odkaz na porovnanie hlavných formátov distribúcie aplikácií:

  • APK: Jeden súbor, priamo inštalovateľný, univerzálny (vrátane všetkých konfigurácií), väčšia veľkosť
  • Formát publikovania AAB:, ktorý nie je možné priamo nainštalovať, vyžaduje spracovanie v Obchode Play
  • Kontajner XAPK: (APK + OBB/splits), vyžaduje inštalátor alebo extrakciu, používa ho APKPure
  • Kontajner APKS: (rozdelené súbory APK), formát bundletool, vyžaduje inštalátor alebo zlúčenie
  • Kontajner APKM: (rozdelené súbory APK), formát APKMirror, vyžaduje ich inštalátor

Výber správneho nástroja

V závislosti od formátu, s ktorým pracujete, sú vhodné rôzne nástroje:

Aký formát balíka Android by ste mali použiť?

Rozmanitosť formátov súborov ekosystému Android odráža vývoj platformy od jednoduchých súborov APK s jedným súborom až po sofistikované modulárne systémy doručovania. Každý formát existuje na vyriešenie špecifického problému: AAB zmenšujú veľkosť sťahovania, XAPK zjednodušujú distribúciu viacsúborových aplikácií, OBB spracovávajú veľké herné dáta a rozdelené APK umožňujú optimalizáciu pre konkrétne zariadenie.

Keď porozumiete týmto formátom, môžete pracovať s akýmkoľvek balíkom Android, na ktorý narazíte, či už sťahujete aplikácie, zálohujete svoje zariadenie alebo vyvíjate svoje vlastné aplikácie. Kľúčovým poznatkom je, že väčšina z týchto formátov sú v konečnom dôsledku kontajnery, ktoré obsahujú súbory APK v rôznych konfiguráciách, a so správnymi nástrojmi môžete vždy extrahovať to, čo potrebujete.

Navrhol a zdokumentoval Mst Shaefale Vedúci vývojár a architekt balíkov Android • Overené na Android 12–15

Mst Shaefale spravuje nástroj na zlučovanie XAPK/APKS na strane klienta, analyzátor binárnych manifestov a nástroje na podpisovanie APK v1+v2 na xapktoapk.com. Všimli ste si zastaraný príkaz alebo zmenu operačného systému? Pošlite redakčnú poznámku.