APK: шта је то, структура датотеке и принцип рада

Аутор: IT Sectr Објављено: 2026-04-15 Време читања: 8 мин

APK (Android Package Kit) је формат архивске датотеке који се користи за дистрибуцију и инсталацију апликација на Android-у. Свака апликација коју корисник преузме из Google Play-а или ручно инсталира представља APK датотеку. Према Android Open Source Project, 2026, формат се заснива на стандарду ZIP и садржи компилирани код, ресурсе, манифест и дигитални потпис.

Главно

  • APK — формат инсталационог пакета за Android заснован на ZIP-у са DEX бајт-кодом и ресурсима.
  • Структура укључује манифест, DEX датотеке, ресурсе, библиотеке изворног кода и сертификате.
  • Потпис — обавезан елемент: непотписани APK се не инсталира на уређаје.
  • Изградња се одвија кроз Gradle: од Java/Kotlin до компримованог DEX бајт-кода.
  • Продавнице трећих страна и директна инсталација APK-а остају тражени ван Google Play-а.

Шта је APK и за шта се користи

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 датотеке изнутра

Унутрашња структура APK-а је строко регулисана: свака апликација мора да садржи одређене датотеке и директоријуме. Кршење структуре доводи до грешке при инсталацији.

Датотека/директоријумНамена
AndroidManifest.xmlМанифест апликације: дозволе, компоненте, верзија SDK-а
classes.dexКомпилирани DEX бајт-код (може бити више датотека)
resources.arscКомпилирани ресурси: стрингови, стилови, изгледи
res/Некомпилирани ресурси: слике, фонтови, XML
lib/Изворне библиотеке (.so) за различите CPU архитектуре
META-INF/Метаподаци: сертификати, листе датотека, хешеви

AndroidManifest.xml

Манифест — централна конфигурациона датотека апликације. У бинарном компилираном облику (не у читљивом XML-у) садржи име пакета, верзију, листу активности, сервиса, дозвола и захтеве за SDK. Без манифеста систем не зна како да покрене апликацију.

DEX датотеке

Изворни код на 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

Изградња APK-а је вишеетапни процес аутоматизован системом за изградњу Gradle и Android Gradle Plugin-ом. Свака етапа претвара изворне датотеке у компоненте финалне архиве.

Етапе изградње

Изворни код се компилира у Java бајт-код (.class), затим конвертује у DEX кроз алат d8 (раније dx). Ресурси се компилирају у бинарни формат кроз AAPT2. Све компоненте се пакују у ZIP архиву и потписују дигиталним потписом.

kotlin
// 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 и смањење величине

ProGuard или R8 обфускују код, уклањају некоришћене класе и методе, смањујући величину APK-а. Без обфускације APK садржи пуна имена класа, што олакшава декомпилацију. R8 такође врши оптимизацију бајт-кода на нивоу DEX-а.

Потписивање APK-а: v1, v2, v3 и v4 шеме

Дигитални потпис је обавезан елемент APK-а. Android не инсталира непотписане пакете. Потпис гарантује да апликација није измењена након објављивања и одређује коме припада пакет.

Еволуција шема потписивања

v1 (JAR signing) — оригинална шема заснована на потписивању сваке датотеке у архиви. Рањивост: могуће је уклонити датотеке из META-INF без откривања. v2 (APK Signature Scheme v2) појавила се у Android 7.0 — потписује се цела архива, што спречава модификацију. v3 подржава ротацију кључева, а v4 — инкременталну инсталацију.

Google Play захтева v2 или виши за све нове апликације од августа 2021. Препоручује се потписивање APK-а са све три шеме за максималну компатибилност са различитим верзијама Android-а.

Процес потписивања кроз Gradle

У build.gradle се наводи keystore, лозинка и alias. Приватни кључ се чува у шифрованом складишту. За објављивање у Google Play-у користи се App Signing — Google чува приватни кључ, а програмер отпрема потписани APK.

Инсталација APK-а на Android уређај

Инсталација APK-а се врши кроз системски менаџер пакета PackageManager. Процес укључује проверу потписа, парсирање манифеста, копирање датотека и оптимизацију DEX-а кроз dex2oat.

Инсталација кроз ADB

Алат ADB (Android Debug Bridge) омогућава инсталацију APK-а директно са рачунара програмера. Команда `adb install app.apk` копира датотеку на уређај и покреће инсталацију. Застава -r поново инсталира апликацију уз задржавање података, застава -d дозвољава инсталацију верзије са нижим versionCode-ом.

Безбедност инсталације

Почевши од Android 8.0, систем захтева потврду инсталације из непознатих извора за сваку апликацију појединачно. Android 14 је појачао контролу: инсталација APK-а кроз продавнице трећих страна могућа је само након експлицитне дозволе у подешавањима. Google Play Protect скенира сваки APK при инсталацији на присуство злонамерног кода.

APK Expansion Files (OBB)

За апликације веће од 150 MB, Google Play подржава Expansion Files — додатне OBB пакете до 2 GB сваки. OBB датотеке нису део APK-а, већ се преузимају одвојено након инсталације. Формат подржава два типа: main (основни ресурси) и patch (ажурирања).

