APK: co to jest, struktura pliku i zasada działania

Autor: IT Sectr Opublikowano: 2026-04-15 Czas czytania: 8 min

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 — format pakietu instalacyjnego Androida oparty na ZIP z kodem bajtowym DEX i zasobami.
  • Struktura obejmuje manifest, pliki DEX, zasoby, biblioteki kodów natywnych i certyfikaty.
  • Podpis — obowiązkowy element: niepodpisany APK nie instaluje się na urządzeniach.
  • Budowa odbywa się przez Gradle: od Java/Kotlin do skompresowanego kodu bajtowego DEX.
  • Sklepy zewnętrzne i bezpośrednia instalacja APK pozostają popularne poza Google Play.

Co to jest APK i do czego służy

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.

Historia formatu

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.

Obszary zastosowania

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.

Struktura pliku APK od środka

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/katalogPrzeznaczenie
AndroidManifest.xmlManifest aplikacji: uprawnienia, komponenty, wersja SDK
classes.dexSkompilowany kod bajtowy DEX (może być kilka plików)
resources.arscSkompilowane 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

AndroidManifest.xml

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ę.

Pliki DEX

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.

Biblioteki natywne

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.

Proces budowy APK przez Gradle

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.

Etapy budowy

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.

kotlin
// 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 i zmniejszanie rozmiaru

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.

Podpisywanie APK: schematy v1, v2, v3 i v4

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.

Ewolucja schematów podpisu

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.

Proces podpisywania przez Gradle

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 na urządzeniu Android

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.

Instalacja przez ADB

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.

Bezpieczeństwo instalacji

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.

APK Expansion Files (OBB)

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).

kotlin
// Sprawdzanie wersji APK przez PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
    "com.example.app",
    PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Wersja: ${info.versionName}")

Optymalizacja dex2oat

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.

APK vs AAB: który format wybrać

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.

ParametrAPKAAB
Rozmiar pobieraniaPełne archiwumTylko potrzebne komponenty
Bezpośrednia instalacjaTakNie (generowanie APK)
DystrybucjaDowolny kanałGoogle Play
Kontrola wersjiWersja w manifeścieDynamic Delivery
PublikacjaGoogle Play + zewnętrzneGoogle 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.

Typowe problemy z APK i ich rozwiązania

Deweloperzy regularnie napotykają problemy przy budowie i instalacji APK. Większość z nich związana jest z niekompatybilnością wersji, podpisem lub strukturą archiwum.

INSTALL_FAILED_UPDATE_INCOMPATIBLE

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ą.

Przekroczenie limitu metod (65K)

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.

APK zbyt dużego rozmiaru

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%.

Dekompilacja APK i bezpieczeństwo

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.

Analiza APK przez narzędzia

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

Czy można otworzyć APK jako zwykłe archiwum ZIP?

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.

Czym APK różni się od XAPK?

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.

Czy trzeba podpisywać APK do testowania?

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.

Jak zmniejszyć rozmiar APK?

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.

Czy można zmienić APK po publikacji?

Nie — każda zmiana APK po podpisaniu łamie podpis cyfrowy. Do aktualizacji należy zbudować i podpisać nową wersję z zwiększonym versionCode.

Podsumowanie

  • APK — format pakietu instalacyjnego Androida oparty na ZIP z obowiązkowym podpisem cyfrowym.
  • Struktura obejmuje manifest, kod bajtowy DEX, zasoby, biblioteki natywne i certyfikaty.
  • Budowa odbywa się przez Gradle z kompilacją do DEX przez narzędzie d8.
  • Podpis jest obowiązkowy: schematy v1, v2, v3 i v4 zapewniają różny poziom ochrony.
  • Instalacja możliwa przez Google Play, ADB, przeglądarkę i sklepy firmowe.
  • AAB zastępuje APK w Google Play, ale APK pozostaje standardem dystrybucji zewnętrznej.
  • Ograniczenia: limit 150 MB dla Google Play, 64K metod bez multidex, obowiązkowy podpis.

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.

Omów projekt

Przeczytaj również