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. Если байт-код превышает лимит в 64К методов, создаются 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 МБ Google Play поддерживает Expansion Files — дополнительные OBB-пакеты до 2 ГБ каждый. OBB файлы не входят в APK, а загружаются отдельно после установки. Формат поддерживает два типа: main (базовые ресурсы) и patch (обновления).

kotlin
// Проверка версии APK через PackageManager
val pm = packageManager
val info = pm.getPackageInfo(
    "com.example.app",
    PackageManager.GET_ACTIVITIES
)
Log.d("APK", "Version: ${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 МБ. Для более крупных приложений используются APK Expansion Files (OBB). Рекомендуется уменьшать размер через R8, WebP-изображения и Android App Bundle. Каждый лишний мегабайт негативно влияет на конверсию установки: по данным Google, каждые 10 МБ снижают конверсию на 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.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 МБ для Google Play, 64K методов без multidex, обязательная подпись.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также