关于Dhizuku-API

Posted by Rosan(Maker), RinCynar(Repost) on October 1, 2100

Dhizuku API

Dhizuku API 是 Dhizuku (About, Github 的 API。

导入

Maven Central

1
2
def dhizuku_version = "version of api"
implementation "io.github.iamr0s:Dhizuku-API:$dhizuku_version"

初始化

执行如下代码从而初始化Dhizuku-API,如果初始化失败(Dhizuku不存在、未激活)就开始调用其余API会抛出错误

1
Dhizuku.init(context) // return boolean

请求权限

某些API接口需要先请求权限才能运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Dhizuku.isPermissionGranted()) return

Dhizuku.requestPermission(new DhizukuRequestPermissionListener() {
        @Override
        public void onRequestPermission(int grantResult) throws RemoteException {
            if (grantResult == PackageManager.PERMISSION_GRANTED) {
                ComponentName component = Dhizuku.getOwnerComponent(); // current Dhizuku Server Admin Receiver
                // do success code
            }else {
                // do failure code
            }
        }
    });

接口与更改记录

Binder Wrapper

IBinder 常用于普通应用与系统的基础通信方式。Dhizuku 提供一个接口用于代理 IBinder,应用可以通过此接口以 Dhizuku 的身份与系统通信。

BinderWrapper Demo

User Service

Dhizuku.getVersionCode() >= 3

一个基于 AIDL 机制的简易 Service,Service 运行于 Dhizuku 提供的隔离空间。

通常的用法是先声明一个 AIDL 文件,再于 Service 中将其实现,随后通过 Dhizuku 提供的接口将其启动。

UserService Demo

Delegated Scopes

Dhizuku.getVersionCode() >= 5

不论是在 Binder Wrapper 还是 User Service 调用 DevicePolicyManager 都显得颇为复杂,通过 Delegated Scopes 可以简化这个操作。

通常的用法是给应用授予 Delegated Scopes,随后应用可以自行通过 DevicePolicyManager 调用被纳入 Delegated Scopes 的接口。

DelegatedScopes Demo