Shizuku 完全指南 — 让普通 App 拥有系统级权限

Shizuku 完全指南 — 让普通 App 拥有系统级权限

Shizuku 是一个开源的 Android 系统工具,由开发者 Rikka 创建。它的核心能力是:让普通应用通过 ADB 或 Root 权限直接调用系统 API,无需应用自身拥有 Root 权限。

名字来源于《小林家的龙女仆》中的角色「托尔」(Tohru,日语读音 Shizuku)—— 强大、可靠,默默守护。

一句话总结:Shizuku = 在普通 App 和 Android 系统之间的一座权限桥,让 App 能以更高权限调用系统服务。

一、工作原理

Android 中,App 调用系统 API(如 PackageManager、ActivityManager)本质上是 Binder IPC 进程间通信。系统服务端通过 Binder 获取调用方的 UID/PID 来校验权限。

  • 普通 App:通过 Binder 调用系统 API,但受限于自身 UID 的权限范围
  • Shizuku Server:以 Root(UID 0) 或 ADB(UID 2000) 身份运行的后台 Java 进程
  • System Server:Android 系统核心服务,根据调用方 UID 判断授权

Shizuku 的工作流程:

  1. Shizuku 引导用户以 Root 或 ADB 启动一个 Shizuku Server 进程
  2. App 启动时,Shizuku Server 将 Binder 发送给 App 进程
  3. App 通过这个 Binder 与 Shizuku Server 通信,Server 代理转发请求到 System Server
  4. 由于 Server 进程拥有更高的 UID 权限,System Server 接受操作

二、Shizuku vs 传统方案

传统方案(su 命令模式)

传统 Root 类 App 通过执行 su 命令来调用系统指令,每次操作都创建多个进程:

su                         # 1. 执行 su(进程创建)
pm disable com.example     # 2. 执行 pm 命令(进程创建)
                           # 3. 解析文本输出(不可靠)
                           # 4. 获取结果

传统方案的缺点:

  • 速度极慢 — 每次操作都创建新进程
  • 可靠性差 — 需解析文本输出,极易出错
  • 功能受限 — 只能使用现有命令
  • 必须 Root — 非 Root 设备无法使用

Shizuku 方案

Shizuku 一次启动后,App 通过 Binder IPC 直接调用系统 API,速度极快且类型安全:

// Shizuku 方案:一次启动,直接 API 调用
Shizuku.bindUserService(userServiceArgs, connection);
PackageManager pm = ...;
pm.getInstalledPackages(0);

三、三种启动方式

方式一:Root 启动 🦊

最简单的方式,适合已 Root 的设备(Magisk / KernelSU / APatch)。

  1. 安装 Shizuku(Google Play 或 GitHub Release)
  2. 打开 Shizuku App,点击「启动」按钮
  3. Root 管理工具弹出授权请求,允许即可
  4. 界面显示「Running」,可在设置中开启「开机启动」

方式二:无线调试 📶(Android 11+)

无需电脑,完全在手机上操作。

Step 1:开启开发者选项和无线调试

  1. 设置 → 关于手机 → 连续点击「版本号」7 次,直到提示进入开发者模式
  2. 返回设置 → 系统 → 开发者选项,开启「USB 调试」
  3. 找到并开启「无线调试」

开启开发者选项进入无线调试开启无线调试

Step 2:配对(仅需一次)

  1. 在 Shizuku App 中点击「配对」按钮
  2. 下拉通知栏,系统会显示无线调试配对通知
  3. 在「无线调试」中点击「使用配对码配对设备」
  4. 将显示的 6 位配对码输入到 Shizuku 通知栏中

开始配对点击配对设备

输入配对码启动成功

Step 3:启动

  1. 配对成功后,返回 Shizuku 主界面
  2. 点击「启动」按钮,等待状态变为「Running」

注意:无线调试启动方式在每次重启手机后需要重新执行启动步骤(配对只需要一次)。

方式三:电脑 ADB 💻(Android 10 及以下)

适合无 Root、系统版本低于 Android 11 的设备。

安装 ADB

  1. 下载 SDK Platform Tools 并解压
# Windows
https://dl.google.com/android/repository/platform-tools-latest-windows.zip

# Linux
https://dl.google.com/android/repository/platform-tools-latest-linux.zip

# Mac
https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
  1. 在解压目录打开终端,验证安装:
adb version
# 能看到版本信息即安装成功

