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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също