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 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также