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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

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