Если вы скачали APK-файл и хотите посмотреть, что находится внутри — ресурсы, код, манифест, — первым делом проверьте, достаточно ли вам простого распаковывания архива: APK по своей структуре является ZIP-контейнером, и его содержимое можно извлечь обычным архиватором вроде 7-Zip без установки специальных инструментов. Однако бинарные файлы вроде classes.dex и скомпилированный AndroidManifest.xml при таком подходе останутся нечитаемыми — для их анализа понадобятся декомпиляторы.
В этой статье разберём три уровня «разборки» APK на ПК: простое извлечение содержимого, декомпиляцию ресурсов через Apktool и преобразование DEX-кода в читаемый Java-код с помощью JADX. Инструкция подходит для Windows, а большинство инструментов также работают на Linux и macOS.
Что находится внутри APK-файла
APK (Android Package Kit) — это установочный пакет приложения Android, представляющий собой ZIP-архив со строго определённой структурой. Понимание этой структуры помогает сразу найти нужное, не распаковывая всё подряд.
- 📄 AndroidManifest.xml — описание приложения: разрешения, активности, сервисы. В APK хранится в бинарном виде.
- ⚙️ classes.dex (иногда несколько файлов) — скомпилированный код приложения в формате Dalvik Executable.
- 🖼️ res/ — ресурсы: иконки, изображения, XML-разметки интерфейса.
- 📦 resources.arsc — скомпилированные строковые и числовые ресурсы.
- 🗜️ assets/ — произвольные файлы, которые разработчик упаковал «как есть».
- 🔐 META-INF/ — цифровые подписи и сертификаты приложения.
Изображения и аудио из папок res и assets можно открыть сразу после распаковки. А вот манифест, строки и код потребуют декомпиляции — об этом ниже.
Способ 1: распаковка архиватором
Самый быстрый вариант, если нужны только картинки, шрифты или медиафайлы. Необходимо переименовать файл, сменив расширение с .apk на .zip, либо открыть его напрямую через архиватор: в 7-Zip достаточно кликнуть правой кнопкой по файлу и выбрать пункт открытия архива.
После распаковки вы получите полную структуру папок. Учтите, что XML-файлы будут в бинарном формате — при открытии в блокноте вы увидите набор нечитаемых символов. Это нормально: формат AXML требует конвертации, которую выполняет Apktool.
Способ 2: декомпиляция через Apktool
Apktool — основной инструмент для разборки APK: он преобразует бинарный манифест и ресурсы в читаемый XML и переводит DEX-код в smali — текстовое представление байт-кода Dalvik. Для работы потребуется установленная Java (JRE/JDK), которую можно проверить командой java -version в командной строке.
Скачайте Apktool с официального репозитория проекта (на GitHub публикуются готовые JAR-файлы и скрипты-обёртки для Windows). Затем откройте командную строку в папке с инструментом и выполните:
apktool d app.apk -o app_decoded
Здесь d — сокращение от decode, а -o задаёт папку для результатов. После завершения в каталоге app_decoded появится читаемый AndroidManifest.xml, папка res с обычными XML-файлами и каталог smali с кодом.
☑️ Проверка перед декомпиляцией через Apktool
Обратная операция тоже возможна: командой apktool b app_decoded проект собирается обратно в APK. Однако пересобранный файл потеряет оригинальную подпись — для установки на устройство его придётся подписать заново собственным ключом.
Способ 3: анализ кода через JADX
Smali-код читается тяжело, особенно без опыта. Удобнее использовать JADX — декомпилятор, который преобразует DEX-байт-код непосредственно в Java-исходники. Проект распространяется в двух вариантах: консольная утилита jadx и графическая оболочка jadx-gui, в которой можно открыть APK двойным кликом и просматривать дерево классов.
Для консольного варианта команда выглядит так:
jadx -d output_folder app.apk
В графической версии доступны поиск по строкам, переход к определениям классов и просмотр ресурсов — это самый комфортный способ изучить логику приложения. Стоит понимать ограничение: декомпилированный Java-код не идентичен исходному — имена переменных и комментарии теряются при компиляции, а если разработчик применил обфускацию (например, через ProGuard или R8), классы будут называться бессмысленными сочетаниями вроде a.b.c.
Сравнение инструментов
| Инструмент | Что даёт на выходе | Сложность | Когда использовать |
|---|---|---|---|
| 7-Zip / WinRAR | Файлы «как есть», бинарные XML | Минимальная | Нужны картинки, аудио, шрифты |
| Apktool | Читаемые XML + smali-код | Средняя | Анализ ресурсов, модификация и пересборка |
| JADX | Java-код, дерево классов | Низкая (GUI) | Изучение логики приложения |
| Android Studio (APK Analyzer) | Структура, размеры, манифест, DEX | Низкая | Быстрый обзор состава пакета |
Если установлена Android Studio, попробуйте встроенный анализатор: меню Build → Analyze APK открывает файл и показывает размеры компонентов, манифест и список DEX-файлов без установки сторонних утилит.
Что делать, если Apktool выдаёт ошибку при декомпиляции
Чаще всего помогает обновление Apktool до последней версии — новые приложения могут использовать свежие версии Android-фреймворка, которые старые релизы инструмента не понимают. Также проверьте, что APK-файл скачан полностью и не повреждён (сравните размер с источником). Если приложение защищено упаковщиком, стандартные инструменты могут не справиться — это ожидаемое ограничение.
Частые проблемы и их решение
Не всегда разбор проходит гладко. Вот типичные ситуации, с которыми сталкиваются при декомпиляции:
- 🚫 Ошибка «java не является командой» — Java не установлена или не прописана в переменной PATH. Установите JRE и перезапустите командную строку.
- 🧩 Обфусцированный код — классы с именами вида
a.a.a. Полностью «деобфусцировать» нельзя, но логику часто удаётся понять по вызываемым системным API. - 🛡️ Упаковщики и протекторы — некоторые приложения шифруют DEX и распаковывают его в памяти. Стандартные инструменты увидят лишь код-загрузчик.
- 📁 Split APK (APKS, XAPK) — приложение разделено на несколько пакетов. Сначала извлеките отдельные APK из контейнера, затем разбирайте каждый.
⚠️ Внимание: скачивайте Apktool и JADX только с официальных репозиториев проектов. Сторонние сайты иногда распространяют модифицированные сборки инструментов, которым вы затем доверяете анализ потенциально вредоносных файлов.
⚠️ Внимание: анализ APK для обучения, проверки безопасности или исследования собственных приложений — законная практика, но модификация и распространение чужих программ может нарушать лицензионное соглашение и авторские права. Учитывайте это перед пересборкой и публикацией изменённых пакетов.
FAQ: частые вопросы
Можно ли разобрать APK без установки программ?
Частично — онлайн-декомпиляторы существуют, но они требуют загружать файл на чужой сервер, что небезопасно для конфиденциальных или неизвестных APK. Локальные инструменты вроде JADX надёжнее и работают без интернета.
Почему после распаковки AndroidManifest.xml не читается?
В APK манифест хранится в бинарном формате AXML. Его нужно декомпилировать через Apktool или открыть файл в JADX — тогда XML станет обычным текстом.
Можно ли собрать APK обратно после изменений?
Да, командой apktool b. Но оригинальная цифровая подпись будет утеряна — потребуется подписать пакет собственным ключом, а приложения с проверкой подписи могут отказаться работать.
Что делать, если код в JADX выглядит бессмысленным?
Вероятнее всего, применена обфускация. Ориентируйтесь на вызовы стандартных Android API, строковые константы и структуру пакетов — они помогают восстановить логику даже при искажённых именах классов.
Подходит ли способ для APK из нескольких файлов (XAPK)?
XAPK — это контейнер, внутри которого лежат базовый APK и дополнительные split-пакеты. Сначала извлеките их архиватором, затем анализируйте каждый APK отдельно описанными выше инструментами.