APK (Android Package Kit) је формат архивске датотеке који се користи за дистрибуцију и инсталацију апликација на Android-у. Свака апликација коју корисник преузме из Google Play-а или ручно инсталира представља APK датотеку. Према Android Open Source Project, 2026, формат се заснива на стандарду ZIP и садржи компилирани код, ресурсе, манифест и дигитални потпис.
Главно
APK (Android Package Kit) је формат архиве у коју се пакује Android апликација за дистрибуцију. Технички, APK је ZIP архива са одређеном структуром која садржи све компоненте неопходне за рад апликације на уређају.
Формат APK се појавио заједно са првом верзијом Android-а 2008. године. Као основа узет је стандард JAR (Java Archive), који се, заузврат, заснива на ZIP-у. Такво наслеђе обезбедило је компатибилност са постојећим алатима за рад са архивама — било који архиватор отвара APK као обичан ZIP.
Google Play — главни канал дистрибуције APK-а, али формат се користи и у другим сценаријима: директна инсталација кроз прегледач (sideloading), корпоративне продавнице апликација, тестирање на развојним уређајима и инсталација у емулаторима. Према Statista-и, око 15% инсталација Android апликација у 2025. години одвија се ван Google Play-а.
Унутрашња структура APK-а је строко регулисана: свака апликација мора да садржи одређене датотеке и директоријуме. Кршење структуре доводи до грешке при инсталацији.
| Датотека/директоријум | Намена |
|---|---|
| AndroidManifest.xml | Манифест апликације: дозволе, компоненте, верзија SDK-а |
| classes.dex | Компилирани DEX бајт-код (може бити више датотека) |
| resources.arsc | Компилирани ресурси: стрингови, стилови, изгледи |
| res/ | Некомпилирани ресурси: слике, фонтови, XML |
| lib/ | Изворне библиотеке (.so) за различите CPU архитектуре |
| META-INF/ | Метаподаци: сертификати, листе датотека, хешеви |
Манифест — централна конфигурациона датотека апликације. У бинарном компилираном облику (не у читљивом XML-у) садржи име пакета, верзију, листу активности, сервиса, дозвола и захтеве за SDK. Без манифеста систем не зна како да покрене апликацију.
Изворни код на Java или Kotlin-у компилира се у DEX (Dalvik Executable) датотеке. Главна датотека се зове classes.dex. Ако бајт-код премаши лимит од 64K метода, креирају се classes2.dex, classes3.dex и тако даље — механизам multidex.
Директоријум lib/ садржи компилиране C/C++ библиотеке за различите архитектуре: armeabi-v7a, arm64-v8a, x86, x86_64. Свака библиотека има екстензију .so (Shared Object). Модерне апликације обично испоручују само arm64-v8a.
Изградња APK-а је вишеетапни процес аутоматизован системом за изградњу Gradle и Android Gradle Plugin-ом. Свака етапа претвара изворне датотеке у компоненте финалне архиве.
Изворни код се компилира у Java бајт-код (.class), затим конвертује у DEX кроз алат d8 (раније dx). Ресурси се компилирају у бинарни формат кроз AAPT2. Све компоненте се пакују у ZIP архиву и потписују дигиталним потписом.
// build.gradle.kts — основна конфигурација изградње 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 или R8 обфускују код, уклањају некоришћене класе и методе, смањујући величину APK-а. Без обфускације APK садржи пуна имена класа, што олакшава декомпилацију. R8 такође врши оптимизацију бајт-кода на нивоу DEX-а.
Дигитални потпис је обавезан елемент APK-а. Android не инсталира непотписане пакете. Потпис гарантује да апликација није измењена након објављивања и одређује коме припада пакет.
v1 (JAR signing) — оригинална шема заснована на потписивању сваке датотеке у архиви. Рањивост: могуће је уклонити датотеке из META-INF без откривања. v2 (APK Signature Scheme v2) појавила се у Android 7.0 — потписује се цела архива, што спречава модификацију. v3 подржава ротацију кључева, а v4 — инкременталну инсталацију.
Google Play захтева v2 или виши за све нове апликације од августа 2021. Препоручује се потписивање APK-а са све три шеме за максималну компатибилност са различитим верзијама Android-а.
У build.gradle се наводи keystore, лозинка и alias. Приватни кључ се чува у шифрованом складишту. За објављивање у Google Play-у користи се App Signing — Google чува приватни кључ, а програмер отпрема потписани APK.
Инсталација APK-а се врши кроз системски менаџер пакета PackageManager. Процес укључује проверу потписа, парсирање манифеста, копирање датотека и оптимизацију DEX-а кроз dex2oat.
Алат ADB (Android Debug Bridge) омогућава инсталацију APK-а директно са рачунара програмера. Команда `adb install app.apk` копира датотеку на уређај и покреће инсталацију. Застава -r поново инсталира апликацију уз задржавање података, застава -d дозвољава инсталацију верзије са нижим versionCode-ом.
Почевши од Android 8.0, систем захтева потврду инсталације из непознатих извора за сваку апликацију појединачно. Android 14 је појачао контролу: инсталација APK-а кроз продавнице трећих страна могућа је само након експлицитне дозволе у подешавањима. Google Play Protect скенира сваки APK при инсталацији на присуство злонамерног кода.
За апликације веће од 150 MB, Google Play подржава Expansion Files — додатне OBB пакете до 2 GB сваки. OBB датотеке нису део APK-а, већ се преузимају одвојено након инсталације. Формат подржава два типа: main (основни ресурси) и patch (ажурирања).
// Провера верзије APK-а кроз PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Верзија: ${info.versionName}")
На уређајима са ART (Android Runtime) након инсталације покреће се компилација DEX-а у изворни код кроз dex2oat. Процес може трајати неколико секунди и повећава величину инсталиране апликације, али убрзава њено покретање.
AAB (Android App Bundle) — формат који Google промовише као алтернативу APK-у за објављивање у Google Play-у. Разлика је суштинска: AAB се не инсталира директно, већ служи као контејнер из којег Google Play генерише оптимизоване APK-ове.
| Параметар | APK | AAB |
|---|---|---|
| Величина преузимања | Цела архива | Само потребне компоненте |
| Директна инсталација | Да | Не (генерисање APK-а) |
| Дистрибуција | Било који канал | Google Play |
| Контрола верзија | Верзија у манифесту | Dynamic Delivery |
| Објављивање | Google Play + треће стране | Google Play |
Google Play захтева AAB од августа 2021. за нове апликације. Међутим, APK остаје основни формат за дистрибуцију ван Google Play-а — путем веб-сајтова, корпоративних продавница и тестирања.
Програмери редовно наилазе на проблеме при изградњи и инсталацији APK-а. Већина њих је повезана са некомпатибилношћу верзија, потписом или структуром архиве.
Грешка настаје при покушају инсталације APK-а са истим именом пакета, али другачијим потписом. Android не дозвољава поновну инсталацију апликације са измењеним сертификатом. Решење — уклоните стару верзију пре инсталације.
Ако пројекат премаши лимит од 65536 метода, изградња пада са грешком dex. Решење — укључите multidex у build.gradle или оптимизујте зависности уклањањем некоришћених библиотека.
Google Play ограничава величину APK-а на 150 MB. За веће апликације користе се APK Expansion Files (OBB). Препоручује се смањење величине кроз R8, WebP слике и Android App Bundle. Сваки додатни мегабајт негативно утиче на конверзију инсталације: према Google-у, сваких 10 MB смањује конверзију за 1%.
APK се може декомпилирати помоћу алата JADX, APKTool или Bytecode Viewer. JADX обнавља оригинални Java код из DEX-а, што чини апликације без обфускације потпуно читљивим. За заштиту кода користи се ProGuard/R8, који преименује класе, методе и поља у кратке нечитљиве називе и уклања информације за отклањање грешака.
За анализу садржаја APK-а користе се Android Studio Profiler, apkanalyzer (CLI алат из Android SDK-а) и алати трећих страна. apkanalyzer приказује величину сваке компоненте APK-а: DEX, ресурса, изворних библиотека и потписа. Анализа помаже да се утврди које зависности заузимају највише простора и донесе одлука о њиховој замени или уклањању.
Често постављана питања
Да, било који архиватор (7-Zip, WinRAR) отвара APK као ZIP. Може се прегледати садржај, али за декомпилацију кода потребни су специјални алати — JADX или apktool.
XAPK — незванични формат који користе неке продавнице трећих страна. Он обједињује APK са додатним OBB датотекама у једну архиву. Google Play и званична документација Android-а не користе XAPK.
Android Studio аутоматски потписује debug верзију са debug.keystore при покретању на уређају. За дистрибуцију тест верзије тиму потребан је потпис издавачким кључем или коришћење App Signing-а.
Користите R8 за обфускацију и минимизацију, конвертујте слике у WebP, уклањајте некоришћене ресурсе кроз Lint, а за велике пројекте пређите на Android App Bundle са Dynamic Delivery.
Не — било која измена APK-а након потписивања нарушава дигитални потпис. За ажурирање потребно је изградити и потписати нову верзију са повећаним versionCode-ом.
Завршни закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође