для примера я разберу/соберу SystemUI.apk 1 шаг) устанавливаем JDK создаем каталог "apktools" в корне диска. (для своего удобства я создал путь C:\android\ApkTools) и распаковываем туда содержимое архива apktools
скриншот:
теперь нам нужно установить framework для своей прошивки(эта операция делается один раз для каждой новой прошивки) перетаскиваем framework-res.apk от своей прошивки на apktool-if.cmd дожидаемся завершения операции.
скриншот:
для устройств HTC и прошивки с SENSE тоже самое нужно проделать с файлом com.htc.resources.apk, SAMSUNG - twframework-res.apk, Motorola - blur-res.apk и moto-res.apk, LG - lge-res.apk, Sony Ericsson - SemcGenericUxpRes.apk Проще говоря - нужно установить таким способом все apk-файлы в каталоге system/framework/
теперь мы можем разбирать системные приложения.
2 шаг) [разборка:] берем SystemUI.apk и перетаскиваем на apktool-d.cmd дожидаемся окончания операции.
скриншот:
получаем каталог с распакованным содержимым SystemUI.apk изменяем, что хотим.
3 шаг) [запаковка:] перетаскиваем каталог SystemUI на apktool-b.cmd дожидаемся завершения операции.
скриншот:
теперь открываем WINRAR'ом (или любым другим архиватором) исходный SystemUI.apk и каталог SystemUI\build\apk\
скриншот:
и перемещаясь по каталогу, закидываем измененные файлы в исходный SystemUI.apk, по аналогичным путям, заменяя файлы. степень сжатия: без сжатия.
Если редактировали *.xml в папках values, добавляли/удаляли изображения - resources.arsc менять обязательно! (в нём находятся все папки values и файл public.xml, в котором присваивается ID всем ресурсам, кстати папка smali, находится в файле classes.dex)
#3 [10.11.12, 06:18] Re: редактирование системных apk при помощи ApkTools
Gas, если с телефона заменять то нужен файл менеджер с поддержкой root и возможностью назначать права(root explorer, ES) Копируем apk в телефон на карту. Копируем apk с карты в папку /system Выставляем для apk права 0644 Перемещаем apk в папку /system/app или /system/framework Перемещать из /system нужно потому, что apk может использоваться в данный момент и система не даст заменить его при копировании.
#4 [10.11.12, 21:50] Re: редактирование системных apk при помощи ApkTools
SEVENI, немного не в тему, но. что нужно поменять в апк, чтоб можно было установить два одинаковых или скажем две разные версии? нужно поставить второй менеджер смс. первый стоит с кастомной прошивки, хочу со стока поставить менеджер. тупо установить или заменить старндартный не прокатывает. ничего не работает в итоге.
samsung galaxy S3 4.2.2 W580\K750i\k550
если собрали учет занятого места в прошивке - обращайтесь
но некоторые приложения могут ругаться при сборке, ссылаясь в начальную, в логе можно будет посмотреть какие файлы в какой строке и заменить их самостоятельно.
+ если хочешь заменить имя в меню, то Autostarts_v1.7.5\res\values\strings.xml
<string name="app_name">Autostarts</string>
ну и соответственно Autostarts_v1.7.5\res\values-ru\strings.xml Если таковой имеется.
отсюда видим что за выключение у нас отвечает GlobalActions$5, за рестарт GlobalActions$6
теперь, если есть пункт "Рестарт", то: делаем копию файла android.policy/smali/com/android/internal/policy/impl/GlobalActions$6.smali открываем его, ищем reboot
Меняем const-string v1, "GlobalActions restart" на const-string v1, "recovery"
поиском по документу переименовываем все GlobalActions$6 на GlobalActions$16 (почему 16 - на единицу больше от последнего аналогичного по названию файла в android.policy/smali/com/android/internal/policy/impl/)
сохраняем и называем как GlobalActions$16
делаем еще одну копию этого файла, открываем и по аналогии:
теперь перед этой строкой добавляем: const-string v2, "now" чуть выше меняем .locals 2 на .locals 3 поиском по документу переименовываем все GlobalActions$5 на GlobalActions$16 сохраняем и называем как GlobalActions$16
далее делаем 2 копии GlobalActions$16 в первой меняем const-string v2, "now" на const-string v2, "recovery" поиском по документу переименовываем все GlobalActions$16 на GlobalActions$17 сохраняем и называем как GlobalActions$17 во второй меняем const-string v2, "now" на const-string v2, "download" поиском по документу переименовываем все GlobalActions$16 на GlobalActions$18 сохраняем и называем как GlobalActions$18
Снова открываем android.policy/smali/com/android/internal/policy/impl/GlobalActions.smali ищем new-array
Регистрация: 9.2.08 Сообщений: 1748 Репутация: 10884 Откуда: Украина, г. Киев
#8 [27.12.12, 01:01] Re: редактирование системных apk при помощи ApkTools
SEVENI, а как быть, если после сборки отредактированных ресурсов файлы *.xml не шифруются, как это сделано в оригинале? Получается что файл в апк попадает в своем читабельном виде
#9 [20.03.13, 08:16] Re: редактирование системных apk при помощи ApkTools
SEVENI, кстати, на стоковом ядре на смартах Sony/SonyEricsson Xperia перезагрузка в рекавери возможна, только при наличии файла boot по пути cache/recovery, который после перезагрузки пропадает! И то, один фиг в рекавери не попадает, пытается в него войти, но не получается, тупо зависает! Легко проверить - создать этот файл и в терминале набрать: su reboot
move-object/from16 v0, v10 # Объект временно перемещаем
iput-boolean v8, v0, Lcom/android/phone/CallNotifier;->mLastVibratedCall:Z # записываем в него новое значение 0
:cond_zz
На что стоит обратить внимание, для работоспособности: имена регистров у вас наверняка другие будут (v7, v8, v0) Как определить нужные регистры? смотрим выше и ниже код, ищем подобие: const/4 v7, 0x2 ага, видим что v7 периодически по коду использется для внесения в неё разных констант, запоминаем номер регистра. еще шарим по коду не выходя за рамки метода "onPhoneStateChanged": const/4 v8, 0x2 ага, и v8 тоже периодически используется как свободный регистр. Ну а третий регистр, придется подбирать (у меня v0). v0 еще и потому, что ниже она юзается тоже как почти свободная:
.line 1174 .end local v0 #IN_CALL_NOTIFICATION_UPDATE_DELAY:I .end local v2 #callState:Lcom/android/internal/telephony/Call$State; .end local v4 #pm:Landroid/os/PowerManager;
Отдельно по поводу регистра v10 - номер регистра тоже свой поставить, прямо после кода где вставляем, видно: Код:
.line 1126 const-string v7, "onPhoneStateChanged: foregroundCall not Dialing, set Audio mode"
invoke-direct {v10, v7} - вот он наш нужный, у меня v10
Как ставить: Т.к. Phone всегда загружен, то перезагружаем тело перед операциями: 1. подменяем файл в /system/app/ 2. права на файл выставляем 3. хвост удаляем: /system/app/Phone.odex 4. перезагружаемся ну либо подменяем через ADB
Учтите, что если выставили неверные регистры, то Phone будет постоянно выдавать ошибку и будет очень проблематично что-либо сделать на телефоне, т.к. окно ошибки будет всегда выскакивать, нужно заранее подготовить отходной путь, например чтобы стояла программа для соединения по WiFi через ADB, чтобы можно было вернуть исходный.
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.