Формат APK Android Package¶
APK (сокращение от англ. Android Package) — формат файлов и архивов, используемый операционной системой Android для распространения, установки и хранения приложений. Файл с расширением .apk представляет собой архив в формате ZIP, содержащий весь код, ресурсы, манифест и служебные данные, необходимые для работы программы на устройстве под управлением Android. APK является основным способом установки приложений вне магазина Google Play, а также форматом, через который пакеты дистрибутируются в самом магазине.
¶Структура файла
APK-файл по внутреннему устройству является обычным ZIP-архивом, что позволяет открывать его любым архиватором. Стандартный набор компонентов включает:
classes.dex— скомпилированный байт-код Dalvik/ART, исполняемый виртуальной машиной Android;resources.arsc— скомпилированный файл ресурсов (строки, стили, идентификаторы);AndroidManifest.xml— манифест приложения в бинарном XML-формате, описывающий компоненты (активности, сервисы, приёмники), необходимые разрешения и целевые версии API;res/— каталог с ресурсами: изображения, layout-файлы, значения строк;assets/— произвольные файлы приложения, доступные через AssetManager;lib/— скомпилированные нативные библиотеки.soдля различных ABI (armeabi-v7a, arm64-v8a, x86, x86_64);META (организация признана экстремистской, деятельность запрещена в РФ)-INF/— служебная информация, включая криптографические подписи (CERT.RSA,CERT.SF,MANIFEST.MF), подтверждающие целостность пакета и его авторство.
¶Подпись и безопасность
Каждый APK подписывается цифровой подписью разработчика. Android проверяет подпись при установке и при последующих обновлениях: обновить приложение можно только пакетом, подписанным тем же ключом. Это гарантирует, что обновление исходит от того же разработчика и не подменяет приложение вредоносной версией. Система разрешений, указанных в манифесте, ограничивает доступ приложения к функциям устройства: камере, контактам, геолокации, сети и другим ресурсам. Начиная с Android 6.0 (API 23) разрешения чувствительных категорий запрашиваются у пользователя во время работы, а не только при установке.
¶Установка вне магазина
Установка APK-файлов вне Google Play (так называемая «сайдлоадная» установка) требует от пользователя явного разрешения в настройках безопасности — «Установка из неизвестных источников». В зависимости от версии Android эта опция может быть общей для системы или выдаваться отдельно каждому приложению-посреднику (например, файловому менеджеру или браузеру), из которого запускается установщик. Сам процесс установки выполняется системным компонентом Package Installer, который распаковывает архив, проверяет подпись, регистрирует приложение в системе и размещает его данные в изолированных каталогах /data/app и /data/data.
¶AAB и современные тенденции
С 2021 года Google Play требует от новых разработчиков публиковать приложения в формате AAB (Android App Bundle) — формате динамической доставки, при котором магазин генерирует оптимизированный APK под конкретное устройство пользователя (только нужные ABI, плотность экрана, языковые ресурсы). Пользователь при этом получает пакет в стандартном APK, но автоматически собранный магазином. Формат APK продолжает использоваться для прямой установки, тестирования, распространения через сторонние каталоги (F-Droid, Huawei AppGallery, Amazon Appstore) и внутренней дистрибуции в организациях.
¶Разработка и сборка
APK-файлы формируются в процессе сборки проекта в Android Studio с помощью системы Gradle. На этапе сборки исходный код компилируется в байт-код, ресурсы обрабатываются aapt2, нативные библиотеки собираются через NDK, после чего всё упаковывается в архив и подписывается ключом разработчика. Для отладки используются отдельные варианты пакетов (debug-сборки), подписанные автоматически генерируемым ключом, и расширение .apk с суффиксом -debug. Выпускные (release) сборки подписываются личным ключом разработчика, который необходимо сохранять на протяжении всего жизненного цикла приложения.
¶Ограничения и альтернативы
Исходный формат APK имеет ограничение в 4 ГБ на размер архива, что исторически привело к появлению расширений APK Expansion (.obb) для крупных игр и приложений. С переходом на AAB эта проблема частично решена за счёт динамической доставки ресурсов. Альтернативные форматы установки включают APKM и XAPK (используемые некоторыми магазинами для многокомпонентных пакетов), а также форматы для других платформ — IPA для iOS и MSIX для Windows.
Источники:
- Официальная документация Android Developers (developer.android.com)
- Android Open Source Project — Package Manager (source.android.com)
- Google Play Console — Publishing documentation
- «Android Internals: A Confectioner's Cookbook» — Jonathan Levin
