使用 Kotlin Compose Desktop 实现了一个简易的"手机助手"

1一. adbd-connector

adbd-connector 是一个实现 adb server 和 adb daemon 之间的通信协议的库,使用 Kotlin 编写。支持 PC 端直接连接 Android 设备操作 adb 相关的指令。

github 地址:https://github.com/fengzhizi715/adbd-connector

2二. 背景

在下图中的 adb client 和 adb server 都共存在 PC 中,PC 上安装过 adb 程序就会有。adb dameon (简称adbd)是存在于 Android 手机中的一个进程/服务。

当我们启动命令行输入 adb 命令时,实际上使用的是 adb client,它会跟 PC 本地的 adb server 进行通信(当然,有一个前提先要使用 adb-start 启动 adb server 才能调用 adb 命令)。

然后 adb server 会跟 Android 手机进行通信(手机通过 usb 口连上电脑)。最终,我们会看到 adb client 返回命令执行的结果。

一次命令的执行包含了 1-6 个步骤。其实,还要算上 adb server 内部的通信和 adb dameon 内部的通信。一次命令的执行,路径会很长。

所以,一次完整的 adb 通信会涉及如下的概念:

  • adb client:运行在 PC 上,通过在命令行执行 adb,就启动了 adb client 程序

  • adb server:运行于 PC 的后台进程,用于管理 adb client 和 daemon 之间的通信

  • adb daemon(adbd):运行在模拟器或 Android 设备上的后台服务。当 Android 系统启动时,由 init 程序启动 adbd。如果 adbd 挂了,则 adbd 会由 init 重新启动。

  • DDMS:DDMS 将 IDE 和手机设备之间建立起了一座桥梁,可以很方面的查看到目标机器上的信息。

  • JDWP:即 java debug wire protocol,Java 调试线协议,是一个为 Java 调试而设计的通讯交互协议,它定义了调试器和被调试程序之间传递的信息的格式。

使用 Kotlin Compose Desktop 实现了一个简易的 adb-connector.png

在 adb server 和 adbd 之间有一个 TCP 的传输协议,它定义在 Android 源码的 system/core/adb/protocol.txt 文件中。只要是能通过 adb 命令连接的手机,都会遵循这个协议,无论是 Android 或是鸿蒙系统。

因此,基于这个协议实现了一个 TCP 的客户端(adbd-connector)就可以跟手机的 adbd 服务/进程进行通信,从而实现 adb 的所有指令。

另外,我还使用 Kotlin Compose Desktop 在这个协议上做了一层 UI,实现了一个可以在 PC 上使用的简易"手机助手",且支持 Mac、Linux、Windows 等系统。

在手机连接前,先要打开手机的开发者模式。在连接过程中,手机会弹出信任框,提示是否允许 usb 调试。需要点击信任,才能完成后续的连接。还要打开手机的 5555 端口(使用 adb 命令:adb tcpip 5555),以及获取手机连接当前 wifi 的局域网 ip 地址。有了局域网的 ip 地址和端口,才可以通过 adbd-connector 跟 adbd 进行连接。

3三. adbd-connector 使用

3.1 手机的连接效果:

连上手机,获取手机的基础信息

使用 Kotlin Compose Desktop 实现了一个简易的 1.png

3.2 执行 adb shell 命令的效果:

执行 adb shell 相关的命令(输入时省略 adb shell,直接输入后面的命令)

使用 Kotlin Compose Desktop 实现了一个简易的 2.png 使用 Kotlin Compose Desktop 实现了一个简易的 3.png

3.3 install app

目前还处在疫情期间,所以就在应用宝上找了一个跟生活相关的 App,最主要是这个 App 体积小

安装 App 时分成2步:

1.使用 push 命令将 apk 推送到手机的目录 /data/local/tmp/ 下

使用 Kotlin Compose Desktop 实现了一个简易的 4.png
  1. 使用 adb shell pm install 命令安装 apk

使用 Kotlin Compose Desktop 实现了一个简易的 5.png 使用 Kotlin Compose Desktop 实现了一个简易的 6.png

3.4 uninstall app

adb shell pm uninstall 包名

使用 Kotlin Compose Desktop 实现了一个简易的 7.png

4四. 总结

这款工具 https://github.com/fengzhizi715/adbd-connector 是一个 PoC(Proof of Concept)的产物,参考了很多开源项目,特别是 https://github.com/sunshinex/adbs。

它能够实现绝大多数的 adb 命令。后续这个项目的部分代码可能会用于公司的项目。所以,这个仓库不一定会持续更新了。而且,这款工具使用起来也很繁琐,需要打开手机的 5555 端口以及输入手机局域网 ip 的地址。因此在实际业务中,还有很多东西需要改造以适合自身的业务。

参考资料:

  1. https://github.com/sunshinex/adbs

  2. https://github.com/Malinskiy/adam

  3. https://github.com/jakkypan/trivia/blob/master/ADB%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE.md

  4. https://juejin.cn/post/7034799230086545445

  5. https://itimetraveler.github.io/2019/06/07/Android%20ADB%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/#ADB-Protocol-%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE

Java与Android技术栈】公众号

关注 Java/Kotlin 服务端、桌面端 、Android 、机器学习、端侧智能

更多精彩内容请关注:

你可能感兴趣的:(android,java,linux,python,物联网)