开启 USB 调试并连接

  1. 手机开启「开发者选项」→「USB 调试」
  2. USB 连接电脑,手机上确认「允许 USB 调试」
  3. 终端输入 adb devices 验证连接

启动 Shizuku

复制以下命令到终端(Shizuku v11.2.0+):

adb shell sh /data/user_de/0/moe.shizuku.manager/start.sh

提示:如果使用 PowerShell,adb 需要替换为 ./adb。启动成功后手机界面会显示「Running」。

注意:电脑 ADB 模式同样每次重启后需重新执行命令。

四、常见问题排查

无线调试一直显示「正在搜索配对服务」

App 在后台被限制了网络访问权限。搜索你的机型如何「允许后台运行」并设为「无限制」。

输入配对码后立即失败

MIUI/澎湃用户:将通知样式切换为「Android 原生」。路径:设置 → 通知 → 通知显示设置 → 样式改为「Android」。

ADB 权限不足

  • 小米/Redmi:开启「USB 调试(安全设置)」— 这是单独的选项
  • OPPO/OnePlus:关闭「权限监控」(开发者选项内)
  • 魅族:关闭「Flyme 支付保护」
  • 华为/EMUI:开启「仅充电模式下允许 ADB 调试」

Shizuku 无故停止运行

  • 确保 Shizuku 已被加入后台白名单/自启动列表
  • 开启「禁用 ADB 授权超时」(Android 11+)
  • 将 USB 使用模式改为「仅充电」
  • 索尼设备注意:连接 USB 后弹出的对话框不要点击

GrapheneOS 用户

系统设置 → 「安全」→ 「Secure app spawning」可能需要关闭。

五、使用 Shizuku 的知名应用

Shizuku 被广泛应用于各类需要系统权限的工具 App 中:雹(Ice Box)、剪切板工具、冰箱/小黑屋、存储重定向、88mm 水印相机、应用伪装、WiFi 密码查看、场景工具(Tasker)等。

这些应用利用 Shizuku 实现:冻结/卸载系统应用、管理应用权限、修改系统设置、查看 WiFi 密码、存储重定向等功能,而无需 App 自身获取 Root 权限。

六、开发者接入指南

添加依赖

def shizuku_version = '13.1.5'
implementation "dev.rikka.shizuku:api:"
implementation "dev.rikka.shizuku:provider:"

注册 Provider

<provider
    android:name="rikka.shizuku.ShizukuProvider"
    android:authorities="${applicationId}.shizuku"
    android:multiprocess="false"
    android:enabled="true"
    android:exported="true"
    android:permission="android.permission.INTERACT_ACROSS_USERS_FULL" />

获取 Binder

import rikka.shizuku.Shizuku;

// 监听 Binder 接收
Shizuku.addBinderReceivedListener(() -> {
    // Binder 已就绪
});

// 监听 Binder 断开
Shizuku.addBinderDeadListener(() -> {
    // Binder 丢失
});

请求权限

private boolean checkPermission(int requestCode) {
    if (Shizuku.isPreV11()) {
        return false;
    }
    if (Shizuku.checkSelfPermission() == PERMISSION_GRANTED) {
        return true;
    } else if (Shizuku.shouldShowRequestPermissionRationale()) {
        return false;
    } else {
        Shizuku.requestPermission(requestCode);
        return false;
    }
}

UserService

UserService 类似 Android 的 Bound Service,但运行在 Root 或 Shell 身份下的独立进程中,可以执行 Java 代码甚至通过 JNI 调用 Native 代码。

// 定义服务
public class MyService extends IMyInterface.Stub {
    @Override
    public void doSomething() {
        // 这里的代码以 Root/Shell 身份运行
    }
}

// 绑定服务
Shizuku.bindUserService(
    new Shizuku.UserServiceArgs(
        new ComponentName(context, MyService.class)
    ).daemon(true),
    new ServiceConnection() { ... }
);

判断 Root 或 ADB

int uid = Shizuku.getUid();
if (uid == 0) {
    // Root 身份
} else if (uid == 2000) {
    // ADB Shell 身份(权限有限)
}

七、下载与资源

  • GitHub 仓库:RikkaApps/Shizuku — 27K+ Stars · Apache 2.0
  • Google Play:搜索「Shizuku」即可安装
  • 官方文档:shizuku.rikka.app — 完整用户手册
  • Sui:如果已 Root,也可考虑 Sui(Magisk 模块版,安装即用无需额外启动)

本文基于 Shizuku 开源项目编写 · Apache 2.0 License

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
} });