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

Многие ромоделы наверное знают, что вшить 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 и все. Данным методом можно вшивать в прошивку практический все другие патчи.
    Удачных прошивок!

    Комментарии