Wyjaśnienie każdego formatu pliku Androida: APK, AAB, XAPK, APKS, APKM, OBB i inne

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

Ekosystem Androida korzysta z różnych formatów plików do pakowania, dystrybucji i przechowywania danych aplikacji. Jeśli kiedykolwiek pobrałeś aplikację z zewnętrznego źródła, prawdopodobnie napotkałeś rozszerzenia plików inne niż znany plik APK. Formaty takie jak XAPK, APKS, APKM, AAB i OBB służą określonemu celowi w cyklu życia aplikacji na Androida.

Ten przewodnik ma stanowić kompletne odniesienie do wszystkich głównych formatów plików Androida. Programiści, zaawansowani użytkownicy, którzy pobierają aplikacje z boku, oraz ciekawscy czytelnicy, którzy chcą po prostu wiedzieć, co tak naprawdę zawierają te pliki, znajdą poniżej każdy format wyjaśniony prostym językiem.

APK: zestaw pakietu Android

APK to podstawowy format plików dla aplikacji na Androida. Jest to standardowy format instalacji od chwili powstania Androida i pozostaje formatem, który system operacyjny Android natywnie obsługuje w przypadku instalacji aplikacji.

Co zawiera

Plik APK to w zasadzie archiwum ZIP o określonej strukturze wewnętrznej:

  • AndroidManifest.xml, binarny plik XML deklarujący nazwę pakietu aplikacji, komponenty, uprawnienia i wymagania
  • classes.dex (i classes2.dex itp.), Skompilowany kod bajtowy Dalvik zawierający kod Java/Kotlin aplikacji
  • resources.arsc, Skompilowana tabela zasobów mapująca identyfikatory zasobów na ich wartości
  • res/, katalog zawierający zasoby, takie jak układy, rysunki i ciągi znaków, do których odwołuje się identyfikator
  • assets/, Surowe pliki zasobów dostępne dla aplikacji w czasie wykonywania za pośrednictwem AssetManager
  • lib/, biblioteki natywne zorganizowane według architektury procesora (np). lib/arm64-v8a/
  • META-INF/, Pliki podpisów i informacje o certyfikatach

Kiedy się z tym spotkasz

Pliki APK są pobierane podczas bocznego ładowania aplikacji ze źródeł zewnętrznych. Są one również instalowane na Twoim urządzeniu ze Sklepu Play, chociaż nowoczesne instalacje w Sklepie Play często wykorzystują podzielone pliki APK wygenerowane z pakietów aplikacji.

Jak sobie z tym poradzić

Pliki APK można zainstalować bezpośrednio na Androidzie, otwierając je za pomocą menedżera plików lub używając adb install. Możesz także sprawdzić ich zawartość, zmieniając nazwę rozszerzenia na .zip i wyodrębniając je lub używając naszego Weryfikator APK do sprawdzania podpisów i metadanych.

AAB: pakiet aplikacji na Androida

Pakiet aplikacji na Androida to format publikowania Google dla Sklepu Play. Od sierpnia 2021 r. wszystkie nowe aplikacje w Sklepie Play muszą być przesyłane w formacie AAB, a nie APK.

Co zawiera

Plik AAB wykorzystuje format oparty na buforze protokołu i zawiera:

  • Moduł podstawowy: Kod aplikacji Core i zasoby wymagane na każdym urządzeniu
  • Podziały konfiguracji: Zasoby uporządkowane według gęstości ekranu, architektury procesora i języka
  • Dynamiczne moduły funkcyjne: Funkcje opcjonalne, które można pobrać na żądanie
  • Metadane pakietu: Instrukcje dla Google Play dotyczące generowania plików APK dla konkretnego urządzenia

Kiedy się z tym spotkasz

Jako zwykły użytkownik zazwyczaj nie napotykasz bezpośrednio plików AAB. Są używane przez programistów podczas procesu kompilacji i przesyłania. Jeśli jednak uzyskasz plik AAB (być może z artefaktów kompilacji projektu typu open source), przed instalacją musisz przekonwertować go do formatu APK.

Jak sobie z tym poradzić

Użyj narzędzia wiersza poleceń bundletool firmy Google lub naszego Konwerter AAB na APK, aby wygenerować instalacyjny plik APK z pliku AAB. Proces konwersji tworzy albo uniwersalny plik APK (większy, działa wszędzie), albo pakiet APK specyficzny dla urządzenia (mniejszy, kierowany na urządzenie).

XAPK: rozszerzony plik APK

