Batch ApkTool
Позволяет пакетно деодексировать, декомпилировать, изменять ресурсы и smali-код, рекомпилировать, подписывать, выравнивать (zipalign) APK, ZIP, JAR-файлы. Дополнительно есть возможность подключения плагинов, просмотра исходного Java кода APK, JAR и DEX-файлов, работа с устройством через ADB, и др.
Несмотря на свой скромный интерфейс, утилита превосходит большинство аналогичных приложений по качеству работы и удобству использования, поскольку она разрабатывается в тесном сотрудничестве с профессионалами по модификации Android-приложений, а также с головой и руками.
Так же в архиве с программой находится подробная инструкция по использованию.
РЕКОМЕНДАЦИИ:
Перед использованием ВНИМАТЕЛЬНО прочитайте readme.txt в архиве с утилитой.
Подготовка к работе:
Убедитесь, что у вас установлена Java (JRE) 7 или выше. Если нужна портативная версия со встроенной Java - используйте standalone-версию Batch ApkTool.
Распакуйте архив. В пути к утилите и в именах обрабатываемых файлов избегайте спецсимволов (восклицательный знак !, амперсанд &, проценты % и др.) и русских букв.
1. Деодексация:
1.1 Поместите все содержимое папок system/app, system/priv-app и system/framework прошивки в папки _app, _priv-app и _framework утилиты соответственно. Можно слить файлы прямо с устройства, см п.3.5.
1.2 Укажите API level (пункт меню [84]), соответствующий версии android деодексируемой прошивки.
1.3 Выберите пункт меню [01].
1.4 Деодексированные и выравненные (zipalign) файлы будут находиться в папках _app, _priv-app и _framework с сохранением структуры каталогов.
1.5 Чтобы скопировать деодексированные APK или JAR-файлы для дальнейшей обработки, выберите пункт меню [02] или [03]. Файлы будут скопированы в папки _INPUT_APK или _INPUT_JAR соответственно.
2. Декомпиляция и рекомпиляция:
2.1 Поместите файлы для обработки в папку _INPUT_APK.
2.2 Если вы планируете разбирать системные файлы (то есть имеющие зависимости с фреймворками прошивки), поместите все APK-файлы из папки system/framework этой прошивки в папку _framework утилиты; если планируете разбирать обычные НЕсистемные APK - оставьте папку _framework пустой.
2.3 Выберите пункт меню [1]. В папке _INPUT_APK появятся разобранные приложения.
2.4 Внесите необходимые изменения.
2.5 Если вы разбираете системные файлы, ВЫключите пункт меню [89] - это сохранит оригинальную подпись системных APK. Для НЕсистемных APK, которые планируется устанавливать как обычные приложения, пункт должен быть включен.
2.6 Выберите пункт [3]. Перепакованные, подписанные (если включена соответствующая опция) и выравненные APK будут находиться в папке _OUT_APK.
3. ADB:
3.1 Позволяет работать с устройством через Android Debug Bridge. На компьютере должен быть установлен драйвер вашего устройства, а на устройстве должна быть включена отладка по USB.
3.2 Пункт [10] - с него следует начинать работу с ADB. Возможно два варианта подключения:
- 1 = USB - подключение по USB и отображение подключенных устройств.
- 2 = Wi-Fi - подключение по Wi-Fi. Для работы режима необходим клиент, например, этот https://play.google.com/store/apps/details?id=com.ttxapps.wifiadb С его помощью можно включить режим беспроводной отладки и узнать IP-адрес устройства.
3.3 Пункт [11] - установка APK на устройство. Установка ведется точно так же, как если бы вы устанавливали файл через файловый менеджер на телефоне, поэтому APK должен быть подписан.
3.4 Пункт [12] - запрос прав суперпользователя и перемонтирование папки /system для записи. Для корректной работы этого пункта необходим рут.
3.5 Пункт [13] - копирование файлов из соответствующих папок на телефоне в папки _app, _priv-app и _framework утилиты.
3.6 Пункт [14] - копирование файлов в соответствующие папки на телефоне. Папка /system должна быть смонтирована для записи через пункт [12].
3.7 Пункт [15] - сохранение снимка экрана в папке проекта (требуется android 4.0 или выше).
3.8 Пункт [16] - запись видео с экрана и сохранение его в папку проекта (требуется android 4.4 или выше, макс. длительность - 3 мин).
3.9 Пункт [17] - терминал устройства.
3.10 Пункт [18] - вывод важнейших системных логов (logcat (main, radio, events), dmesg и bugreport) и сохранение их в файл в папке проекта. Логи можно (и нужно) смотреть при циклических перезагрузках и прочих системных сбоях, даже когда само устройство не отзывается.
- Подпункт [6] предназначен для сохранения таблицы inline-методов прошивки. Это может помочь, если прошивка не деодексируется стандартным методом (только для Android < 5.0).
3.11 Пункт [19] - различные варианты перезагрузки. Как правило можно перезагрузиться, даже когда само устройство не отзывается.
3.12 Пункт [20] - краткая информация о версии android и файловой системе.
3.13 Пункт [21] - корректно завершает работу сервера ADB. Этой командой необходимо завершать работу с ADB, иначе не сработает безопасное извлечение устройства.
4. Дополнительные возможности:
4.1 Пункты [04], [05], [06] и [07] предназначены для декомпиляции и рекомпиляции APK или JAR файлов при помощи baksmali-smali. Декомпилируется только smali-код.
- Для этого поместите APК файлы в папку _INPUT_APK (JAR файлы в папку _INPUT_JAR), укажите API level, декомпилируйте, внесите необходимые изменения и рекомпилируйте. Перепакованные, подписанные (если включена соответствующая опция) и выравненные файлы будут находиться в папках _OUT_APK (_OUT_JAR).
4.2 Пункт [4] позволяет подписывать APK, ZIP, JAR файлы. Поместите файлы для подписи в папку _INPUT_APK, подписанные и выравненные файлы будут находиться в папке _OUT_APK.
4.3 Пункт [5] позволяет выравнивать APK-файлы. Поместите файлы для выравнивания в папку _INPUT_APK, выравненные файлы будут находиться в папке _OUT_APK.
4.4 Пункт [6] позволяет просмотреть исходный Java код APK, JAR и DEX файлов при помощи программ jadx или procyon. jadx также позволяет просмотреть ресурсы APK-файлов.
4.5 Пункт [7] позволяет запускать плагины. Если вы хотите создать собственный плагин, см. примеры в папке bin\plugins. На данный момент доступны следующие плагины:
- Заменить ресурсы без перекомпиляции: позволяет быстро, без перекомпиляции заменить, например, графику или музыку в APK файлах. Поместите APK в папку _INPUT_APK, а файлы для замены в _INPUT_APK\_RES_REPLACE\_имя_апк_\ с охранением иерархии каталогов. Измененные, подписанные (если включена соответствующая опция) и выравненные файлы будут находиться в папке _OUT_APK.
- Преобразовать Unicode escapes в UTF-8: конвертирует файлы *.smali декомпилированного кода, переводя последовательности типа "\u043f\u0440\u0438\u0432\u0435\u0442\u0029" в человекопонятные "привет)". Очень полезная штука для перевода строк в smali.
- Выбрать цвета интерфейcа: позволяет настроить цвета основных элементов интерфейса утилиты.
4.6 Пункты в категории ОБСЛУЖИВАНИЕ позволяют очистить соответствующие папки утилиты.
5. Еще немного информации:
5.1 Пункт меню [80] позволяет переключаться между проектами. Название проекта соответствует имени папки, в которой будет вестись работа. Название проекта по умолчанию - ".", это соответствует корневой папке утилиты. После создания других проектов, папки и файл настроек проекта "." можно удалить.
5.2 Пункты меню [81] и [82] позволяют выбрать для обработки один файл из папок _INPUT_APK и _INPUT_JAR соответственно. По умолчанию выбраны все файлы "*".
5.3 Если одна версия apktool сообщает об ошибке при декомпиляции или рекомпиляции, попробуйте другую версию (пункт меню [85]). В папку bin можно добавить любую версию apktool и smali, они должны иметь названия apktool_%номер_версии%.jar, smali-%номер_версии%.jar и baksmali-%номер_версии%.jar.
5.4 При включенной опции [86] поврежденные ресурсы (если таковые имеются), которые приводят к ошибкам при декомпиляции вида "Invalid config flags detected. Dropping resources", будут храниться в папках res\*-ERR*. Вы должны будете исправить их вручную перед рекомпиляцией.
5.5 При включенной опции [87] сборка APK при рекомпиляции будет производится в экспертном режиме - за основу для сборки будет взят исходный APK, и в него будут добавляться измененные файлы. Режим может помочь в случае, когда собранное в стандартном режиме приложение не работает (apktool неправильно выставил степень сжатия, приложение чувствительно к рекомпиляции ресурсов, и т.д.). ВНИМАНИЕ: Режим всегда включен для apktool 1.x. Возможно увеличение размера результирующего APK.
5.6 При декомпиляции с выключенной опцией [88] в смали-код не будет добавляться отладочная информация (.local, .param, .line, и т.д.). Благодаря этому сравнивать смали-файлы между собой становится удобнее (например, от разных версий одного и того же приложения).
5.7 Пункт меню [90] позволяет выбрать ключ для подписи APK, ZIP, и JAR файлов. Вы можете добавить собственные ключи в папку bin, они должны иметь название %имя ключа%.pk8 и %имя ключа%.x509.pem
5.8 Чтобы по окончании декомпиляции-рекомпиляции автоматически открывался лог работы, установите опцию [91] в режим ДА. Чтобы после каждой операции выводилось предложение открытия лога, используйте режим ВРУЧНУЮ.
5.9 Сменить язык интерфейса утилиты можно, выбрав пункт меню [92]. Если вы хотите добавить перевод на ваш родной язык в дистрибутив утилиты, пишите в тему утилиты на форуме 4PDA: http://4pda.ru/forum/index.php?showtopic=557858
5.10 Увеличить размер шрифта в окне утилиты можно, нажав ПКМ на заголовке окна утилиты -> Свойства -> Шрифт.
ВСЕГДА используйте последнюю версию утилиты.
Если файл не разбирается\не собирается, попробуете выбрать другую версию apktool. Помните, что собирать нужно той же версией apktool, которой разбирали. Также убедитесь, что это не ваш случай.
ВСЕГДА прикладывайте лог (полностью весь, а не только кусочек с ошибкой) и сам файл (с фреймами) - тогда вам ответят быстрее.
Также вполне вероятно, что решение вашей ошибки уже найдено и описано в посте Решение ошибок из лога BatchApkTool (apktool).