Shizuku 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Shizuku 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Shizuku 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache-2.0
开发语言 Kotlin Java C/C++
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发常用工具包
开源组织
地区 不详
投 递 者 haoming9245
适用人群 未知
收录时间 2023-09-21

软件简介

Shizuku 可以帮助普通应用程序通过 app_process 启动的 Java 进程直接以 adb/root 权限使用系统 API。

背景

在开发需要 root 的应用程序时,最常见的方法是在 su shell 中运行一些命令。 例如,有一个应用程序使用 pm enable/disable 命令来启用/禁用组件。

这种方法有很大的缺点:

     1.非常慢(创建多个进程)
     2.需要处理文本(超级不可靠)
     3.可能性仅限于可用命令
     4.即使ADB有足够的权限,应用程序也需要root权限才能运行

Shizuku使用了完全不同的方式,可参阅下面的详细描述。

Shizuku是如何工作的?

首先,我们需要谈谈应用程序如何使用系统API。 例如,如果应用程序想要获取已安装的应用程序,我们都知道我们应该使用PackageManager#getInstalledPackages()。 这实际上是应用程序进程和系统服务器进程的进程间通信(IPC)过程,只是Android框架为我们做了内部工作。

Android使用binder来做这种类型的IPC。 Binder允许服务器端获知客户端的uid和pid,以便系统服务器检查应用程序是否有权限执行该操作。

通常,如果有一个“管理器”(例如,PackageManager)供应用程序使用,那么系统服务器进程中应该有一个“服务”(例如,PackageManagerService)。 我们可以简单地认为,如果应用程序持有“服务”的Binder,它就可以与“服务”进行通信。 应用程序进程将在启动时接收系统服务的绑定程序。

Shizuku 引导用户首先使用 root 或 ADB 运行一个进程、Shizuku 服务器。 当应用程序启动时,Shizuku 服务器的 Binder 也会发送到应用程序。

Shizuku 提供的最重要的功能是充当中间人,接收来自应用程序的请求,将其发送到系统服务器,然后发回结果。 详细信息可以查看 rikka.shizuku.server.ShizukuService 类和 moe.shizuku.api.ShizukuBinderWrapper 类中的 transactRemote 方法。

就是这样,使用更高权限的系统API。 而对于app来说,几乎和直接使用系统API是一样的。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
0 评论
2 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部