XAPK to format kontenera spopularyzowany przez APKPure, który łączy plik APK wraz z powiązanymi z nim plikami danych OBB lub dzieli konfiguracje APK w jeden pakiet do pobrania.

Co zawiera

Plik XAPK to archiwum ZIP zawierające:

  • Bazowy plik APK (aplikacja główna)
  • Pliki OBB (dane rozszerzeń dla gier i dużych aplikacji)
  • Opcjonalnie podziel pliki APK dla różnych konfiguracji urządzeń
  • Plik manifest.json opisujący zawartość pakietu i instrukcje instalacji
  • Plik ikony do celów wyświetlania

Kiedy się z tym spotkasz

Podczas pobierania dużych aplikacji lub gier z repozytoriów aplikacji innych firm napotykasz pliki XAPK. Gry wymagające dodatkowych plików danych (wcześniej dystrybuowanych jako pliki OBB) są zwykle pakowane jako pliki XAPK, aby uprościć proces pobierania w jednym pliku.

Jak sobie z tym poradzić

Plików XAPK nie można zainstalować bezpośrednio za pomocą domyślnego instalatora pakietu Androida. Potrzebujesz dedykowanej aplikacji instalacyjnej XAPK lub możesz użyć naszego Konwerter XAPK na APK, aby wyodrębnić podstawowy plik APK. W przypadku gier wymagających danych OBB konieczne będzie również wyodrębnienie i umieszczenie plików OBB we właściwym katalogu za pomocą naszego Ekstraktor OBB.

APK: Zestaw APK

Format APKS to wynik narzędzia pakietowego Google podczas generowania plików APK specyficznych dla urządzenia z pliku AAB. Jest również używany przez niektóre narzędzia do tworzenia kopii zapasowych aplikacji do przechowywania podzielonych instalacji APK.

Co zawiera

Plik APKS to archiwum ZIP zawierające:

  • toc.pb, Tabela zawartości bufora protokołu opisująca strukturę podzieloną
  • splits/, katalog zawierający podstawowy plik APK i wszystkie pliki APK z podziałem konfiguracji
  • Opcjonalnie samodzielne pliki APK dla urządzeń, które nie obsługują instalacji rozdzielonych

Kiedy się z tym spotkasz

Pliki APKS napotykasz podczas lokalnego korzystania z narzędzia packagetool, podczas tworzenia kopii zapasowych aplikacji zainstalowanych ze Sklepu Play lub podczas pobierania z niektórych repozytoriów stron trzecich, które zachowują podzieloną strukturę pliku APK.

Jak sobie z tym poradzić

Możesz zainstalować pliki APKS za pomocą polecenia install-apks pakietutool lub przekonwertować je na pojedynczy plik APK za pomocą naszego Połączenie APKS z APK. Pamiętaj, że połączenie podzielonych plików APK w uniwersalny plik APK może zwiększyć rozmiar pliku, ponieważ wszystkie zasoby konfiguracyjne są połączone.

APKM: Pakiet APKMirror

APKM to zastrzeżony format kontenera stworzony przez APKMirror w celu dystrybucji aplikacji składających się z wielu podzielonych plików APK. Służy podobnemu celowi jak XAPK i APKS, ale wykorzystuje własną strukturę APKMirror.

Co zawiera

Plik APKM to archiwum ZIP zawierające:

  • Podstawowy plik APK
  • Podziel pliki APK dla różnych konfiguracji (gęstość, ABI, język)
  • Plik metadanych opisujący strukturę pakietu

Kiedy się z tym spotkasz

Pliki APKM napotykasz wyłącznie podczas pobierania z APKMirror. Witryna używa tego formatu w przypadku aplikacji dystrybuowanych jako pakiety aplikacji w Sklepie Play i dlatego składają się z wielu podzielonych plików APK.

Jak sobie z tym poradzić

Pliki APKM wymagają aplikacji APKMirror Installer do bezpośredniej instalacji lub możesz wyodrębnić zawartość (ponieważ jest to plik ZIP) i zainstalować podzielone pliki APK ręcznie za pomocą polecenia install-multiple ADB. Podstawowy plik APK można również wyodrębnić i zainstalować samodzielnie, chociaż niektóre funkcje mogą być ograniczone bez podziału konfiguracji.

OBB: Nieprzezroczysta binarna plama

Pliki OBB to pliki rozszerzeń używane przez aplikacje na Androida (głównie gry) do przechowywania dużych ilości danych, które przekraczają limit rozmiaru pliku APK w Sklepie Play. Chociaż Google w dużej mierze zastąpiło ten system dostawą zasobów Play, wiele istniejących aplikacji nadal korzysta z plików OBB.

