scrcpy 中的 ADB 接口提供了一个全面的抽象层,用于通过 Android 调试桥 (ADB) 与 Android 设备进行通信。该子系统处理所有与 ADB 相关的操作,包括设备发现、命令执行、连接管理和文件传输。它使 scrcpy 能够在客户端(计算机)和服务器(Android 设备)之间建立必要的通道。
有关 ADB 连接建立后客户端-服务器通信如何工作的更多信息,请参阅 客户端组件 和 服务器组件。
ADB 接口包含三个主要组件
来源: app/src/adb/adb.h1-128 app/src/adb/adb_device.h1-49 app/src/adb/adb_parser.h1-30 app/src/util/process.h1-179
ADB 接口使用进程执行抽象来运行 ADB 命令。它提供了一种标准化的方法来
来源: app/src/adb/adb.c227-230 app/src/adb/adb.c203-225
ADB 接口提供了用于常见 ADB 操作的全面函数集
| 功能 | 描述 | 关键参数 |
|---|---|---|
sc_adb_execute() | 通用 ADB 命令执行 | 命令参数,标志 |
sc_adb_start_server() | 启动 ADB 服务器 | 中断处理程序,标志 |
sc_adb_kill_server() | 终止 ADB 服务器 | 中断处理程序,标志 |
sc_adb_forward() | 将本地端口转发到设备套接字 | 序列号,端口,套接字名称,标志 |
sc_adb_reverse() | 反向 - 将设备套接字转发到本地端口 | 序列号,套接字名称,端口,标志 |
sc_adb_push() | 将文件推送到设备 | 序列号,本地路径,远程路径,标志 |
sc_adb_install() | 安装 APK | 序列号,APK 路径,标志 |
sc_adb_tcpip() | 在设备上启用 TCP/IP 模式 | 序列号,端口,标志 |
sc_adb_connect() | 通过 TCP/IP 连接到设备 | IP:端口,标志 |
sc_adb_disconnect() | 断开与 TCP/IP 设备的连接 | IP:端口,标志 |
来源: app/src/adb/adb.c227-452 app/src/adb/adb.h39-95
ADB 接口提供了用于发现、过滤和选择 scrcpy 要连接的 Android 设备的功能。
来源: app/src/adb/adb.c606-696 app/src/adb/adb.h27-37
ADB 接口使用 sc_adb_device 结构来表示设备,其中包含
它还将设备分为三种类型
来源: app/src/adb/adb_device.h10-21 app/src/adb/adb_device.c29-43
ADB 接口解析 ADB 命令的输出以发现设备及其属性。
系统解析 adb devices -l 的输出以发现已连接的设备
adb devices -l 命令sc_adb_device 结构的向量示例 adb devices -l 输出
List of devices attached
0123456789abcdef device usb:2-1 product:MyProduct model:MyModel device:MyDevice transport_id:1
192.168.1.1:5555 device product:MyWifiProduct model:MyWifiModel device:MyWifiDevice transport_id:2
来源: app/src/adb/adb.c454-505 app/src/adb/adb_parser.c11-163
ADB 接口还可以检索特定的设备属性
ip route 命令输出以查找设备的 IP 地址getprop ro.build.version.sdk 获取 Android SDK 版本这些属性用于启用无线连接等功能,并处理特定版本的行为。
来源: app/src/adb/adb.c699-792 app/src/adb/adb_parser.c165-229
ADB 接口负责建立客户端和设备之间的必要连接。
来源: app/src/adb/adb.c248-329 doc/develop.md308-322
ADB 接口负责将服务器组件部署到设备
sc_adb_push() 将服务器 JAR 推送到设备sc_adb_forward() 或 sc_adb_reverse() 设置端口转发来源: app/src/adb/adb.c331-360 doc/develop.md110-140
ADB 接口使用了一个平台无关的进程执行系统,该系统具有平台特定的实现。
| 功能 | Unix 实现 | Windows 实现 |
|---|---|---|
| 进程创建 | 使用 fork() 和 execvp() | 使用 CreateProcessW() |
| 命令构建 | 直接将参数作为数组传递 | 通过适当的转义连接参数 |
| 管道处理 | 使用 Unix 管道 | 使用带有句柄继承的 Windows 管道 |
| 进程等待 | 使用 waitid() | 使用 WaitForSingleObject() |
| 进程终止 | 使用 kill() 和 SIGKILL | 使用 TerminateProcess() |
来源: app/src/sys/unix/process.c15-236 app/src/sys/win/process.c12-260
ADB 接口集成了全面的错误处理
来源: app/src/adb/adb.c104-155 app/src/adb/adb.c584-603
ADB 接口在初始化时确定 ADB 可执行文件的路径
这使得 ADB 安装位置和便携式部署更加灵活。