昨天說,我們需要一個住在手機裡、用 shell 身分做事的服務
Shizuku 就是那位同事
而且它真的有上班,不是群組裡只會回貼圖的那種
用電腦啟動 Shizuku 時,指令大概長這樣:
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
那個 script 會透過 app_process 啟動 Shizuku 的服務
重點是:指令從 adb shell 執行,所以服務繼承了 shell 身分,也就是前幾天一直提的 uid 2000
啟動後就能拔線。服務還會繼續跑
但重開機後要重新啟動,因為它也沒強到能自己起死回生
靠 Binder,Android 用來讓不同程式互相講話的機制
Shizuku 大致提供兩條路:
shell 身分的行程裡這系列主要走第二條
畢竟我們想做的很多事,本來就是跑 pm、wm、settings 這些指令
沒必要為了按一個按鈕,先跟 Android 隱藏 API 打三回合
不過 App 也不能直接喊「Shizuku 幫我一下」就拿到權限。第一次使用要向 Shizuku 申請,使用者同意後才行
不然任何 App 都能借 uid 2000,手機早就變成公共廁所了
今天先搞懂原理:Shizuku 先用 shell 身分跑起來,我們的 App 再透過 Binder 找它做事
明天開始寫程式,先把專案骨架弄出來