应用介绍
Shizuku是一款面向Android设备的系统权限管理工具,它通过特殊方式让普通应用获得部分系统级权限(类似“半Root”),无需实际Root手机即可实现高级功能。Shizuku利用Android的ADB授权,为其他应用提供系统级API接口,使其可以执行原本需要Root权限的操作(如冻结应用、修改系统设置等)。通过ADB激活Shizuku服务后,用户无需解锁Bootloader或刷机,降低了设备安全风险。
1.确保手机已开启「开发者选项」;
2.在 Shizuku 中选择「通过无线调试启动」,然后点击「配对」按钮跳转至开发者选项中;
3.此时我们需要在开发者选项中找到「USB 调试/无线调试」功能,开启无线调试后,选择「使用配对码配对设备」;
4.此时 Shizuku 会通过弹出通知的方式提示检测到配对码,输入开发者选项提供的配对码并点击发送,即可完成配对。
此后每一次设备重启或 Shizuku 失效,我们都可以通过同样的流程重新启动 Shizuku,值得一提的是,虽然听上去比较麻烦,但无线调试配对状态是可以保存的,所以我们每次只用重新启动无线 ADB 调试即可,配对流程可以省略。
另外这里还有个快速开启无线调试的小技巧:开发者选项中的部分选项是可以放入快捷操作面板的,其中就包括了「无线调试」「关闭传感器」等,可以在开发者选项中的「快捷设置开发者图块」中勾选。
Tips:以上类似的无线调试授权,同样适用于黑阈等应用。
首先,我们需要讨论应用程序如何使用系统API。例如,如果应用程序想要获取已安装的应用程序,我们都知道我们应该使用PackageManager#getInstalledPackages()。这实际上是一个应用程序进程和系统服务器进程之间的进程间通信(IPC)过程,只是Android框架为我们处理了内部工作。
Android 使用 binder 来进行这种类型的 IPC(进程间通信)。Binder 允许服务器端了解客户端的 uid 和 pid,以便系统服务器可以检查应用程序是否有执行操作的权限。
通常,如果有一个“管理器”(例如,PackageManager),用于应用程序使用,那么系统服务器进程中应该有一个“服务”(例如,PackageManagerService)。我们可以简单地认为,如果应用程序持有“服务”的binder,它就可以与“服务”进行通信。应用程序进程将在启动时接收到系统服务的绑定器。
Shizuku引导用户以根权限或ADB首先运行一个进程,Shizuku服务器。当应用启动时,binder到Shizuku服务器的信息也会发送到应用。
Shizuku提供的最重要的功能就像是一个中介,接收来自应用的请求,将它们发送到系统服务器,并将结果返回。你可以在transactRemote方法中看到rikka.shizuku.server.ShizukuService类,以及moe.shizuku.api.ShizukuBinderWrapper类的详细信息。
所以,我们达到了我们的目标,即使用具有更高权限的系统API。对于应用程序来说,这几乎与直接使用系统API相同。
API & 样例
https://github.com/RikkaApps/Shizuku-API
从 pre-v11 迁移
现有的应用程序当然仍然可以使用。
https://github.com/RikkaApps/Shizuku-API#现有应用程序的迁移指南使用 Shizuku < v11
注意
1.ADB权限有限
ADB的权限有限,并且在不同系统版本上有所不同。你可以在这里查看授予给ADB的权限这里.
在调用API之前,你可以使用ShizukuService#getUid来检查Shizuku是否正在运行用户ADB,或者使用ShizukuService#checkPermission来检查服务器是否有足够的权限。
2.隐藏的 API 限制来自 Android 9
自Android 9起,隐藏API的使用对普通应用有限制。请使用其他方法(例如 https://github.com/LSPosed/AndroidHiddenApiBypass)。
3.安卓 8.0 & ADB
目前,Shizuku 服务获取应用进程的方式是将 IActivityManager#registerProcessObserver 和 IActivityManager#registerUidObserver (26+) 结合,以确保在应用启动时发送应用进程。然而,在 API 26 上,ABD 缺乏使用 registerUidObserver 的权限,因此如果需要在可能不是由 Activity 启动的进程 中使用 Shizuku,建议通过启动一个透明的 Activity 来触发发送 binder。
4.直接使用transactRemote需要注意
在不同的 Android 版本下,API 可能会有所不同,请仔细检查。此外,android.app.IActivityManager在 API 26 及更高版本中以 aidl 形式存在,android.app.IActivityManager$Stub仅在 API 26 中存在。
SystemServiceHelper.getTransactionCode 可能无法获取正确的交易代码,例如 android.content.pm.IPackageManager$Stub.TRANSACTION_getInstalledPackages 在API 25中不存在,并且有 android.content.pm.IPackageManager$Stub.TRANSACTION_getInstalledPackages_47 (这种情况已经处理,但不排除可能有其他情况)。使用 ShizukuBinderWrapper 方法不会遇到这个问题。
v13.5.4.r1066.48a534b版本
修复已知问题
详细信息
其他软件
网友评论