Co to jest format pliku APK?
Plik z rozszerzeniem .apk zawiera skompresowane archiwum z aplikacją, grą lub oprogramowaniem układowym dla systemu Android. Pakiety APK są oparte na formacie kontenera ZIP/JAR, co oznacza, że każde standardowe narzędzie do archiwizacji może otworzyć i sprawdzić ich zawartość. Google Play pierwotnie narzucało limit 100 MB na pobieranie plików .apk, z maksymalnie dwoma plikami rozszerzeń o rozmiarze do 2 GB każdy na dodatkowe zasoby; od sierpnia 2021 r. Google Play wymaga, aby nowe aplikacje były publikowane jako .AAB (Android App Bundles), które generują zoptymalizowane pod kątem urządzenia pakiety split APK w momencie instalacji, zamiast dostarczać jeden monolityczny pakiet.
Struktura pliku APK
Struktura plików APK opiera się na archiwum JAR - mogą one zawierać następujące podfoldery i pliki:
res- z opisem zasobów w formie nieskompilowanej,lib- zawiera skompilowane źródła i biblioteki aplikacji, podzielone według różnych platform obliczeniowych (np.arm64-v8a,x86_64),META-INF- z plikami zawierającymi informacje o pakiecie, na przykład plikMANIFEST.MFlub certyfikaty,assets- zawiera różne zasoby używane przez aplikację,classes.dex- skompilowany kod bajtowy Dalvik/ART wykonywany przez środowisko uruchomieniowe Android,AndroidManifest.xml- manifest zakodowany binarnie, deklarujący uprawnienia aplikacji, komponenty i wymagania SDK,resources.arsc- wstępnie skompilowana tabela zasobów mapująca identyfikatory na ciągi znaków, układy i elementy graficzne.
Pliki Android Package służą do tworzenia i dystrybucji programów na platformy mobilne działające w systemie Android. Zawartość plików .apk można rozpakować za pomocą większości programów do dekompresji obsługujących kompresję ZIP lub sprawdzić, po prostu zmieniając rozszerzenie pliku na .zip. Aby zachować integralność, pakiety są chronione przez APK Signature Scheme v2/v3 (oraz v4 dla aktualizacji przyrostowych), a instalacja zostaje odrzucona, jeśli sygnatura się nie zgadza. Instalowanie pakietów .apk spoza sklepu Play nie jest domyślnie dozwolone - użytkownicy muszą włączyć uprawnienie Instaluj nieznane aplikacje w ustawieniach systemu Android lub przesłać pakiet za pomocą polecenia adb install app.apk. Aplikacje zbyt duże dla pojedynczego pliku .apk mogą być dystrybuowane jako .XAPK, który łączy bazowy APK z jednym lub kilkoma pakietami split APK w jednym archiwum.
Bezpieczeństwo
RYZYKO: HIGHAPK to wektor nr 1 dla złośliwego oprogramowania na Androida: sideloading omija skanowanie Google Play Protect. Lista kontrolna dla użytkowników: instaluj tylko z zaufanych źródeł (Google Play, F-Droid, APKMirror - który weryfikuje sygnatury z tymi od dewelopera), sprawdzaj czy żądane uprawnienia pasują do celu aplikacji, nigdy nie instaluj APK otrzymanego niespodziewanie przez czat/SMS (kampanie „smishing”) i porównuj sygnaturę aplikacji podczas aktualizacji. Trik ze zmianą nazwy na .zip pozwala sprawdzić zawartość przed instalacją.
Szczegóły formatu
w pigułceProgramy otwierające pliki APK
Szczegóły techniczne
specyfikacja| Kodowanie | Binarne |
| Kolejność bajtów | Little-endian |
| Kontener | Archiwum ZIP (również ważne jako JAR) |
| Kompresja | DEFLATE dla każdego wpisu; wpisy wrażliwe na wyrównanie przechowywane bez kompresji (metoda STORED) i wyrównane (zipaligned) |
| Podpisywanie / integralność | APK Signature Scheme v2/v3 (blok wstawiony przed katalogiem centralnym ZIP); v4 dla przyrostowych aktualizacji na urządzeniu; instalacja odrzucona w przypadku niezgodności sygnatury |
| Magiczne bajty | 50 4B 03 04 - standardowy nagłówek pliku lokalnego ZIP „PK” pod offsetem 0; odróżniany od zwykłego ZIP obecnością AndroidManifest.xml i classes.dex |
| Pliki wewnętrzne | AndroidManifest.xml, classes.dex (+ classes2.dex …), resources.arsc, res/, lib/, assets/, META-INF/ |
| Kod bajtowy | Dalvik Executable (DEX) w classes.dex - skompilowany ze źródeł Java/Kotlin, wykonywany przez ART (Android Runtime) |
| Wyrównanie | zipalign wymusza 4-bajtową granicę dla nieskompresowanych wpisów; Android 15+ celuje w wyrównanie stron 16 KB |
| Format manifestu | Binarnie zakodowany XML (AXML) deklarujący nazwę pakietu, uprawnienia, komponenty Activity/Service/Provider, minSdkVersion, targetSdkVersion |
| Układ bibliotek natywnych | Podkatalog lib/<ABI>/ dla każdej architektury: arm64-v8a, armeabi-v7a, x86, x86_64 |
| Tabela zasobów | resources.arsc - płaski plik binarny mapujący liczbowe identyfikatory zasobów na ciągi znaków, układy, grafiki i warianty konfiguracji |
| Typowy rozmiar | 2 MB - 1,5 GB; bazowe pliki APK aplikacji zwykle 5-100 MB; gry z dołączonymi zasobami osiągają górny zakres |
| Typ MIME | application/vnd.android.package-archive |
| Platforma | Android (natywnie); uruchamialne na Windows, Linux, macOS przez emulatory (BlueStacks, Android Studio AVD, Waydroid) |
| Wydano | 2008 (Android 1.0) |
| Najnowsza wersja | APK Signature Scheme v3 (Android 9, 2018); v4 incremental (Android 11, 2020) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | source.android.com |