Shizuku 免 Root 调用系统 API:从 ADB 到无线调试的完整上手指南
想让 App 直接调系统 API,传统做法是在 su shell 里跑命令,慢,而且不好用。Shizuku 换了个思路:用 ADB 或 Root 先起一个 Shizuku server 进程,App 通过它把请求转发到 system server,再拿回结果,对 App 来说跟直接调 API 几乎没区别。它解决的就是"普通 App 拿不到系统级权限"这件事。
它和 su shell 的差别
- 走 binder IPC,不靠解析命令的文本输出
- 不依赖 su,ADB 权限够就能跑
- 单次 binder 调用替代 su shell 那种多次建进程,快一个量级
- 能力受限于 ADB 实际拿到的权限,不是想要什么有什么
- 得先在设备上起一次 server 进程,之后 App 才用得上
最短路径:ADB 启动 Shizuku 快速上手
推荐先从 USB ADB 跑通,最省事。
- 手机开开发者选项,打开 USB 调试
adb devices确认设备已连上- 装好 Shizuku,打开 App
- 点首页"通过 ADB 启动",它会生成一条
adb shell /设备路径/libshizuku.so命令 - 在弹出的对话框里点复制,贴到电脑终端执行
- 回到 App,状态栏显示 server 运行中,就跑通了
adb devices
替代路径与进阶场景怎么选
已有 Root
设备已解锁的话直接选 Root 启动,server 以 uid 0 跑,权限比 ADB 全,也不占 USB 口。server 是一次性进程,手机重启后要手动再启动一次。
不想连电脑
Android 11 及以上走无线调试:开开发者选项里的"无线调试",在 App 里选配对并输入配对码,再 adb connect 设备 IP 即可,省去数据线。11 以下得先用 USB 跑一次 adb tcpip 转成无线。完整分支逻辑见 manager 源码。
容易踩的 3 个坑
- ADB 权限有限 — 权限随系统版本变化,不是全量 — 调 API 前先用
ShizukuService#checkPermission确认 server 够不够 - Android 9+ 隐藏 API 受限 — 普通 App 默认碰不了 hidden API — 换方案,比如 AndroidHiddenApiBypass
- Android 8.0 用 ADB 时 binder 可能收不到 — ADB 缺
registerUidObserver权限 — 起一个透明 Activity 触发发 binder
适配范围与已知边界
- 最低 Android 7.0(API 24),更老的版本不支持
- ADB 模式权限有限、各版本差异大;Root 模式权限更全
- Android 9 起 hidden API 使用受限,需要额外处理
机制细节和开发者注意事项见 README。
写在最后
如果你的目标是让 App 免 Root 拿到系统级调用能力,先按 ADB 路径把 server 跑起来、确认状态栏变绿,再谈具体功能。跑通之后,server 源码 里的 transactRemote 是理解整套转发机制最好的入口。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



