APK (Android Package Kit) to format pliku archiwalnego używany do dystrybucji i instalacji aplikacji na Androidzie. Każda aplikacja, którą użytkownik pobiera z Google Play lub instaluje ręcznie, to plik APK. Według Android Open Source Project, 2026, format opiera się na standardzie ZIP i zawiera skompilowany kod, zasoby, manifest oraz podpis cyfrowy.
Najważniejsze
APK (Android Package Kit) to format archiwum, w którym pakowana jest aplikacja na Androida do dystrybucji. Technicznie APK to archiwum ZIP o określonej strukturze, zawierające wszystkie komponenty niezbędne do działania aplikacji na urządzeniu.
Format APK pojawił się wraz z pierwszą wersją Androida w 2008 roku. Za podstawę przyjęto standard JAR (Java Archive), który z kolei bazuje na ZIP. Takie dziedziczenie zapewniło kompatybilność z istniejącymi narzędziami do pracy z archiwami — każdy archiwizator otwiera APK jak zwykły ZIP.
Google Play — główny kanał dystrybucji APK, ale format jest używany także w innych scenariuszach: bezpośrednia instalacja przez przeglądarkę (sideloading), firmowe sklepy z aplikacjami, testowanie na urządzeniach deweloperskich i instalacja w emulatorach. Według Statista około 15% instalacji aplikacji na Androida w 2025 roku odbywa się poza Google Play.
Wewnętrzna budowa APK jest ściśle określona: każda aplikacja musi zawierać określone pliki i katalogi. Naruszenie struktury prowadzi do błędu instalacji.
| Plik/katalog | Przeznaczenie |
|---|---|
| AndroidManifest.xml | Manifest aplikacji: uprawnienia, komponenty, wersja SDK |
| classes.dex | Skompilowany kod bajtowy DEX (może być kilka plików) |
| resources.arsc | Skompilowane zasoby: ciągi znaków, style, układy |
| res/ | Nieskompilowane zasoby: obrazy, czcionki, XML |
| lib/ | Biblioteki natywne (.so) dla różnych architektur CPU |
| META-INF/ | Metadane: certyfikaty, listy plików, hashe |
Manifest — centralny plik konfiguracyjny aplikacji. W skompilowanej postaci binarnej (nie w czytelnym XML) zawiera nazwę pakietu, wersję, listę aktywności, usług, uprawnień i wymagania wobec SDK. Bez manifestu system nie wie, jak uruchomić aplikację.
Kod źródłowy w Javie lub Kotlin jest kompilowany do plików DEX (Dalvik Executable). Główny plik nazywa się classes.dex. Jeśli kod bajtowy przekracza limit 64K metod, tworzone są classes2.dex, classes3.dex i tak dalej — mechanizm multidex.
Katalog lib/ zawiera skompilowane biblioteki C/C++ dla różnych architektur: armeabi-v7a, arm64-v8a, x86, x86_64. Każda biblioteka ma rozszerzenie .so (Shared Object). Nowoczesne aplikacje zwykle dostarczają tylko arm64-v8a.
Budowa APK to wieloetapowy proces zautomatyzowany przez system budowania Gradle i Android Gradle Plugin. Każdy etap przekształca pliki źródłowe w komponenty finalnego archiwum.
Kod źródłowy jest kompilowany do kodu bajtowego Javy (.class), następnie konwertowany do DEX przez narzędzie d8 (wcześniej dx). Zasoby są kompilowane do formatu binarnego przez AAPT2. Wszystkie komponenty są pakowane w archiwum ZIP i podpisywane podpisem cyfrowym.
// build.gradle.kts — podstawowa konfiguracja budowania APK
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
}
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt")
)
}
}
}
ProGuard lub R8 zaciemniają kod, usuwają nieużywane klasy i metody, zmniejszając rozmiar APK. Bez zaciemniania APK zawiera pełne nazwy klas, co ułatwia dekompilację. R8 wykonuje również optymalizację kodu bajtowego na poziomie DEX.
Podpis cyfrowy to obowiązkowy element APK. Android nie instaluje niepodpisanych pakietów. Podpis gwarantuje, że aplikacja nie została zmodyfikowana po publikacji, i określa, do kogo należy pakiet.
v1 (JAR signing) — oryginalny schemat oparty na podpisywaniu każdego pliku w archiwum. Słabość: można usuwać pliki z META-INF bez wykrycia. v2 (APK Signature Scheme v2) pojawił się w Android 7.0 — podpisywane jest całe archiwum, co zapobiega modyfikacjom. v3 obsługuje rotację kluczy, a v4 — instalację przyrostową.
Google Play wymaga v2 lub wyższego dla wszystkich nowych aplikacji od sierpnia 2021 roku. Zaleca się podpisywanie APK wszystkimi trzema schematami dla maksymalnej kompatybilności z różnymi wersjami Androida.
W build.gradle określa się keystore, hasło i alias. Klucz prywatny jest przechowywany w zaszyfrowanym magazynie. Do publikacji w Google Play używa się App Signing — Google przechowuje klucz prywatny, a deweloper przesyła podpisany APK.
Instalacja APK odbywa się przez systemowy menedżer pakietów PackageManager. Proces obejmuje weryfikację podpisu, parsowanie manifestu, kopiowanie plików i optymalizację DEX przez dex2oat.
Narzędzie ADB (Android Debug Bridge) umożliwia instalację APK bezpośrednio z komputera dewelopera. Polecenie `adb install app.apk` kopiuje plik na urządzenie i uruchamia instalację. Flaga -r przeinstalowuje aplikację z zachowaniem danych, flaga -d zezwala na instalację wersji z niższym versionCode.
Od Androida 8.0 system wymaga potwierdzenia instalacji z nieznanych źródeł dla każdej aplikacji osobno. Android 14 wzmocnił kontrolę: instalacja APK przez sklepy zewnętrzne jest możliwa tylko po wyraźnym zezwoleniu w ustawieniach. Google Play Protect skanuje każdy APK podczas instalacji pod kątem złośliwego kodu.
Dla aplikacji większych niż 150 MB Google Play obsługuje Expansion Files — dodatkowe pakiety OBB o rozmiarze do 2 GB każdy. OBB nie wchodzą w skład APK, ale są pobierane osobno po instalacji. Format obsługuje dwa typy: main (zasoby podstawowe) i patch (aktualizacje).
// Sprawdzanie wersji APK przez PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Wersja: ${info.versionName}")
Na urządzeniach z ART (Android Runtime) po instalacji uruchamiana jest kompilacja DEX do kodu natywnego przez dex2oat. Proces może trwać kilka sekund i zwiększa rozmiar zainstalowanej aplikacji, ale przyspiesza jej uruchamianie.
AAB (Android App Bundle) — format promowany przez Google jako alternatywa dla APK przy publikacji w Google Play. Różnica jest zasadnicza: AAB nie instaluje się bezpośrednio, lecz służy jako kontener, z którego Google Play generuje zoptymalizowane APK.
| Parametr | APK | AAB |
|---|---|---|
| Rozmiar pobierania | Pełne archiwum | Tylko potrzebne komponenty |
| Bezpośrednia instalacja | Tak | Nie (generowanie APK) |
| Dystrybucja | Dowolny kanał | Google Play |
| Kontrola wersji | Wersja w manifeście | Dynamic Delivery |
| Publikacja | Google Play + zewnętrzne | Google Play |
Google Play wymaga AAB od sierpnia 2021 roku dla nowych aplikacji. Jednak APK pozostaje głównym formatem dystrybucji poza Google Play — przez strony internetowe, firmowe sklepy i testowanie.
Deweloperzy regularnie napotykają problemy przy budowie i instalacji APK. Większość z nich związana jest z niekompatybilnością wersji, podpisem lub strukturą archiwum.
Błąd występuje przy próbie instalacji APK z tą samą nazwą pakietu, ale innym podpisem. Android nie zezwala na przeinstalowanie aplikacji ze zmienionym certyfikatem. Rozwiązanie — usuń starą wersję przed instalacją.
Jeśli projekt przekracza limit 65536 metod, budowa kończy się błędem dex. Rozwiązanie — włącz multidex w build.gradle lub zoptymalizuj zależności, usuwając nieużywane biblioteki.
Google Play ogranicza rozmiar APK do 150 MB. Dla większych aplikacji używa się APK Expansion Files (OBB). Zaleca się zmniejszanie rozmiaru przez R8, obrazy WebP i Android App Bundle. Każdy dodatkowy megabajt negatywnie wpływa na konwersję instalacji: według Google, każde 10 MB zmniejsza konwersję o 1%.
APK można dekompilować za pomocą narzędzi JADX, APKTool lub Bytecode Viewer. JADX odtwarza oryginalny kod Java z DEX, co sprawia, że aplikacje bez zaciemniania są w pełni czytelne. Do ochrony kodu stosuje się ProGuard/R8, który zmienia nazwy klas, metod i pól na krótkie nieczytelne nazwy oraz usuwa informacje debugowania.
Do analizy zawartości APK używa się Android Studio Profiler, apkanalyzer (narzędzie CLI z Android SDK) i narzędzi zewnętrznych. apkanalyzer pokazuje rozmiar każdego komponentu APK: DEX, zasobów, bibliotek natywnych i podpisu. Analiza pomaga zidentyfikować, które zależności zajmują najwięcej miejsca, i podjąć decyzję o ich wymianie lub usunięciu.
Często zadawane pytania
Tak, każdy archiwizator (7-Zip, WinRAR) otwiera APK jako ZIP. Można przeglądać zawartość, ale do dekompilacji kodu potrzebne są specjalne narzędzia — JADX lub apktool.
XAPK — nieoficjalny format używany przez niektóre zewnętrzne sklepy. Łączy APK z dodatkowymi plikami OBB w jedno archiwum. Google Play i oficjalna dokumentacja Androida nie używają XAPK.
Android Studio automatycznie podpisuje kompilację debugowania debug.keystore przy uruchamianiu na urządzeniu. Do dystrybucji wersji testowej zespołowi wymagany jest podpis kluczem wydania lub użycie App Signing.
Użyj R8 do zaciemniania i minimalizacji, konwertuj obrazy do WebP, usuwaj nieużywane zasoby przez Lint, a dla dużych projektów przejdź na Android App Bundle z Dynamic Delivery.
Nie — każda zmiana APK po podpisaniu łamie podpis cyfrowy. Do aktualizacji należy zbudować i podpisać nową wersję z zwiększonym versionCode.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również