Co zawiera

Pliki OBB mogą zawierać dowolny typ danych potrzebnych aplikacji:

  • Tekstury gier i modele 3D
  • Pliki audio i ścieżki dźwiękowe
  • Treść wideo
  • Dane poziomu i mapy
  • Wszelkie duże dane binarne, które programista zdecyduje się przechowywać na zewnątrz

Format danych w pliku OBB zależy wyłącznie od programisty. Niektórzy używają kompresji ZIP, inni używają niestandardowych formatów binarnych. „Nieprzezroczysty” w nazwie oznacza, że ​​Android traktuje plik jako czarną skrzynkę.

Kiedy się z tym spotkasz

Pliki OBB są spotykane podczas bocznego ładowania dużych gier lub gdy są one zawarte w pakietach XAPK. Są one przechowywane w /Android/obb/[package.name]/ we współdzielonej pamięci urządzenia.

Jak sobie z tym poradzić

Aby aplikacja mogła je znaleźć, pliki OBB muszą zostać umieszczone w odpowiednim katalogu. Nazwa pliku zazwyczaj jest zgodna ze wzorcem main.[version].[package.name].obb lub patch.[version].[package.name].obb. Użyj naszego Ekstraktor OBB, aby wyodrębnić pliki OBB z pakietów XAPK.

DEX: Plik wykonywalny Dalvik

Pliki DEX zawierają skompilowany kod bajtowy działający w środowisku wykonawczym Androida. Można je znaleźć w plikach APK, ale mogą również istnieć niezależnie podczas programowania i debugowania.

Co zawiera

Plik DEX zawiera:

  • Skompilowany kod bajtowy Java/Kotlin w formacie instrukcji Dalvik
  • Stałe łańcuchowe i definicje typów
  • Odniesienia do metod i dziedzin
  • Definicje klas i ich hierarchie

Szczegóły techniczne

Pojedynczy plik DEX ma limit odwołań do metod wynoszący 65 536 („limit 64 KB”). Aplikacje przekraczające ten limit korzystają z wielu plików DEX (classes.dex, classes2.dex itp.), co jest techniką zwaną multidex. Nowoczesne narzędzia do kompilacji radzą sobie z tym automatycznie.

Pliki ODEX, VDEX i ART

Są to zoptymalizowane wersje plików DEX utworzone przez środowisko wykonawcze Androida podczas lub po instalacji:

  • ODEX (zoptymalizowany DEX): Zawiera skompilowany z wyprzedzeniem natywny kod maszynowy dla często używanych metod. Generowane podczas bezczynnej konserwacji na podstawie profili użytkowania.
  • VDEX (zweryfikowany DEX): Zawiera zweryfikowany kod bajtowy DEX z wstępnie obliczonymi wynikami weryfikacji. Przyspiesza to późniejsze uruchamianie i uruchamianie aplikacji poprzez pominięcie ponownej weryfikacji.
  • ART (obraz wykonawczy Androida): Zawiera wstępnie zainicjowane obiekty klas i dane sterty. Dzięki temu środowisko wykonawcze może pominąć ładowanie i inicjalizację klas typowych struktur podczas uruchamiania.

Pliki te są generowane przez system i nie są czymś, z czym użytkownicy zwykle wchodzą w bezpośrednią interakcję. Są przechowywane w /data/dalvik-cache/ lub obok pliku APK w /data/app/.

SO: Obiekt współdzielony (biblioteki natywne)

Pliki z rozszerzeniem .so są natywnymi bibliotekami współdzielonymi skompilowanymi dla określonych architektur procesorów. Zawierają kod maszynowy napisany w C, C++ lub Rust, który działa bezpośrednio na procesorze bez narzutu środowiska wykonawczego Dalvik/ART.

Warianty architektury

  • armeabi-v7a, 32-bitowy ARM (większość starszych urządzeń)
  • arm64-v8a, 64-bitowy ARM (większość nowoczesnych telefonów)
  • x86, 32-bitowy Intel/AMD (niektóre tablety i emulatory)
  • x86_64, 64-bitowy Intel/AMD (Chromebooki i emulatory)

Jeśli plik APK zawiera biblioteki natywne, musi zawierać architekturę poprawną dla urządzenia docelowego. Jeśli uwzględniona zostanie niewłaściwa architektura, aplikacja ulegnie awarii z UnsatisfiedLinkError.

Pliki XML w systemie Android

Android szeroko korzysta z XML, ale w dwóch różnych formach:

Binarny XML

