本项目是基于 Kotlin 协程的 Android Shell 命令执行框架,支持 User、Shizuku 和 Root 三种权限模式,提供简洁、统一的 API,极大简化命令执行流程。无论是普通用户权限还是复杂的 Shizuku 回调处理,都能几行代码搞定!
val shell: Shell = ShizukuShell(context)
if (shell.isAvailable()) {
val result = shell.exec("echo test", timeout = 20_000L)
println("标准输出: ${result.stdout}")
println("错误输出: ${result.stderr}")
println("退出码: ${result.exitCode}")
}- 多模式支持:无缝支持 User、Shizuku 和 Root 三种权限模式,满足不同场景需求。
- Shizuku API 封装:本框架在内部处理了所有有关授权、AIDL 实现、服务绑定等的操作,只需实例化、执行命令即可
- Kotlin 协程集成:统一而简单的挂起式 API,告别繁琐。
- 统一接口:
Shell接口抽象不同模式,提供一致、简洁的调用体验。
在 settings.gradle.kts 中添加 jitpack 官方 Maven
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
...
maven { url = uri("https://jitpack.io") }
}
}在模块的 build.gradle.kts 中添加:
dependencies {
implementation("com.github.niki914:cmd-android:${latest_version}") // 查看本项目最新 release
}提示:想深入了解 Shizuku?查看 Shizuku 官方文档 或 示例 Demo。
val shell: Shell = UserShell() // 或 ShizukuShell(context), RootShell()
if (shell.isAvailable()) {
val result = shell.exec("pm list packages", timeout = 10_000L)
if (result.isSuccess) {
println("已安装应用: ${result.stdout}")
} else {
println("错误: ${result.stderr}, 退出码: ${result.exitCode}")
}
}val shell: Shell = ShizukuShell(context)
launch(Dispatchers.IO) {
val result = shell.exec("dumpsys activity", timeout = 30_000L)
withContext(Dispatchers.Main) {
if (result.isSuccess) {
toast("命令执行成功: ${result.stdout.take(100)}...")
} else {
toast("命令失败: ${result.stderr}")
}
}
}- Root 模式:依赖
su命令,需确保设备已 Root 并可访问su。 - R8 混淆:启用精简和混淆后,Shizuku 模块概率出现未知问题,表现为可以授权但命令不能被执行,需要在
proguard-rules.pro中添加规则过滤: - 不支持交互式命令调用: 不支持运行如
su等命令后进入的新的交互式命令状态的情况
-keep class dev.rikka.shizuku.** { *; }
-keep class com.niki.** { *; }
-dontwarn dev.rikka.shizuku.**
-dontwarn com.niki.**
遇到问题?提交 Issue。
