APK-файл¶
APK-файл (от англ. Android Package Kit) — это формат файла-архива, используемый операционной системой Android для распространения и установки мобильных приложений, а также промежуточного программного обеспечения. APK-файл является аналогом установочных пакетов в других операционных системах (например, .exe или .msi в Windows, .deb в Linux). Он содержит весь код, ресурсы, сертификаты и манифест, необходимые для работы приложения на устройстве.
¶История и развитие
Формат APK был представлен компанией Google в 2008 году вместе с выходом первой версии операционной системы Android (Android 1.0). Изначально он базировался на формате JAR (Java Archive), который, в свою очередь, основан на ZIP-архиве. Основное отличие APK от JAR заключалось в добавлении файла манифеста (AndroidManifest.xml), описывающего структуру и требования приложения, а также в использовании специальных инструментов для сборки.
С развитием Android формат APK претерпел ряд изменений. В Android 4.0 (Ice Cream Sandwich) была введена поддержка разделения APK на несколько частей (APK Expansion Files, OBB), что позволило обходить ограничение на размер файла в Google Play (изначально 50 МБ, позже увеличено до 100 МБ). В Android 5.0 (Lollipop) была добавлена поддержка ART (Android Runtime), что повлияло на упаковку кода — вместо Dalvik Executable (DEX) стали использоваться более оптимизированные форматы.
В 2018 году Google представила формат Android App Bundle (AAB) как более современную альтернативу APK для распространения через Google Play. AAB не является установочным файлом напрямую; он генерирует оптимизированные APK-файлы для конкретного устройства (например, только для нужной архитектуры процессора или плотности экрана). Однако APK остаётся основным форматом для установки приложений вне Google Play (так называемая «загрузка из сторонних источников» или «sideloading»).
¶Структура APK-файла
APK-файл представляет собой ZIP-архив, содержащий следующие компоненты:
- AndroidManifest.xml — обязательный файл в двоичном формате XML, описывающий имя приложения, версию, разрешения (доступ к камере, интернету, контактам и т. д.), список компонентов (активности, службы, приёмники широковещательных сообщений) и минимальные требования к устройству (версия Android, размер экрана).
- classes.dex — файл, содержащий скомпилированный код приложения в формате Dalvik Executable (для старых версий Android) или ART (для современных). Приложение может состоять из нескольких таких файлов (classes2.dex, classes3.dex и т. д.), если код превышает лимит на 64K методов в одном файле (так называемый «multidex»).
- resources.arsc — скомпилированные ресурсы приложения, включая строки, цвета, стили и макеты, упакованные в двоичный формат для быстрой загрузки.
- res/ — папка с нескомпилированными ресурсами: изображения (PNG, JPEG, WebP), макеты (XML-файлы), меню, анимации и т. д. Ресурсы могут быть организованы по квалификаторам (например,
res/drawable-hdpi/для экранов высокой плотности). - lib/ — папка с нативными библиотеками, написанными на C/C++ (файлы
.so). Они могут быть скомпилированы для разных архитектур процессоров: ARM, ARM64, x86, x86_64. - **META (организация признана экстремистской, деятельность запрещена в РФ)-INF/** — папка с метаданными и цифровыми подписями: файл
MANIFEST.MF(список всех файлов и их хеши),CERT.SF(подпись манифеста) иCERT.RSA(сертификат разработчика). Эти файлы обеспечивают целостность и аутентичность APK. - assets/ — папка для произвольных файлов, доступных через API AssetManager (например, шрифты, базы данных, HTML-страницы).
¶Процесс сборки APK
Сборка APK-файла из исходного кода включает несколько этапов:
- Компиляция ресурсов — инструмент
aapt2(Android Asset Packaging Tool) обрабатывает XML-файлы ресурсов и преобразует их в двоичный формат. - Компиляция кода — исходный код на Java/Kotlin компилируется в байт-код Java (файлы
.class), затем с помощью инструментаd8илиdxпреобразуется в Dalvik Executable (файлы.dex). - Упаковка — все компоненты (DEX-файлы, ресурсы, манифест, библиотеки) объединяются в ZIP-архив с помощью
apkbuilder. - Подпись — APK подписывается цифровым сертификатом разработчика с помощью
apksignerилиjarsigner. Подпись необходима для установки и обновления приложения. - Выравнивание — утилита
zipalignоптимизирует расположение данных в архиве для ускорения загрузки (выравнивание по 4-байтовым границам).
¶Установка APK-файлов
Установка APK-файла на устройство Android может происходить несколькими способами:
- Через Google Play — официальный магазин приложений от Google. При загрузке из Google Play устройство получает APK-файл, сгенерированный из Android App Bundle (AAB), оптимизированный для конкретного устройства.
- Из сторонних источников — пользователь может вручную загрузить APK-файл из интернета или передать его через Bluetooth, USB или облачные сервисы. Для этого необходимо включить в настройках устройства опцию «Установка из неизвестных источников» (в Android 8.0 и выше — разрешить установку для конкретного приложения, например, файлового менеджера).
- Через ADB — Android Debug Bridge, инструмент для разработчиков, позволяет устанавливать APK-файлы через USB-подключение с помощью команды
adb install <путь_к_файлу.apk>.
При установке система проверяет цифровую подпись APK. Если приложение уже установлено, подпись нового APK должна совпадать с подписью установленного, иначе установка будет отклонена (это предотвращает подмену приложения злоумышленником). Также проверяется соответствие версии Android, разрешений и других требований, указанных в манифесте.
¶Безопасность и риски
APK-файлы из непроверенных источников могут содержать вредоносное ПО. Основные угрозы:
- Трояны — приложения, маскирующиеся под легитимные, но выполняющие вредоносные действия (кража данных, отправка платных SMS, установка другого ПО).
- Шпионское ПО — программы, собирающие личную информацию (контакты, сообщения, геолокацию) без ведома пользователя.
- Рекламное ПО — приложения, показывающие навязчивую рекламу или изменяющие настройки системы.
- Банковские трояны — специализированные вредоносные программы, нацеленные на кражу данных банковских карт и доступ к онлайн-банкингу.
Google Play использует систему защиты Google Play Protect, которая сканирует APK-файлы на наличие вредоносного кода как при загрузке, так и на устройстве. Однако для APK из сторонних источников такая защита может быть отключена или неэффективна.
Рекомендуется устанавливать APK-файлы только из доверенных источников, проверять цифровую подпись и разрешения, запрашиваемые приложением. В России действует законодательство, регулирующее распространение программного обеспечения: установка приложений из официальных магазинов (RuStore, Google Play) является предпочтительной, а использование нелицензионного ПО может нарушать авторские права.
¶Расширения и модификации
Существуют модифицированные версии APK-файлов, например:
- APK с модами — изменённые версии игр или приложений, добавляющие новые функции (бесконечные ресурсы, отключение рекламы). Распространение таких файлов часто нарушает лицензионное соглашение разработчика.
- APK с патчами — файлы, исправляющие ошибки или добавляющие локализацию.
- APK для тестирования — отладочные версии (debug APK), подписанные тестовым сертификатом, которые не могут быть опубликованы в Google Play.
¶Альтернативы APK
С 2021 года Google активно продвигает Android App Bundle (AAB) как основной формат для публикации в Google Play. AAB не является установочным файлом; он содержит весь код и ресурсы приложения, а Google Play генерирует из него оптимизированный APK для каждого устройства. Преимущества AAB: меньший размер загрузки, возможность динамической доставки модулей (например, загрузка дополнительных языков только при необходимости). Однако для установки вне Google Play (sideloading) AAB не подходит — требуется преобразование в APK с помощью специальных инструментов (например, bundletool).
В России в 2022 году был запущен RuStore — официальный магазин приложений для Android, поддерживающий установку APK-файлов. RuStore использует собственную систему проверки безопасности и подписи приложений.
¶Инструменты для работы с APK
Для анализа, редактирования и распаковки APK-файлов используются следующие инструменты:
- APKTool — утилита для декомпиляции APK в исходный код ресурсов (XML, изображения) и повторной сборки.
- JADX — декомпилятор DEX-файлов в читаемый Java-код.
- dex2jar — конвертер DEX-файлов в JAR-файлы для анализа с помощью Java-декомпиляторов.
- Android Studio — официальная среда разработки, позволяющая собирать, подписывать и анализировать APK.
- ApkAnalyzer — инструмент в Android Studio для просмотра структуры APK, размера компонентов и разрешений.
¶Источники
- Android Developers Documentation: «Application Fundamentals» и «App Manifest Overview».
- Google Security Blog: «Google Play Protect: Keeping Android users safe».
- XDA Developers: статьи о структуре и модификации APK-файлов.
- Федеральный закон «Об информации, информационных технологиях и о защите информации» (№ 149-ФЗ).
- Официальная документация RuStore для разработчиков.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


