Shizuku 特权 — 无需 Root 的系统级权限扩展
Shizuku 是什么
Shizuku 是一个开源 Android 权限管理工具(moe.shizuku.privileged.api),由 Rikka 开发。它的核心价值:通过 ADB 连接让普通应用获得系统级 API 的调用权限,无需 Root。
普通应用 ←── ADB 授权 ──→ Shizuku Manager ←── ADB shell
↓
系统级 API 调用
(ActivityManager, Shell 等)
Shizuku vs Root
| 特性 | Shizuku | Root |
|---|---|---|
| 设备要求 | 可 ADB 连接 | 需要解锁 + 刷入 su |
| 安全性 | ADB 级权限(可控) | 完全 root(最高) |
| 授权持久性 | 重启后需重新授权(或用持久化方案) | 永久 |
| 系统 API | 部分可用 | 全部可用 |
| 兼容性 | 绝大多数设备 | 部分新设备难 root |
| 门槛 | 低(ADB 就能用) | 高(解锁 Bootloader) |
安装与授权流程
第一步:安装 Shizuku Manager
从 GitHub Releases 下载最新版 APK:
https://github.com/RikkaApps/Shizuku/releases
安装到手机,打开应用。
第二步:ADB 授权
这是最关键的一步,需要一台电脑:
方式一:USB 连接(推荐)
# 1. 手机开启开发者选项 + USB 调试
# 2. USB 连接电脑
# 3. 电脑命令行执行:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
# 4. 手机上打开 Shizuku Manager → 确认服务已运行
方式二:无线调试(Android 11+)
# Android 11 及以上支持无线 ADB
# 1. 手机开启开发者选项 + 无线调试
# 2. 电脑配对设备:
adb pair <手机IP>:<配对端口>
# 3. 连接:
adb connect <手机IP>:<调试端口>
# 4. 执行授权:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
第三步:在 AutoJs6 中启用
- 确保 Shizuku Manager 中服务正在运行
- 打开 AutoJs6 → 设置 → Shizuku → 开启支持
- 授权 AutoJs6 使用 Shizuku
第四步:验证
// 脚本中检查 Shizuku 状态
console.log("Shizuku 服务: " + (shizuku.state ? "已授权" : "未授权"));
// v6.7 新增
console.log("当前状态: " + shizuku.state);
// true = 已授权可用
// false = 未授权或 Shizuku 未运行
Shizuku 解锁的功能
app 模块扩展
// 强制停止应用
app.kill("com.example.app");
// 启动应用双开(v6.6 新增)
app.launchDual("com.example.app");
app.startDualActivity("com.example.app", ".MainActivity");
// 检测双开应用是否已安装(v6.7 新增)
let hasDual = app.isDualInstalled("com.example.app");
// 控制应用启动器图标(v6.7 新增)
app.setLauncherIcon(...);
device 模块扩展
// 跨应用获取共享设备 ID(v6.7 新增)
let deviceId = device.getSharedDeviceId();
// 设置指针位置(开发者选项)(v6.7 新增)
device.setPointerLocation(true); // 开启指针位置
device.setPointerLocation(false); // 关闭
// 获取 / 设置其他系统设置项
device.toggleSystemSetting(...);
Shell 执行
// 通过 Shizuku 执行更高权限的 Shell 命令
// 比普通 Shell 权限更高,但低于 Root
shell("dumpsys activity activities", true); // 需要更高权限
// 部分需要系统权限的命令
shell("pm list packages -d", true); // 列出禁用的应用
其他高级功能
// 屏幕捕获(可能更稳定)
let screen = images.captureScreen({ useShizuku: true });
// 模拟按键 / 手势(某些场景比无障碍更精确)
// 具体 API 以 AutoJs6 文档为准
Shizuku 状态检查脚本
/**
* 启动时检查 Shizuku 状态,未就绪则提示用户
*/
function checkShizuku() {
if (shizuku.state) {
console.log("✓ Shizuku 已就绪");
return true;
}
// 尝试开启
try {
auto.startShizuku();
sleep(1000);
} catch (e) {
console.warn("启动 Shizuku 失败: " + e.message);
}
if (shizuku.state) {
console.log("✓ Shizuku 已就绪(自动启动)");
return true;
}
console.error("✗ Shizuku 未就绪");
dialogs.alert(
"Shizuku 未授权",
"请在电脑上执行 ADB 命令授权 Shizuku:\nadb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh",
"好的"
);
return false;
}
if (!checkShizuku()) {
exit(); // 退出脚本
}
// Shizuku 已就绪,执行需要特权的操作
app.kill("com.example.buggyapp");
ADB 授权脚本(电脑端)
为了方便,可以把授权命令做成电脑端的脚本:
Windows (.bat):
@echo off
echo 正在授权 Shizuku...
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
if %errorlevel% == 0 (
echo ✓ 授权成功
) else (
echo ✗ 授权失败,请检查 ADB 连接
)
pause
macOS / Linux (.sh):
#!/bin/bash
echo "正在授权 Shizuku..."
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh
if [ $? -eq 0 ]; then
echo "✓ 授权成功"
else
echo "✗ 授权失败"
fi
常见问题
重启手机后 Shizuku 失效
Shizuku 在手机重启后需要重新授权。解决方案:
方案一:自动启动 Shizuku部分手机通过 Magisk 模块或 Shizuku Manager 配置可以开机自启。
方案二:用 ADB 命令行一键授权把上面的授权脚本保存到电脑,每次重启后 USB 连接执行一次即可。
方案三:无线调试持久化(Android 11+)如果手机和电脑在同一网络,可以配置无线调试 + 自动连接,重启后几乎无感。
AutoJs6 报 "Shizuku 未授权"
// 手动触发授权弹窗
auto.startShizuku();
// 检查 Shizuku Manager 是否在运行
// 检查 ADB 命令是否正确执行
Shizuku 能做什么,不能做什么
| 可以 | 不可以 |
|---|---|
| 强制停止应用 | 静默安装 APK |
| 执行高权限 Shell | 修改系统分区 |
| 启动双开应用 | 查看其他应用私有数据 |
| 调用部分隐藏 API | 访问 /data/data/ 下私有目录 |