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. Если байт-код превышает лимит в 64К методов, создаются 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 МБ Google Play поддерживает Expansion Files — додаткові OBB-пакеты до 2 ГБ кожен. OBB файлы не входят в APK, а загружаются отдельно после встановлення. Формат поддерживает два типа: main (базовые ресурсы) и patch (оновлення).
// Перевірка версії APK через PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
"com.example.app",
PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Version: ${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 МБ. Для более крупных додатків використовуються APK Expansion Files (OBB). Рекомендуется уменьшать размер через R8, WebP-изображения и Android App Bundle. Каждый лишний мегабайт негативно впливає на конверсию встановлення: по данным Google, кожні 10 МБ снижают конверсию на 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.keystore при запуске на устройстве. Для распространения тестовой версии команде вимагаєся підпис релизным ключом или использование App Signing.
Используйте R8 для обфускації и минимизации, конвертируйте изображения в WebP, видаляйте неиспользуемые ресурсы через Lint, а для больших проектов переходите на Android App Bundle с Dynamic Delivery.
Ні — любое изменение APK после підписи ломает цифровую підпис. Для оновлення необхідно собрать и подписать новую версию с збільшеним versionCode.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також