Shizuku:Android 高级权限调用工具
让普通 App 通过 ADB 或 root 权限直接调用系统 API 的 Android 工具与授权框架。
- 浏览
- 4
- 访问
- 0
- 下载
- 0
- 版本
- v13.6.0
- 平台
- Android
详细介绍
项目简介
Shizuku 是一个 Android 应用与配套服务,让普通 App 在无需 root 的情况下,借助 ADB 或 root 启动的服务进程,以更高权限直接调用系统 API。
传统做法是在 su shell 里执行命令(例如用 pm enable/disable 启停组件),缺点很明显:进程反复创建导致极慢、需要解析文本输出极不可靠、能力受限于可用的命令,而且即使 ADB 权限已经足够,App 仍需要 root 才能执行。
Shizuku 换了一种思路:先由用户通过 root 或 ADB 启动 Shizuku server 进程,App 启动时同样会收到指向 Shizuku server 的 binder。Shizuku 充当中间人——接收 App 的请求,转发给 system server,再把结果回传。对 App 来说,这几乎等同于直接使用系统 API,但权限更高。
主要功能
- 以 root 或 ADB 身份运行 Shizuku server,向 App 提供 Binder 转发能力(核心方法见
rikka.shizuku.server.ShizukuService#transactRemote与moe.shizuku.api.ShizukuBinderWrapper) - 让 App 使用系统 API 时获得比自身更高的权限,无需 root,并且避免 shell 命令方式的速度与可靠性问题
- 通过
SystemServiceHelper.getTransactionCode等方式定位系统服务事务码,配合ShizukuBinderWrapper完成跨进程调用 - 提供 API 与示例工程,供开发者接入(见 Shizuku-API 仓库)
安装与使用
用户使用指南与下载地址:https://shizuku.rikka.app/
开发者接入所需的 API 与示例:https://github.com/RikkaApps/Shizuku-API
从 v11 之前的版本迁移可参考 API 仓库中的迁移指南,已有应用仍然可以正常工作。
自行编译 Shizuku 本体:
git clone --recurse-submodules
然后运行 gradle 任务 :manager:assembleDebug 或 :manager:assembleRelease。其中 :manager:assembleDebug 会生成可调试的 server,可以把调试器附加到 shizuku_server 上调试服务端;在 Android Studio 中需要勾选 “Run/Debug configurations” → “Always install with package manager”,以确保服务端使用最新代码。
注意事项
- ADB 权限有限:ADB 的权限在不同系统版本上各不相同。调用 API 前可用
ShizukuService#getUid判断 Shizuku 是否以 ADB 用户身份运行,或用ShizukuService#checkPermission检查服务端权限是否足够。 - Android 9 起的隐藏 API 限制:普通应用使用隐藏 API 受限,需要另寻办法(例如 AndroidHiddenApiBypass)。
- Android 8.0 与 ADB:服务端通过
IActivityManager#registerProcessObserver与IActivityManager#registerUidObserver(26+)组合来感知应用进程启动;但在 API 26 上 ADB 没有权限使用registerUidObserver,如果需要在并非由 Activity 启动的进程中使用 Shizuku,建议通过启动一个透明 Activity 来触发 binder 发送。 - 直接使用
transactRemote需谨慎:不同 Android 版本 API 可能不同,android.app.IActivityManager在 API 26 及以后为 aidl 形式,android.app.IActivityManager$Stub只在 API 26 存在;SystemServiceHelper.getTransactionCode也可能取不到正确的事务码(如 API 25 上TRANSACTION_getInstalledPackages不存在,只有TRANSACTION_getInstalledPackages_47),使用ShizukuBinderWrapper方式则不会遇到该问题。 - 许可证:代码以 Apache 2.0 授权。根据第 6 条,禁止在非展示 Shizuku 本身的场景使用
manager/src/main/res/mipmap*/ic_launcher*.png图片;禁止把Shizuku作为应用名、使用moe.shizuku.privileged.api作为 application id,或声明moe.shizuku.manager.permission.*权限。
本作品整理自 GitHub 开源项目 RikkaApps/Shizuku,原作者 @RikkaApps,许可证 Apache-2.0。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- v13.6.0当前版本
支持 Android 16 QPR1;更新启动命令,可将文件复制到任意可执行位置(如 /data/local/tmp/shizuku);Android 13+ 连接可信 WLAN 时支持免 root 自启动。
评论