Разобрать APK-файл, изменить его содержимое и собрать обратно можно с помощью бесплатной утилиты Apktool: она декомпилирует пакет в читаемую структуру папок, а после правок собирает его заново. Без этого инструмента отредактированный архив просто не установится — Android отклонит пакет с повреждённой подписью или битым resources.arsc. Ниже разберём весь цикл: от распаковки до подписи готового файла.
Сразу обозначим границу применимости: инструкция описывает работу с приложениями, которые вы имеете право изменять — собственными проектами, открытым ПО или программами без защиты от модификации. Точные команды могут немного отличаться в зависимости от версии Apktool и операционной системы, поэтому сверяйтесь с документацией используемой версии.
Что находится внутри APK-файла
APK — это обычный ZIP-архив с особой структурой. Если переименовать файл в .zip и открыть архиватором, вы увидите набор папок и файлов, но большая часть содержимого будет в скомпилированном виде: строки и ресурсы зашиты в бинарный resources.arsc, а код приложения упакован в файлы classes.dex.
Именно поэтому простое редактирование архива не работает. Чтобы изменить текст интерфейса, иконки или логику приложения, пакет нужно сначала декомпилировать — преобразовать бинарные данные в редактируемый вид.
- 📄 AndroidManifest.xml — описание компонентов, разрешений и версии приложения;
- 🎨 res/ — ресурсы: картинки, строки, цвета, разметка экранов;
- ⚙️ classes.dex — скомпилированный код, который Apktool превращает в smali;
- 🔐 META-INF/ — цифровая подпись пакета, которая слетает после любых правок.
Инструменты, которые понадобятся
Для полного цикла «разобрать — изменить — собрать» потребуется несколько программ. Все они бесплатны и работают на Windows, Linux и macOS.
| Инструмент | Назначение |
|---|---|
| Apktool | Декомпиляция и обратная сборка APK |
| Java (JDK) | Необходима для запуска Apktool и утилит подписи |
| apksigner / jarsigner | Подпись собранного пакета |
| zipalign | Выравнивание ресурсов перед подписью (опционально) |
| Текстовый редактор | Правка XML и smali-файлов (например, Notepad++ или VS Code) |
Утилиты apksigner и zipalign входят в состав Android SDK Build-Tools. Если вы не планируете ставить весь SDK, их можно взять из отдельного пакета platform-tools или использовать сторонние подписывающие утилиты, например uber-apk-signer.
Шаг 1. Разборка APK через Apktool
Установите Java и поместите apktool.jar в рабочую папку рядом с целевым APK. Затем выполните команду декомпиляции:
java -jar apktool.jar d app.apk -o app_decoded
После завершения появится папка app_decoded с распакованным проектом. Внутри вы найдёте читаемый AndroidManifest.xml, ресурсы в исходном XML-формате и директорию smali/ с дизассемблированным кодом. Проверить успех разборки просто: откройте манифест в текстовом редакторе — если XML читается без «кракозябр», декомпиляция прошла корректно.
⚠️ Внимание: если приложение защищено обфускатором или упаковщиком, структура папок может быть нестандартной, а классы — иметь бессмысленные имена вроде a.a.a. Это нормально для защищённых приложений, но сильно усложняет поиск нужного кода.
Шаг 2. Внесение изменений
Что именно вы будете править, зависит от цели. Самые частые сценарии — замена строк интерфейса, иконок и мелкие правки логики.
- ✏️ Тексты и перевод — редактируются в
res/values/strings.xml(и в локализованных папкахvalues-ruи т.п.); - 🖼️ Картинки и иконки — заменяются файлами с тем же именем и разрешением в папках
res/drawable-*; - 🧩 Разрешения и компоненты — правятся в
AndroidManifest.xml; - 💻 Логика приложения — изменяется в файлах
smali, что требует понимания синтаксиса байт-кода.
Правки в smali — самый рискованный этап. Одна лишняя или удалённая строка регистра приводит к вылету приложения при запуске. Если вы не уверены в синтаксисе, меняйте только константы: строки, числа, булевы значения 0x0 / 0x1.
☑️ Перед правкой APK убедитесь
Шаг 3. Сборка APK обратно
Когда правки внесены, проект собирается обратно той же утилитой, но с ключом b (build):
java -jar apktool.jar b app_decoded -o app_mod.apk
Если сборка завершилась без ошибок, в рабочей папке появится app_mod.apk. Однако несобранный заново пакет и пакет без подписи Android устанавливать откажется — поэтому следующий шаг обязателен.
Типичная ошибка на этом этапе — сообщение вида brut.androlib.AndrolibException с указанием на конкретный ресурс. Обычно это значит, что в XML допущена синтаксическая ошибка: незакрытый тег, лишний символ или некорректная ссылка на ресурс. Откройте указанный в логе файл и проверьте строку, на которую ссылается сборщик.
Что делать, если сборка падает с ошибкой ресурсов
Чаще всего помогает повторная декомпиляция с ключом -r (не трогать ресурсы) или -s (не трогать код), если вы правили только одну часть. Также проверьте, что версия Apktool свежая — старые версии не справляются с приложениями, собранными под новые версии Android.
Шаг 4. Подпись и установка
Android принимает только подписанные пакеты. Поскольку оригинального ключа разработчика у вас нет, приложение подписывается собственным тестовым ключом. Проще всего воспользоваться утилитой uber-apk-signer:
java -jar uber-apk-signer.jar -a app_mod.apk
Либо подпишите вручную через apksigner из состава Build-Tools, предварительно создав keystore командой keytool. После подписи файл готов к установке на устройство.
⚠️ Внимание: подпись модифицированного APK отличается от оригинальной, поэтому поверх установленного оригинального приложения он не встанет — система выдаст ошибку конфликта подписей. Сначала удалите исходное приложение, но учтите, что его локальные данные при этом будут потеряны.
Ещё одно следствие смены подписи: приложения, проверяющие целостность (банковские клиенты, игры с онлайн-защитой), могут отказаться запускаться. Это ограничение метода, а не ошибка сборки.
Типичные проблемы и их решения
Даже при правильной последовательности действий встречаются характерные сбои. Разберём основные.
Приложение вылетает при запуске. Возможная причина — ошибка в правках smali или удалённый ресурс, на который ссылается код. Верните оригинальный файл из резервной копии и вносите изменения по одному, собирая и проверяя после каждого.
Ошибка установки «пакет повреждён». Чаще всего пакет не подписан или подписан некорректно. Повторите шаг подписи и убедитесь, что используется схема подписи v2 для современных версий Android.
Apktool не может декомпилировать файл. Проверьте, что APK не защищён упаковщиком, а версия утилиты актуальна. Для некоторых приложений помогает декомпиляция с отключённой обработкой ресурсов.
Часто задаваемые вопросы
Можно ли разобрать APK прямо на смартфоне?
Да, существуют мобильные инструменты вроде APK Editor и MT Manager, которые выполняют декомпиляцию и сборку на самом устройстве. Однако для сложных правок удобнее работать на ПК: там проще искать по файлам и отлаживать ошибки сборки.
Законно ли изменять чужие APK-файлы?
Модификация приложений, защищённых авторским правом, и их распространение могут нарушать лицензионное соглашение и законодательство. Безопасные сценарии — правка собственных приложений, ПО с открытым исходным кодом и анализ в образовательных целях.
Почему после сборки приложение требует вход в аккаунт заново?
Потому что при установке модифицированного пакета оригинал удаляется вместе с его данными, а новая подпись не даёт перенести их. Это неизбежное следствие смены цифровой подписи.
Чем smali отличается от Java-кода?
Smali — это текстовое представление байт-кода Dalvik/ART, в который компилируется Java или Kotlin. Он низкоуровневый: вместо привычных конструкций там регистры и инструкции. Для чтения логики удобнее использовать декомпиляторы вроде JADX, а править — уже в smali через Apktool.
Можно ли собрать APK без установки Java?
Нет, Apktool и утилиты подписи написаны на Java и требуют установленной JRE или JDK. Альтернатива — готовые онлайн-сервисы и мобильные редакторы, но они менее надёжны и не подходят для серьёзных правок.