Shizuku
Shizuku

Shizuku 最新版

官方版无广告8

Shizuku 不是另一个 root 工具,而是一种架构级别的改进:它让普通应用能以接近系统应用的方式调用高权限 API,同时保持开发体验的简洁与性能的高效。 对于需要深度系统集成的工具类应用(如权限管理、组件控制、自动化等),Shizuku 提供了一条比传统 shell 命令更可靠、更现代的路径。

更新日期:
2026年1月1日
分类标签:
语言:
中文
平台:

2.5MB0 人已下载 手机查看

在开发需要系统级权限的 Android 应用时,开发者常通过 su 启动 root shell 并执行命令行指令。例如,使用 pm enable 或 pm disable 来启用/禁用组件。

这种方式存在明显缺陷:

  • 性能低下:每次调用需创建新进程,开销大;
  • 可靠性差:依赖文本解析命令输出,极易出错;
  • 功能受限:仅限于已有 shell 命令支持的操作;
  • 权限门槛高:即使 ADB 已具备足够权限,应用仍需 root。

Shizuku 提出了一种更高效、更稳定、更接近原生开发体验的替代方案。

核心思想:绕过 shell,直连系统服务

要理解 Shizuku 的优势,先回顾标准系统 API 的工作原理。

以获取已安装应用列表为例,开发者通常调用 PackageManager#getInstalledPackages()。这背后是一次 进程间通信(IPC):应用进程向系统服务(如 PackageManagerService)发起 Binder 调用,系统根据调用者的 UID 检查权限后返回结果。

关键在于:谁能持有系统服务的 Binder 引用,谁就能调用其接口

Shizuku 的做法是:

  1. 引导用户以 root 或 ADB shell (UID 2000) 身份启动一个独立的 Shizuku 服务进程
  2. 当应用启动时,Shizuku 服务会将自身的 Binder 发送给该应用;
  3. 应用通过 ShizukuBinderWrapper 将原本发往系统服务的 Binder 调用,转发给 Shizuku 服务
  4. Shizuku 服务以 root/ADB 身份执行该调用,并将结果返回给应用。

整个过程对应用透明,使用方式几乎与直接调用系统 API 一致,但权限提升至 root 或 shell 级别。

实现细节可参考:

  • 服务端:rikka.shizuku.server.ShizukuService#transactRemote
  • 客户端:rikka.shizuku.ShizukuBinderWrapper

用户指南

  • 官网与下载:https://shizuku.rikka.app/
  • 支持设备:Android 6.0+
    • 非 root 设备:通过 ADB 启动(Android 11+ 支持无线调试,无需电脑)
    • root 设备:可直接运行,或使用 Magisk 模块 Sui(更稳定)

开发者接入指南

1. 集成 Shizuku API

implementation "dev.rikka.shizuku:api:<version>"
implementation "dev.rikka.shizuku:provider:<version>"

在 AndroidManifest.xml 中声明 Provider:

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

2. 权限申请(类似运行时权限)

if (Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED) {
    // 已授权,可调用 API
} else {
    Shizuku.requestPermission(requestCode);
}

需监听授权结果:

Shizuku.addRequestPermissionResultListener(listener);

注意:Shizuku v11+ 已移除对旧版本的支持。建议检查 Shizuku.isPreV11() 并提示用户升级。

3. 调用系统 API 示例

private static final IPackageManager PACKAGE_MANAGER = IPackageManager.Stub.asInterface(
    new ShizukuBinderWrapper(SystemServiceHelper.getSystemService("package"))
);

public static void grantRuntimePermission(String pkg, String perm, int userId) {
    try {
        PACKAGE_MANAGER.grantRuntimePermission(pkg, perm, userId);
    } catch (RemoteException e) {
        throw new RuntimeException(e);
    }
}

重要注意事项

ADB 权限有限

  • ADB(UID 2000)并非 root(UID 0),其权限由系统授予的 Android 权限清单决定;
  • 例如:ADB 无法访问 /data/user/0/<package> 等应用私有目录;
  • 可通过 Shizuku.getUid() 判断当前权限级别(0 = root,2000 = ADB);
  • 使用前建议通过 Shizuku.checkPermission() 验证是否具备所需能力。

隐藏 API 限制(Android 9+)

从 Android 9 起,非 SDK 接口调用受到限制。若需调用隐藏 API,推荐配合以下方案:

Android 8.0 的 ADB 限制

在 Android 8.0(API 26)上,ADB 缺少 IActivityManager#registerUidObserver 权限,可能导致非 Activity 启动的进程无法自动收到 Shizuku Binder。

建议:在需要使用 Shizuku 的后台场景中,通过启动一个透明 Activity 触发 Binder 分发。

关于 transactRemote 的直接使用

  • 不同 Android 版本的 AIDL 接口和交易码(transaction code)可能不同;
  • 手动查找交易码(如 TRANSACTION_getInstalledPackages)易出错;
  • 强烈推荐使用 ShizukuBinderWrapper,它已处理版本兼容性问题。

开发 Shizuku 本身

构建步骤

git clone --recurse-submodules https://github.com/RikkaApps/Shizuku
cd Shizuku
./gradlew :manager:assembleDebug   # 或 assembleRelease
  • assembleDebug 会生成可调试的服务器;
  • 调试时,请在 Android Studio 中勾选 “Always install with package manager”,确保服务器加载最新代码;
  • 可附加调试器到 shizuku_server 进程。

相关软件

小旺AI截图

小旺AI截图 - 最新版

小旺AI截图是首款接入DeepSeek大模型的AI截图神器,核心优势集中在「轻巧、免费、无广告、功能全」——安装包比同类软件小80%,无需登录即可使用,所有功能终身免费,且不接入任何第三方广告,提供纯净无干扰的使用体验。

暂无评论

none
暂无评论...