7

另一种思路实现类似冰箱/黑阈的功能

 2 years ago
source link: https://www.v2ex.com/t/788902
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  Android

另一种思路实现类似冰箱/黑阈的功能

  cache · 7 小时 35 分钟前 · 450 次点击

Android 上实现不 root 管理其他 App,基本上有几种方案:

  1. 利用设备管理员模式。代表应用 App Ops/小黑屋。
  2. 利用 Adb 调试权限。代表应用 冰箱 /黑阈。
  3. 另有一派非主流,利用无障碍服务,模拟点击杀进程。如KillApps

对我个人来说,设备管理员模式的操作过于复杂,而且有相当一部分设备不支持。主要研究了一下 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 )


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK