Termux:API 的 Device Owner / Dhizuku 魔改版源码。
本项目的目标:让 Termux 终端不只是调用普通 Termux:API,而是可以通过 Dhizuku 的 Device Owner 能力完成静默安装、Device Owner 管理和转出。
这是修改版,不是 Termux 官方发布。上游项目:https://github.com/termux/termux-api
- 纯 Dhizuku 静默安装:通过 Dhizuku user service +
PackageInstaller安装 APK,不依赖 Shizuku 的pm install。 - Device Owner provider:
content://com.termux.api.owner,供ownerCLI 调用。 - Device Owner 转出 UI:Settings →
Dhizuku / Device Owner,列出 active admins 并选择目标;仅执行转出,转回由 Dhizuku 自身完成。 - Dhizuku 权限请求界面:
DhizukuRequestActivity。 - 静默安装结果回传:由 Termux:API 进程创建
PendingIntent,避免在 Dhizuku 用户服务进程中动态注册广播。 - 动态 DPM 命令:通过
HiddenApiBypass+ Dhizuku binder wrapper,让DevicePolicyManager公共 API 以 Dhizuku owner 身份执行,覆盖摄像头、USB、状态栏、用户、CA、密码策略、应用限制等 OwnDroid 功能。 - 锁屏控制:
owner -c dpm keyguard on|off启用/禁用锁屏,owner -c dpm lock立即锁屏。
在当前测试设备上已验证:
com.geofs.sr 2.0.17
INSTALL_SUCCEEDED: Session installed
lastUpdateTime = 2026-11-08 09:31:23
安装过程未调用 Shizuku pm install,由 Dhizuku Device Owner 的 PackageInstaller 完成。
官方 Termux:API 回归也通过:termux-battery-status、termux-toast、termux-notification、termux-clipboard-get、termux-camera-info 均正常。摄像头策略实测:启用时拍照约 5.9 MB,禁用时输出 0 字节。
- Base: Termux:API
0.53.0 versionCode:1006minSdk: 24targetSdk: 28compileSdk: 35
app/src/main/java/com/termux/api/dhizuku/DhizukuInstallService.javaapp/src/main/java/com/termux/api/dhizuku/IDhizukuInstall.javaapp/src/main/java/com/termux/api/dhizuku/OwnerBridge.java
流程:
owner CLI
→ com.termux.api.owner provider
→ OwnerBridge
→ Dhizuku user service
→ PackageInstaller.Session
→ PendingIntent 回到 Termux:API
关键点:
setRequireUserAction(2)表示不需要用户操作。- 不在 Dhizuku 用户服务进程中
registerReceiver。 session.fsync(os)使用实际的输出流,不能传null。
TransferOwnerActivity.javaDhizukuRequestActivity.javaTermuxAPISettingsActivity.javasets__termux.xmldevice_admin.xmlAndroidManifest.xml
device_admin.xml 已声明:
<support-transfer-ownership />转出逻辑优先使用当前 owner 的 transferOwnership;当 Termux:API 不是 owner 时,通过 Dhizuku 的 device_policy transaction 288 执行。
OwnerProvider 的 authority 为:
com.termux.api.owner
manifest 中声明 exported="true",并使用 android.permission.DUMP 保护,供 Shizuku shell 侧的 content 命令访问。
需要 Android SDK 35 和 JDK。
export ANDROID_HOME=/path/to/android-sdk
./gradlew :app:assembleDebug产物:
app/build/outputs/apk/debug/termux-api-app_v0.53.0+debug.apk
如果是在 Termux 中构建,需要自行配置可用的 aapt2;本仓库不包含本机的 aapt2FromMavenOverride 路径。
当前发布 APK 使用开发/测试签名:
- DN:
CN=APK Signer, OU=Earth, O=Earth - SHA-256:
b6da01480eefd5fbf2cd3771b8d1021ec791304bdd6c4bf41d3faabad48ee5e1 - SHA-1:
517955eabf69fc057c41c7d379dbbcef20ad85f2
发布 APK:Termux-API-Dhizuku-v0.53.0.apk
SHA-256: 9702c8af1d5d1bbd17c325cf81c34dab36fc72b43e87e6325bd9e02694f632f7
这是开发签名,不是生产 release 签名。若要正式发布,请使用自己的 release keystore 重新签名;更换签名后无法直接覆盖已安装版本。
- 本修改版增加了 Device Owner 相关入口,权限高于普通 Termux:API,请只在可信设备上安装。
OwnerProvider使用DUMP权限保护,但仍应避免在不可信应用中暴露命令入口。- 转移 Device Owner 前请确认目标 admin 可信。
- 本项目不提供 root,不修改系统分区。
基于 Termux:API,按其 GPL-3.0 许可证发布。上游版权归 Termux 项目及其贡献者所有;本修改版同样以 GPL-3.0 发布。第三方组件的声明见 NOTICE.md。