Android 上实现不 root 管理其他 App,基本上有几种方案:
对我个人来说,设备管理员模式的操作过于复杂,而且有相当一部分设备不支持。主要研究了一下 Adb 模式。
冰箱 /黑阈在非 root 情况下,需要用户在每次设备重启后用 adb 运行一个脚本,这个脚本在后台起一个有 adb 权限的进程。后面需要 adb 权限时,通过 socket 和这个进程通信,利用它的 adb 权限代替执行相关操作。
但其实原生 Android 上已经有一个进程在做一模一样的事,那就是 adbd 。
熟悉 Adb 调试的人都知道,adb 调试是通过 PC 端的 adb 命令程序和 Android 设备端的 adbd 服务进程通信实现的。不管底层是走 usb 还是 tcpip,他们之间交互的协议是固定的。
那么能不能在设备端实现一个 adb 命令程序,实现在设备上对其他 App 的管理呢。
答案是肯定的,Adb 协议相当简单明了,实现并没有太大难度。 https://android.googlesource.com/platform/packages/modules/adb/+/HEAD/protocol.txt
这样一来,App 获取 ADB 权限流程变成:
1.开启 adb 调试,连上设备,执行: adb tcpip 5555
2.App 中连接 localhost 的 5555 端口,发送 adb 调试证书授权,用户点确认,获取 adb 权限。
相比于冰箱 /黑阈,这个方案的好处是,利用的是 Android 官方的 adbd,后台没有任何第三方进程,不使用 App 时系统零开销。 安全性,稳定性更有保障。
利用这个原理,我写一个 App,有兴趣的 tx 可以试用一下
Ran: Rule your Apps with Adb on devices
https://play.google.com/store/apps/details?id=com.cloudmonad.ran
目前功能比较简陋,主要利用 adb 权限实现了 获取 App 运行状态,杀死 App,frozen/unfrozen(利用 pm disable/enable )
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.