# 簡介
Shizuku 可以幫助普通程式藉助一個由 app_process 啟動的 Java 程序直接以 adb 或 root 特權使用系統 API。
Shizuku 這個名字來自這裡 (opens new window)。
# Shizuku 為何而生?
Shizuku 的誕生主要有兩大目的:
- 提供一個方便地使用系統 API 的方式
- 為部分只需要 adb 許可權的程式開發提供便利
# Shizuku 與「傳統」做法對比
# 「傳統」做法
以啟用/停用元件為例,一些需要 root 許可權的程式直接在 su
中執行 pm disable
。
- 執行
su
- 執行
pm disable
- (pre-Pie) 使用 app_process 啟動 Java 程序(參見此處 (opens new window))
- (Pie+) 執行原生程式
cmd
(參見此處 (opens new window)) - 處理引數,通過 binder 與 system server 互動,處理結果輸出文字結果
其中每個「執行」都意味著新程序建立,su 內部使用 socket 與 su daemon 互動,這樣的過程中消耗大量的時間和效能。(部分設計不佳的程式甚至會每次執行指令都執行一次 su
)
此類做法的缺點在於:
- 極慢
- 需要處理文字來獲取結果
- 功能受制於可用的指令
- 即使 adb 有足夠許可權,程式也需要 root 許可權才可使用
# Shizuku 做法
Shizuku app 會引導使用者使用 root 或是 adb 方式執行一個程序(Shizuku 服務程序)。
- 應用程序啟動時 Shizuku 服務程序傳送 binder 至應用程序
- 應用通過該 binder 與 Shizuku 服務程序互動,Shizuku 服務程序通過 binder 與 system server 互動
Shizuku 的優點在於:
- 極小額外時間及效能消耗
- 與直接呼叫 API 體驗幾乎一致(程式開發者只需新增少量程式碼)