Wewnątrz plików APK zasoby XML (układy, manifesty, pliki łańcuchowe) są przechowywane w skompilowanym formacie binarnym zwanym AXML. Ten format jest bardziej zwarty i szybszy w analizie niż tekstowy XML. Narzędzia takie jak aapt2 lub apktool mogą dekompilować binarny XML z powrotem do czytelnego tekstu.

Tekst XML

Podczas opracowywania pliki XML mają standardowy format tekstowy. Proces kompilacji kompiluje je do binarnego formatu XML w celu umieszczenia w pliku APK. Pliki konfiguracyjne, takie jak network_security_config.xml i pliki zasobów w katalogu res/, zaczynają się jako tekst XML.

Pliki mapowania ProGuard/R8

Chociaż nie jest to format specyficzny dla Androida, pliki mapowania (mapping.txt są ważne dla zrozumienia zaciemnionych aplikacji). Kiedy programiści używają narzędzi do zmniejszania kodu, takich jak R8, nazwy klas i metod są zastępowane krótkimi, pozbawionymi znaczenia identyfikatorami. Plik mapowania rejestruje tłumaczenia nazw oryginalnych na zaciemnione, niezbędne do odczytywania raportów o awariach.

Format kopii zapasowej Androida (AB)

Pliki z rozszerzeniem .ab to archiwa kopii zapasowych Androida utworzone przez adb backup. Zawierają archiwum tar (opcjonalnie skompresowane i zaszyfrowane) katalogu danych aplikacji. Ten format jest przestarzały na rzecz rozwiązań do tworzenia kopii zapasowych opartych na chmurze, ale nadal jest używany w niektórych narzędziach do tworzenia kopii zapasowych.

Obrazy IMG i partycji

Obrazy systemu Android nie są związane z aplikacjami, ale korzystają z kilku formatów, o których warto wspomnieć:

  • system.img: Partycja systemowa tylko do odczytu zawierająca środowisko Android i preinstalowane aplikacje
  • boot.img: Zawiera jądro Linuksa i początkowy ramdysk
  • sprzedawca.img: Sterowniki i oprogramowanie sprzętowe specyficzne dla sprzętu
  • super.img: Kontener partycji dynamicznych stosowany w nowoczesnych urządzeniach (Android 10+)

Tabela porównawcza formatu

Oto krótkie porównanie głównych formatów dystrybucji aplikacji:

  • APK: Pojedynczy plik, instalowany bezpośrednio, uniwersalny (w zestawie wszystkie konfiguracje), większy rozmiar
  • AAB: Format publikowania, którego nie można bezpośrednio zainstalować, wymaga przetwarzania przez Sklep Play
  • Kontener XAPK: (APK + OBB/split), wymaga instalatora lub ekstrakcji, używany przez APKPure
  • Kontener APKI: (podzielone pliki APK), format pakietu narzędzi, wymaga instalatora lub połączenia
  • Kontener APKM: (podzielone pliki APK), format APKMirror, wymaga instalatora

Wybór odpowiedniego narzędzia

W zależności od formatu, z którym pracujesz, odpowiednie będą różne narzędzia:

Którego formatu pakietu dla Androida należy użyć?

Różnorodność formatów plików w ekosystemie Androida odzwierciedla ewolucję platformy od prostych jednoplikowych plików APK do wyrafinowanych modułowych systemów dostarczania. Każdy format istnieje, aby rozwiązać konkretny problem: AAB zmniejszają rozmiar pobieranych plików, XAPK upraszczają dystrybucję aplikacji wieloplikowych, OBB obsługują duże dane gier, a podzielone pliki APK umożliwiają optymalizację pod kątem konkretnego urządzenia.

Kiedy już zrozumiesz te formaty, będziesz w stanie poradzić sobie z każdym pakietem Androida, na który się natkniesz, niezależnie od tego, czy ładujesz aplikacje, tworzysz kopię zapasową urządzenia, czy tworzysz własne aplikacje. Najważniejszym wnioskiem jest to, że większość tych formatów to ostatecznie kontenery przechowujące pliki APK w różnych konfiguracjach, a dzięki odpowiednim narzędziom zawsze możesz wyodrębnić to, czego potrzebujesz.

Zaprojektowane i udokumentowane przez Mst Shaefale Główny programista i architekt pakietów dla Androida • Zweryfikowano na Androidzie 12–15

Mst Shaefale obsługuje fuzję XAPK/APKS po stronie klienta, parser manifestu binarnego i narzędzia do podpisywania plików APK v1 + v2 w xapktoapk.com. Zauważyłeś nieaktualne polecenie lub zmianę systemu operacyjnego? Wyślij notatkę redakcyjną.