快速接入
支持 Android API 26 及以上版本。
添加依赖
priv-ui 包含 Compose 授权页面并传递依赖 priv-core,无需重复声明 Core。
kotlin
dependencies {
implementation("io.github.priv-kit:priv-ui:<version>")
}自定义授权界面可以直接依赖 priv-core:
kotlin
dependencies {
implementation("io.github.priv-kit:priv-core:<version>")
}配置 native 库打包
支持 Android 10 以下版本时,将 useLegacyPackaging 设置为 true:
kotlin
android {
packaging {
jniLibs {
useLegacyPackaging = true
}
}
}Android 10 及以上版本没有此限制。Priv Kit 会根据 useLegacyPackaging 的值使用 对应的启动命令。
以 arm64 设备为例:
useLegacyPackaging = true:
shell
adb shell /data/app/.../lib/arm64/libprivkitstarter.souseLegacyPackaging = false:
shell
adb shell /system/bin/linker64 '/data/app/.../base.apk!/lib/arm64-v8a/libprivkitstarter.so'配置 hidden API 访问
在应用中配置 HiddenApiBypass:
kotlin
class App : Application() {
override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
HiddenApiBypass.addHiddenApiExemptions("L")
}
}
}嵌入 Privilege UI
在应用的 Compose 内容中放置 PrivilegeScaffold:
kotlin
PrivilegeScaffold()默认页面提供 Root、ADB 和手动启动,配对、配置及静默启动见 Privilege UI。
使用 priv-core 自定义界面
使用 priv-core 时,应用自行处理权限、配对、确认、状态检查和错误。
最短的 Root 与无线调试调用如下:
kotlin
val rootServer = Privilege.startRoot()
val adbServer = Privilege.startAdb()两者都是 suspend 函数。取消调用它们的协程时,运行时会关闭当前进程、Socket 或查找端口的任务。 完整的 priv-core 流程见启动方式。
选择使用方式
- 使用 Binder 访问系统服务或执行底层 Binder 调用。
- 使用文件代理执行基础的绝对路径文件操作。
- 使用命令执行启动有界的非交互进程,并流式读取或汇总输出。
- 使用 UserService 运行应用自定义 AIDL 服务。
- 使用 Privilege UI 接入自带授权页面。
- 需要用
priv-core替换该页面时阅读启动方式。
仍在活跃开发
使用发布版本及文档中的公开 API。priv-evdev 为实验模块,内部类不承诺兼容性。