Как вшить/добавить в установщик прошивки Xposed

Рейтинг:   / 0
ПлохоОтлично 

Многие ромоделы наверное знают, что вшить xposed в прошивку во время установки не так уж то просто, как это делается с Gapps, SuperSu и т.д.. Возможно есть и "правильные" методы в сети, но в гугле я не нашел :(. Итак, как же вшить xposed в прошивку во время установки прошивки?

Сразу оговорюсь, что я только начинающий в bash-скриптах. Свой опыт проводил на Xiaomi Redmi 3s Miui v8, arm64, android 6.0.1. И у меня получилось все же костылем вшить установку xposed.
Итак, начнем.
Скажем, у вас уже готовая прошивка и не хватает строки в update-script и файлы для добавления xposed в прошивку.
В update-script добавляем такие строки:
Для старых update-binary, который не понимает команды типа set_metadata

run_program("/sbin/busybox", "mount", "/system");
package_extract_dir("xposed/system", "/system");
package_extract_file("xposed/1.sh", "/tmp/1.sh");
set_perm(0, 0, 0777, "/tmp/1.sh");
run_program("/sbin/busybox", "sh", "/tmp/1.sh");

Для новых update-binary, который наоборот не понимает старые команды типа set_perm

run_program("/sbin/busybox", "mount", "/system");
package_extract_dir("xposed/system", "/system");
package_extract_file("xposed/1.sh", "/tmp/1.sh");
set_metadata("/tmp/1.sh", "uid", 0, "gid", 0, "mode", 0777);
run_program("/sbin/busybox", "sh", "/tmp/1.sh");

Как уже поняли, файлы xposed должны лежать в папке xposed/system. Перечень папок из сборки xposed-v87-sdk23-arm64-MIUI-edition-by-SolarWarez-20161126 выглядит так:
-system
--system/bin
---system/app_process32_xposed
---system/app_process64_xposed
---system/dex2oat
---system/oatdump
---system/patchoat
--system/framework
---system/framework/XposedBridge.jar
--system/lib
---system/lib/libart.so
---system/lib/libart-compiler.so
---system/lib/libsigchain.so
---system/lib/libxposed_art.so
--system/lib64
---system/lib64/libart.so
---system/lib64/libart-disassembler.so
---system/lib64/libsigchain.so
---system/lib64/libxposed_art.so
--system/xposed
Выше перечисленые файлы закидываем в прошивку по пути xposed/system.
Файлы уже в прошивке есть и если запустить прошивку, то приложение xposed installer сообщит типа, что xposed установлен, но не активирован. Это происходит из-за того, что для файлов не правильно выставлены права и симлинки.
Теперь постараемся исправить это.
Как вы поняли, мы добавили в update-script запуск скрипта 1.sh. Теперь разберем что будет там прописано.
Создаем файл в notepad++ 1.sh. Изменяем формат на Unix (Правка - Формат конца строк - unix) и изменяем кодировку на UTF-8 без ВОМ. Теперь прописываем следующие строки (комментарии можно и удалить):

#!/sbin/sh

mv -f /system/bin/app_process /system/bin/app_process_orig ### бекапим, можно в принципе и удалить :)
mv -f /system/bin/app_process32 /system/bin/app_process32_orig ### бекапим, можно в принципе и удалить :)
mv -f /system/bin/app_process64 /system/bin/app_process64_orig ### бекапим, можно в принципе и удалить :)
chmod 755 /system/bin/app_process32_xposed ### изменяем права файлу
chown 0.2000 /system/bin/app_process32_xposed ### изменяем пользователя файла
chcon -h 'u:object_r:zygote_exec:s0' /system/bin/app_process32_xposed ### изменяет контекст SELinux файла. Если задумываетесь откуда берется значение, то из boot, а именно из файла file_contexts
ln -s /system/bin/app_process32_xposed /system/bin/app_process32 ### создаем симлинк
chmod 755 /system/bin/app_process64_xposed ### дальше думаю уже не стоит комментировать
chown 0.2000 /system/bin/app_process64_xposed
chcon -h 'u:object_r:zygote_exec:s0' /system/bin/app_process64_xposed
ln -s /system/bin/app_process64_xposed /system/bin/app_process64
ln -s /system/bin/app_process64 /system/bin/app_process
chmod 755 /system/bin/dex2oat
chown 0.2000 /system/bin/dex2oat
chcon -h 'u:object_r:dex2oat_exec:s0' /system/bin/dex2oat
chmod 755 /system/bin/oatdump
chown 0.2000 /system/bin/oatdump
chmod 755 /system/bin/patchoat
chown 0.2000 /system/bin/patchoat
chcon -h 'u:object_r:dex2oat_exec:s0' /system/bin/patchoat
chmod 644 /system/framework/XposedBridge.jar
chown 0.0 /system/framework/XposedBridge.jar
chmod 644 /system/lib/libart.so ### начиная отсюда можно вместо всего chmod для /system/lib, заменить на одну всего лишь строку chmod -R /system/lib
chown 0.0 /system/lib/libart.so ### начиная отсюда можно вместо всего chown для /system/lib, заменить на одну всего лишь строку chown -R /system/lib
chmod 644 /system/lib/libart-compiler.so
chown 0.0 /system/lib/libart-compiler.so
chmod 644 /system/lib/libsigchain.so
chown 0.0 /system/lib/libsigchain.so
chmod 644 /system/lib/libxposed_art.so
chown 0.0 /system/lib/libxposed_art.so
chmod 644 /system/lib64/libart.so ### Тут также, начиная отсюда можно вместо всего chmod для /system/lib64, заменить на одну всего лишь строку chmod -R /system/lib64
chown 0.0 /system/lib64/libart.so ### начиная отсюда можно вместо всего chown для /system/lib64, заменить на одну всего лишь строку chown -R /system/lib64
chmod 644 /system/lib64/libart-disassembler.so
chown 0.0 /system/lib64/libart-disassembler.so
chmod 644 /system/lib64/libsigchain.so
chown 0.0 /system/lib64/libsigchain.so
chmod 644 /system/lib64/libxposed_art.so
chown 0.0 /system/lib64/libxposed_art.so

Сохраняем и закидываем файл 1.sh по пути xposed/1.sh.
На этом все...По аналогии можете собрать и для других версии (архитектуры и т.д.) xposed.

Есть еще другой метод. Но он имеет 1 минус. Скажем вы находитесь в рекавери и устанавливаете прошивку со вшитым следующим методом xposed-ом, то необходимо обязательно перезагрузиться снова в рекавери, чтобы xposed установился. Меня этот метод не устроил, т.к. мой TWRP не умел перезагружаться в рекавери :(
Итак, создаем файл в notepad++ openrecoveryscript. Изменяем формат на Unix (Правка - Формат конца строк - unix) и изменяем кодировку на UTF-8 без ВОМ. Теперь прописываем следующие строки:

install cache/recovery/xposed.zip

Сохраняем и закидываем к примеру в корень прошивки. Теперь добавляем строки в update-script (в конец):

run_program("/sbin/mkdir", "/cache/recovery");
package_extract_file("xposed.zip", "/cache/recovery/xposed.zip");
package_extract_file("openrecoveryscript", "/cache/recovery/openrecoveryscript");
sleep ("5");
run_program("/sbin/reboot", "recovery");

Как поняли, установщик xposed закидываем в корень с названием xposed.zip и все. Данным методом можно вшивать в прошивку практический все другие патчи.
Удачных прошивок!

При копировании материала с сайта, активная ссылка на оригинальный материал обязательна.

Добавить комментарий


Защитный код
Обновить