Владимир Медведев — автор PureGoogle.ru. Начал использовать Android с версии 1.5 и остается поклонником этой мобильной ОС по сей день.
Итак, в прошлом уже была налажена работа Apktool, теперь пришло время научится ею пользоваться. С помощью этой утилиты мы будем разбирать приложения .apk и собирать их обратно после изменения.
Преамбула
Стоит отметить, что я опишу здесь лишь изменение таких apk-файлов, как SystemUI.apk и framework-res.apk. Все остальные декомпилируются похожим образом, но о них речи идти не будет, во всяком случае пока. Во всех статьях в качестве основы будет выступать AOSP Android Jelly Bean, то есть описанное здесь может не подходить для прошивок разных производителей, мы будем работать с чистым роботом. Важно понимать, что для создания мода ваша прошивка должна быть деодексирована, то есть каждый системный apk-файл не должен сопровождаться файлом .odex, этот файл должен быть уже встроен в приложение. Проверить это тоже легко: берём любой архиватор и открываем им приложение, внутри будет несколько файлов и папок, один из них — classes.dex. Все стоковые прошивки одексированы! Если вы пользуетесь таковой — моды не ваше дело.
О том, где же взять эти файлы: SystemUI.apk можно отыскать в вашей прошивке по пути \system\app, framework-res.apk по пути \system\framework. Взять их можно непосредственно из телефона, а также из zip-архива с прошивкой.
Вполне очевидным должно быть то, что открытие apk-файла архиватором в целом нам не подходит. Таким образом мы ничего не добьёмся. Однако так можно делать в случае быстрой замены картинок или уже готовых ресурсов. Об этом будет рассказано далее.
Декомпиляция приложений
Кладём SystemUI.apk и framework-res.apk в корень любого локального диска, мне удобен диск D.
Первое, что нужно сделать — установить framework-res.apk, чтобы все приложения разбирались, скажем так, с проверкой по нему, всё же это главная кладовая графических ресурсов системы. Делается это командой apktool if file.apk. В нашем случае файл лежит в корне диска D, поэтому придётся указать до него путь, получим следующее:
1 |
apktool if D:\framework-res.apk |
Файл установится в папку пользователя, то есть путь будем примерно следующим C:\Users\username\apktool\framework. Всегда устанавливайте framework-res из прошивки, с которой ведётся работа, повторная установка этой командой другого файла лишь заменит уже существующий.
Теперь можно разбирать приложения. Делается это командой apktool d file.apk, но для нашего удобства мы положили файлы в корень диска D, там их и оставим, указав место, в которое они декомпилируются. Начнём с основного:
1 |
apktool d D:\framework-res.apk D:\framework-res |
В данном случае мы разобрали файл в новую папку framework-res для своего же удобства. Имя папки может быть любым, от этого ничего не зависит.
Поступим схожим образом и с SystemUI.apk:
1 |
apktool d D:\systemui.apk D:\systemui |
На этом всё закончилось, можно порадоваться и побродить по ресурсам приложений, но менять ничего мы пока не будем. Нужно научиться их собирать.
Компиляция приложений
Предположим, что мы что-то изменили в приложении, теперь собираем. Делаем это при помощи команды apktool b ***, где *** — имя папки, в которую было разобрано приложение. И у нас это папки framework-res и systemui в корне диска D. Поступать следует так:
1 |
apktool b D:\systemui |
1 |
apktool b D:\framework-res |
Приложения собраны! Новые apk-файлы можно найти в папке dist, которая теперь существует внутри папок, куда разбирались приложения, например, D:\framework-res\dist
Стоит отметить, что некоторые системные приложения нужно разбирать и собирать с проверкой по framework-res.apk, в таком случае нужно вводить команды, показанные на скриншоте, они отличаются лишь парой символов:
1 2 |
apktool d -f D:\file.apk D:\folder apktool b -f D:\folder |
Обычно, кстати, компилирую/декомпилирую SystemUI.apk именно так.
Владимир, скажите, а Вы «ломали» SystemUI в 4.4.2? На моё устройство обнов не будет, а толковых альтернативных прошивок не наблюдается, вот хочу «допилить» своё устройство.