本文同步自wing的地方酒館
從Windows 98時代起,我就熱衷於裝系統。平均三天對著家裡的桌上型電腦重灌,重灌,再重灌。樂此不疲,後來到XP時代,有了GHOST,裝的更瘋狂了。現在到Android,仍然是刷刷刷,一直有個想法就是自己搞個ROM玩,於是這幾天鼓搗了一下把su和xposed內嵌進去了。感謝大佬圖樂的指點和討論。
這裡選擇的是ota包,因為ota包可以修改updater-script來實現在recovery裡面進行一些操作。
官方ROM下載地址為:developers.google.com/android/ota
將他解壓,可以看到一些boot.img映象之類的,這裡我們關心META-INF資料夾,
![Android定製ROM,內嵌su和xposed](https://i.iter01.com/images/f110a68ab0d3bfbb50fe33f400dbfa23e947de95f2f47ff7ba394696c39aaf27.png)
精簡&預裝系統APP
這裡我們想要實現精簡系統APP,其實只需要將system掛載,並且刪除/system/app下資料夾即可。並且想要增加系統APP,只需要建立對應檔案即可。 在scripet結尾新增以下程式碼
ui_print("mounting system");
mount("ext4", "EMMC", "/dev/block/platform/msm_sdcc.1/by-name/system", "/system");
ui_print("remove apps");
run_program("/sbin/busybox", "rm", "-rf", "/system/app/YouTube");
複製程式碼
以上程式碼展示的是刪除預裝app的過程,那麼預裝呢?
![Android定製ROM,內嵌su和xposed](https://i.iter01.com/images/cc68d0e4879908c2dff5733e415b51831724373b92f9a013f0a423d11a11243b.png)
我們在zip包目錄建立一個同樣的system資料夾,裡面放app資料夾,在用指令碼把system提取到/system即可:
ui_print("set system apps");
package_extract_dir("system","/system");
複製程式碼
嵌入su
解壓su.zip發現幾乎和刷機包的原理一樣,並且刷入su的過程其實是用指令碼解壓boot.img 修改檔案值 再重新合併boot.img 在進行刷入。 所以我們只要在指令碼里執行刷入su.zip的操作即可執行:
ui_print("====================>now start root");
package_extract_dir("ext/su", "/tmp/supersu");
run_program("/sbin/busybox", "unzip", "/tmp/supersu/su.zip", "META-INF/com/google/android/*", "-d", "/tmp/supersu");
run_program("/sbin/busybox", "sh", "/tmp/supersu/META-INF/com/google/android/update-binary", "dummy", "1", "/tmp/supersu/su.zip");
複製程式碼
當然,這個時候zip目錄要有對應的zip包。
嵌入xposed
這個是我卡了很久的地方,因為並不知道run_program的pwd,所以後來使用絕對路徑並且用另一個指令碼繞了一下:
run_program("/sbin/busybox", "chmod","777","/system/flash-script.sh");
run_program("/sbin/busybox", "chmod","777","/system/install_xposed.sh");
ui_print("run install_xposed.sh");
run_program("/system/install_xposed.sh");
複製程式碼
其實xposed的刷入,就是把system的一些檔案通過flash-script.sh進行替換連結等操作,所以我們只需把xposed包的system資料夾換一下位置,然後執行flash-script.sh即可:
![Android定製ROM,內嵌su和xposed](https://i.iter01.com/images/ebae944ffed680646efac688905424c11c9b6da4c7fbc23aa0aeeceda53fad3c.png)
install_xopsed.sh:
#!/sbin/sh
cd /system/ && /system/flash-script.sh
複製程式碼
這裡需要注意的是上面的註釋,這個坑了我好幾個小時,因為缺失註釋導致無法使用run_program()方法執行。
修改完畢以後,將zip包打包即可
zip -r rom.zip ./
複製程式碼
這裡值得注意的一點是 必須在目錄內部打包,在外部會多一層目錄,導致無法找到updater-script,這裡也坑了我一個多小時。。