kotlin
// Провера верзије APK-а кроз PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
    "com.example.app",
    PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Верзија: ${info.versionName}")

Оптимизација dex2oat

На уређајима са ART (Android Runtime) након инсталације покреће се компилација DEX-а у изворни код кроз dex2oat. Процес може трајати неколико секунди и повећава величину инсталиране апликације, али убрзава њено покретање.

APK vs AAB: који формат одабрати

AAB (Android App Bundle) — формат који Google промовише као алтернативу APK-у за објављивање у Google Play-у. Разлика је суштинска: AAB се не инсталира директно, већ служи као контејнер из којег Google Play генерише оптимизоване APK-ове.

ПараметарAPKAAB
Величина преузимањаЦела архиваСамо потребне компоненте
Директна инсталацијаДаНе (генерисање APK-а)
ДистрибуцијаБило који каналGoogle Play
Контрола верзијаВерзија у манифестуDynamic Delivery
ОбјављивањеGoogle Play + треће странеGoogle Play

Google Play захтева AAB од августа 2021. за нове апликације. Међутим, APK остаје основни формат за дистрибуцију ван Google Play-а — путем веб-сајтова, корпоративних продавница и тестирања.

Типични проблеми са APK-ом и њихова решења

Програмери редовно наилазе на проблеме при изградњи и инсталацији APK-а. Већина њих је повезана са некомпатибилношћу верзија, потписом или структуром архиве.

INSTALL_FAILED_UPDATE_INCOMPATIBLE

Грешка настаје при покушају инсталације APK-а са истим именом пакета, али другачијим потписом. Android не дозвољава поновну инсталацију апликације са измењеним сертификатом. Решење — уклоните стару верзију пре инсталације.

Прекорачење лимита метода (65K)

Ако пројекат премаши лимит од 65536 метода, изградња пада са грешком dex. Решење — укључите multidex у build.gradle или оптимизујте зависности уклањањем некоришћених библиотека.

APK превелике величине

Google Play ограничава величину APK-а на 150 MB. За веће апликације користе се APK Expansion Files (OBB). Препоручује се смањење величине кроз R8, WebP слике и Android App Bundle. Сваки додатни мегабајт негативно утиче на конверзију инсталације: према Google-у, сваких 10 MB смањује конверзију за 1%.

Декомпилација APK-а и безбедност

APK се може декомпилирати помоћу алата JADX, APKTool или Bytecode Viewer. JADX обнавља оригинални Java код из DEX-а, што чини апликације без обфускације потпуно читљивим. За заштиту кода користи се ProGuard/R8, који преименује класе, методе и поља у кратке нечитљиве називе и уклања информације за отклањање грешака.

Анализа APK-а кроз алате

За анализу садржаја APK-а користе се Android Studio Profiler, apkanalyzer (CLI алат из Android SDK-а) и алати трећих страна. apkanalyzer приказује величину сваке компоненте APK-а: DEX, ресурса, изворних библиотека и потписа. Анализа помаже да се утврди које зависности заузимају највише простора и донесе одлука о њиховој замени или уклањању.

Често постављана питања

Може ли се APK отворити као обична ZIP архива?

Да, било који архиватор (7-Zip, WinRAR) отвара APK као ZIP. Може се прегледати садржај, али за декомпилацију кода потребни су специјални алати — JADX или apktool.

По чему се APK разликује од XAPK-а?

XAPK — незванични формат који користе неке продавнице трећих страна. Он обједињује APK са додатним OBB датотекама у једну архиву. Google Play и званична документација Android-а не користе XAPK.

Да ли је потребно потписати APK за тестирање?

Android Studio аутоматски потписује debug верзију са debug.keystore при покретању на уређају. За дистрибуцију тест верзије тиму потребан је потпис издавачким кључем или коришћење App Signing-а.

Како смањити величину APK-а?

Користите R8 за обфускацију и минимизацију, конвертујте слике у WebP, уклањајте некоришћене ресурсе кроз Lint, а за велике пројекте пређите на Android App Bundle са Dynamic Delivery.

Може ли се APK изменити након објављивања?

Не — било која измена APK-а након потписивања нарушава дигитални потпис. За ажурирање потребно је изградити и потписати нову верзију са повећаним versionCode-ом.

Завршни закључци

  • APK — формат инсталационог пакета за Android заснован на ZIP-у са обавезним дигиталним потписом.
  • Структура укључује манифест, DEX бајт-код, ресурсе, изворне библиотеке и сертификате.
  • Изградња се врши кроз Gradle са компилацијом у DEX кроз алат d8.
  • Потпис је обавезан: шеме v1, v2, v3 и v4 обезбеђују различите нивое заштите.
  • Инсталација је могућа кроз Google Play, ADB, прегледач и корпоративне продавнице.
  • AAB замењује APK у Google Play-у, али APK остаје стандард за спољну дистрибуцију.
  • Ограничења: лимит 150 MB за Google Play, 64K метода без multidex-а, обавезан потпис.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође