AutoJs6 中文文档 下载 App

Shizuku 特权 — 无需 Root 的系统级权限扩展

Shizuku 是什么

Shizuku 是一个开源 Android 权限管理工具(moe.shizuku.privileged.api),由 Rikka 开发。它的核心价值:通过 ADB 连接让普通应用获得系统级 API 的调用权限,无需 Root。

普通应用 ←── ADB 授权 ──→ Shizuku Manager ←── ADB shell
                                ↓
                         系统级 API 调用
                         (ActivityManager, Shell 等)

Shizuku vs Root

特性ShizukuRoot
设备要求可 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 中启用

  1. 确保 Shizuku Manager 中服务正在运行
  2. 打开 AutoJs6 → 设置 → Shizuku → 开启支持
  3. 授权 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/ 下私有目录