Kotlin 实战爱上Android

使用 Kotlin Compose Desktop 实现了一个简

2022-06-26  本文已影响0人  fengzhizi715
pexels-zarina-khalilova-12467948.jpg

一. adbd-connector

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

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

二. 背景

在下图中的 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-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 进行连接。

三. adbd-connector 使用

3.1 手机的连接效果:

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

1.png

3.2 执行 adb shell 命令的效果:

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

2.png 3.png

3.3 install app

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

安装 App 时分成2步:

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

4.png
  1. 使用 adb shell pm install 命令安装 apk
5.png 6.png

3.4 uninstall app

adb shell pm uninstall 包名

7.png

四. 总结

这款工具 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
上一篇下一篇

猜你喜欢

热点阅读