Что такое формат файла APK?
Файл с расширением .apk представляет собой сжатый архив с приложением, игрой или прошивкой для системы Android. Пакеты APK построены на формате контейнера ZIP/JAR, что означает, что любой стандартный архиватор может открыть и просмотреть их содержимое. Изначально Google Play устанавливал лимит в 100 МБ на загрузку .apk, с возможностью добавления до двух файлов расширения объемом до 2 ГБ каждый для дополнительных ресурсов; с августа 2021 года Google Play требует, чтобы новые приложения публиковались в формате .AAB (Android App Bundles), которые генерируют оптимизированные для устройства раздельные APK во время установки, а не поставляют единый монолитный пакет.
Структура файла APK
Структура файлов APK основана на архиве JAR - они могут содержать следующие подпапки и файлы:
res- с описанием ресурсов в нескомпилированном виде,lib- содержит скомпилированные исходники и библиотеки приложения, разделенные по различным вычислительным платформам (например,arm64-v8a,x86_64),META-INF- с файлами, содержащими информацию о пакете, например, файлMANIFEST.MFили сертификаты,assets- содержит различные ресурсы, используемые приложением,classes.dex- скомпилированный байт-код Dalvik/ART, исполняемый средой выполнения Android,AndroidManifest.xml- манифест в бинарной кодировке, объявляющий разрешения приложения, компоненты и требования к SDK,resources.arsc- предварительно скомпилированная таблица ресурсов, сопоставляющая идентификаторы со строками, макетами и графикой.
Файлы Android Package используются для создания и распространения программ для мобильных платформ, работающих на системе Android. Содержимое файлов .apk можно распаковать с помощью большинства программ для декомпрессии, поддерживающих сжатие ZIP, или просмотреть, просто переименовав файл в .zip. Для обеспечения целостности пакеты защищены схемой подписи APK Signature Scheme v2/v3 (и v4 для инкрементных обновлений), при этом в установке будет отказано, если подпись не совпадает. Установка пакетов .apk не из Play Store по умолчанию запрещена - пользователи должны включить разрешение Установка неизвестных приложений в настройках Android или отправить пакет через команду adb install app.apk. Приложения, слишком большие для одного .apk, могут распространяться как .XAPK, который объединяет базовый APK с одним или несколькими раздельными APK в одном архиве.
Безопасность и защита
РИСК: HIGHAPK - это вектор №1 для вредоносного ПО на Android: ручная установка обходит сканирование Google Play Protect. Контрольный список рисков для пользователей: устанавливайте только из доверенных источников (Google Play, F-Droid, APKMirror - который проверяет подписи на соответствие разработчику), проверяйте, соответствуют ли запрашиваемые разрешения назначению приложения, никогда не устанавливайте APK, пришедший без запроса через чат/SMS (кампании «смишинга»), и сравнивайте подпись приложения при обновлении. Трюк с переименованием в .zip позволяет проверить содержимое перед установкой.
Детали формата
в двух словахПрограммы, открывающие файлы APK
Технические подробности
глубокая спецификация| Кодировка | Бинарная |
| Порядок байтов | Little-endian |
| Контейнер | Архив ZIP (также валиден как JAR) |
| Сжатие | DEFLATE для каждой записи; чувствительные к выравниванию записи хранятся без сжатия (метод STORED) и выровнены с помощью zipalign |
| Подпись / целостность | APK Signature Scheme v2/v3 (блок вставлен перед центральным каталогом ZIP); v4 для инкрементных обновлений на устройстве; отказ в установке при несоответствии подписи |
| Магические байты | 50 4B 03 04 - стандартный заголовок локального файла ZIP «PK» со смещением 0; отличается от обычного ZIP наличием AndroidManifest.xml и classes.dex |
| Внутренние файлы | AndroidManifest.xml, classes.dex (+ classes2.dex …), resources.arsc, res/, lib/, assets/, META-INF/ |
| Байт-код | Dalvik Executable (DEX) в classes.dex - скомпилирован из исходного кода Java/Kotlin, исполняется ART (Android Runtime) |
| Выравнивание | zipalign обеспечивает 4-байтную границу для несжатых записей; Android 15+ ориентируется на выравнивание страниц по 16 КБ |
| Формат манифеста | Бинарно-кодированный XML (AXML), объявляющий имя пакета, разрешения, компоненты Activity/Service/Provider, minSdkVersion, targetSdkVersion |
| Структура нативных библиотек | Подкаталог lib/<ABI> для каждой архитектуры: arm64-v8a, armeabi-v7a, x86, x86_64 |
| Таблица ресурсов | resources.arsc - плоский бинарный файл, сопоставляющий целочисленные идентификаторы ресурсов со строками, макетами, графикой и вариантами конфигурации |
| Типичный размер | 2 МБ - 1.5 ГБ; базовые APK приложений обычно 5-100 МБ; игры с упакованными ресурсами достигают верхнего предела |
| MIME-тип | application/vnd.android.package-archive |
| Платформа | Android (нативно); запуск на Windows, Linux, macOS через эмуляторы (BlueStacks, Android Studio AVD, Waydroid) |
| Выпущен | 2008 (Android 1.0) |
| Последняя версия | APK Signature Scheme v3 (Android 9, 2018); v4 incremental (Android 11, 2020) |
| Открыть стандартное | Да · без роялти |
| Спецификация | source.android.com |