APK
APK (от англ. Android Package Kit) — это формат архивных файлов, используемый операционной системой Android для распространения и установки мобильных приложений. Каждый файл APK содержит все компоненты, необходимые для работы программы: скомпилированный код (в формате DEX), ресурсы (изображения, звуки, строки), манифест с описанием приложения и цифровую подпись разработчика. Файлы APK являются аналогом установочных пакетов (например, .exe для Windows или .deb для Linux) и служат основным способом доставки приложений на устройства под управлением Android.
История
Появление формата
Формат APK был представлен компанией Google в 2008 году вместе с выходом первой версии операционной системы Android (Android 1.0). Изначально он базировался на формате JAR (Java Archive), который, в свою очередь, основан на ZIP-архивации. Основное отличие APK от JAR заключалось в добавлении файла AndroidManifest.xml и специфических для Android ресурсов.
Эволюция и стандартизация
С развитием Android формат APK претерпел ряд изменений:
- Android 2.2 (Froyo, 2010) — введена возможность установки приложений на внешнюю SD-карту, что потребовало изменений в структуре APK.
- Android 4.4 (KitKat, 2013) — добавлена поддержка ART (Android Runtime) вместо Dalvik, что изменило способ обработки кода внутри APK.
- Android 5.0 (Lollipop, 2014) — введена поддержка 64-битных архитектур и множественных APK для разных конфигураций устройств.
- Android 8.0 (Oreo, 2017) — представлен формат APK Signature Scheme v2, повышающий безопасность и скорость проверки подписей.
- Android 9.0 (Pie, 2018) — введена поддержка APK Signature Scheme v3 с возможностью ротации ключей подписи.
Переход к AAB
В 2021 году Google объявила, что формат Android App Bundle (AAB) станет обязательным для публикации приложений в Google Play. AAB — это не установочный формат, а формат публикации, из которого Google Play генерирует оптимизированные APK для каждого устройства. Однако APK остаётся основным форматом для установки приложений вне Google Play (sideloading) и для внутреннего тестирования.
Структура файла APK
Файл APK представляет собой ZIP-архив со строго определённой структурой. Основные компоненты:
AndroidManifest.xml
Обязательный файл, содержащий метаданные приложения: имя пакета, версию, разрешения, список компонентов (активности, службы, приёмники широковещательных сообщений), минимальную версию SDK и другие параметры. Файл хранится в скомпилированном бинарном формате AXML.
classes.dex
Файл, содержащий скомпилированный байт-код приложения в формате Dalvik Executable (DEX). В современных приложениях может быть несколько таких файлов (classes2.dex, classes3.dex и т.д.) из-за ограничения на количество методов в одном DEX-файле (65 536). При установке на устройствах с Android 5.0 и новее DEX-файлы преобразуются в OAT-файлы (Optimized Android Runtime) для ускорения выполнения.
resources.arsc
Скомпилированный файл ресурсов, содержащий все строки, цвета, стили, размеры и другие ресурсы, используемые в приложении. Этот файл позволяет системе эффективно загружать локализованные ресурсы в зависимости от языка и региона устройства.
Каталог res/
Содержит нескомпилированные ресурсы: изображения (PNG, JPEG, WebP), макеты интерфейса (XML), анимации, меню, а также ресурсы для разных конфигураций (плотность экрана, ориентация, размер экрана). Ресурсы организованы по подкаталогам: drawable/, layout/, values/, anim/ и т.д.
Каталог lib/
Содержит скомпилированные нативные библиотеки для разных архитектур процессоров: ARM, ARM64, x86, x86_64. Библиотеки обычно представлены в формате .so (Shared Object). Наличие библиотек для разных архитектур увеличивает размер APK, но обеспечивает совместимость с широким спектром устройств.
Каталог META (организация признана экстремистской, деятельность запрещена в РФ)-INF/
Содержит файлы цифровой подписи приложения:
- MANIFEST.MF — список всех файлов в APK с их хешами (SHA-256).
- CERT.SF — подписанный манифест с хешами разделов.
- CERT.RSA — сертификат разработчика и подпись.
Другие каталоги
- assets/ — произвольные файлы, доступные приложению через AssetManager (например, базы данных, шрифты, конфигурации).
- kotlin/ — метаданные для приложений, написанных на Kotlin.
- org/ — дополнительные файлы для некоторых библиотек.
Процесс создания и подписи
Сборка
Разработчик создаёт APK с помощью инструментов сборки, таких как Gradle (стандартный для Android Studio), Ant или Maven. Процесс включает:
- Компиляцию исходного кода (Java, Kotlin) в байт-код JVM.
- Преобразование байт-кода в DEX-формат с помощью инструмента dx или d8.
- Компиляцию ресурсов в бинарный формат (AAPT2 — Android Asset Packaging Tool).
- Объединение всех компонентов в ZIP-архив.
Подпись
Каждый APK должен быть подписан цифровой подписью разработчика. Подпись гарантирует целостность приложения и идентифицирует автора. Существуют три схемы подписи:
- v1 (JAR signing) — подпись на основе файлов META-INF.
- v2 (APK Signature Scheme v2) — подпись всего APK-файла, обеспечивающая более быструю проверку и защиту от повреждений.
- v3 (APK Signature Scheme v3) — расширение v2, поддерживающее ротацию ключей.
Подпись выполняется с помощью инструмента apksigner (входит в Android SDK) или через Android Studio. Для публикации в Google Play требуется подпись с использованием сертификата, который может быть сгенерирован разработчиком или управляться Google Play App Signing.
Установка APK
Через Google Play
Основной способ установки — через магазин приложений Google Play. Пользователь находит приложение, нажимает «Установить», и Google Play автоматически загружает и устанавливает APK, оптимизированный для конкретного устройства.
Сторонняя установка (sideloading)
Пользователь может установить APK вручную, загрузив файл из интернета или получив его другим способом. Для этого необходимо:
- Включить в настройках устройства опцию «Установка из неизвестных источников» (на Android 8.0 и новее — для каждого приложения отдельно).
- Открыть APK-файл через файловый менеджер или браузер.
- Подтвердить установку.
Сторонняя установка несёт риски безопасности: вредоносные приложения могут быть замаскированы под легитимные APK. Google рекомендует устанавливать приложения только из проверенных источников.
Командная строка (ADB)
Разработчики и продвинутые пользователи могут устанавливать APK через Android Debug Bridge (ADB) с помощью команды: `` adb install путь_к_файлу.apk `` Этот способ не требует включения установки из неизвестных источников, но требует включённой отладки по USB.
Безопасность
Проверка подписи
При установке APK система Android проверяет цифровую подпись. Если подпись недействительна или отсутствует, установка блокируется. При обновлении приложения подпись нового APK должна совпадать с подписью установленной версии.
Google Play Protect
Встроенная в Android система безопасности (Google Play Protect) сканирует APK-файлы на наличие вредоносного кода как при установке из Google Play, так и при сторонней установке. При обнаружении угрозы установка блокируется, а пользователь получает предупреждение.
Разрешения
AndroidManifest.xml содержит список разрешений, запрашиваемых приложением. При установке пользователь видит этот список и может отказаться от установки, если считает разрешения избыточными. Начиная с Android 6.0 (Marshmallow), некоторые разрешения можно отозвать после установки.
Вредоносные APK
Формат APK может использоваться для распространения вредоносного ПО. Злоумышленники могут:
- Внедрять вредоносный код в легитимные приложения (репакинг).
- Создавать поддельные приложения, имитирующие популярные сервисы.
- Использовать уязвимости в старых версиях Android для обхода защиты.
Для защиты пользователям рекомендуется:
- Устанавливать приложения только из Google Play.
- Проверять отзывы и рейтинг приложения.
- Использовать антивирусное ПО.
- Обновлять операционную систему.
Инструменты для работы с APK
Декомпиляция
- APKTool — инструмент для декомпиляции APK в читаемый XML и обратной компиляции. Позволяет извлекать ресурсы, манифест и код.
- JADX — декомпилятор DEX-файлов в Java-код. Позволяет просматривать исходный код приложения.
- Bytecode Viewer — многофункциональный инструмент для анализа APK, включающий декомпиляторы, редакторы и просмотрщики.
Анализ
- APK Analyzer — встроенный в Android Studio инструмент для просмотра структуры APK, размера компонентов и зависимостей.
- aapt (Android Asset Packaging Tool) — командная утилита для просмотра информации об APK (версия, разрешения, ресурсы).
- dexdump — утилита для анализа DEX-файлов.
Редактирование
- APK Editor — приложения для Android, позволяющие изменять ресурсы и манифест APK прямо на устройстве.
- Android Studio — полная среда разработки, позволяющая собирать, подписывать и анализировать APK.
Распространение APK в России
В России APK-файлы широко используются для установки приложений как через официальные магазины (Google Play, RuStore, NashStore), так и через сторонние сайты. После ухода Google из России в 2022 году и блокировки некоторых сервисов, популярность сторонней установки APK возросла. Российские разработчики активно используют формат APK для публикации приложений в отечественных магазинах приложений и на собственных сайтах.
Источники
- Android Developers Documentation — «Application Fundamentals» (Google).
- Android Open Source Project — «APK File Format» (AOSP).
- «Android Security: Attacks and Defenses» — A. S. Tanenbaum, H. Bos (2019).
- «Android Internals: A Confectioner's Cookbook» — J. Levine (2017).
- Документация Android Studio — «Build and run your app».
- «Android Security Internals» — N. Elenkov (2014).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →