openvela之ADB
ADB(Android Debug Bridge)是一款功能丰富的命令行工具,旨在实现开发工作站与设备(如模拟器、实体设备)之间的通信。通过 ADB,开发者可以便捷地在设备上执行命令、传输文件、调试应用等。本文将详细介绍 ADB 的工作原理、核心命令及使用方法,帮助你高效掌握这一工具。
一、ADB 的核心组件与工作原理
1. 三大核心组件
ADB 采用客户端 - 服务器架构,包含三个关键部分:
- 客户端:运行在开发工作站上,负责发送命令(如通过命令行终端调用)。
- 守护程序(adbd):作为后台进程运行在设备上,负责执行客户端发送的命令。
- 服务器:同样运行在开发工作站上的后台进程,负责管理客户端与守护程序之间的通信。
2. 工作流程
- 端口绑定:所有 ADB 客户端通过 5037 端口 与 ADB 服务器通信。启动客户端时,若服务器未运行则自动启动,并绑定到本地 5037 端口监听命令。
- 设备连接:服务器启动后,会扫描 5555-5585 之间的奇数端口(最多支持 16 个模拟器),寻找运行中的设备 / 模拟器。每个设备使用一对连续端口:
- 偶数端口:用于控制台连接(如 5554);
- 奇数端口:用于 ADB 连接(如 5555)。
- 命令转发:服务器与设备建立连接后,客户端发送的命令由服务器转发至目标设备的 adbd 执行,结果再经服务器返回给客户端。
二、查询已连接设备
在发送 ADB 命令前,需先确认已连接的设备列表,使用以下命令:
adb devices
输出说明
命令会返回设备的 序列号(唯一标识,如 emulator-5554
)和 状态:
offline
:设备未连接到 ADB 或无响应;device
:设备已连接(但不代表系统完全启动);no device
:无设备连接。
特殊情况:模拟器未列出?
若模拟器运行但未显示在列表中,可能是以下原因导致:
- ADB 服务器未启动;
- 模拟器通过 -port 或 -ports 指定了 5554-5584 之间的奇数端口;
- 端口空闲或模拟器切换到符合条件的其他端口;
- 启动模拟器后才启动 ADB 服务器。
解决办法:重启 ADB 服务器(adb kill-server
后再执行任意 ADB 命令)。
三、向指定设备发送命令
若存在多个设备 / 模拟器,需通过以下选项指定目标:
-d
:指定连接的实体设备;-e
:指定运行的模拟器;-s
<serial_number>:通过序列号指定设备(推荐)。
命令格式:
adb [-d | -e | -s serial_number] command
1. 端口转发
将主机端口的请求转发到设备端口,用于调试网络数据:
# 主机 6100 端口 → 设备 7100 端口
adb forward tcp:6100 tcp:7100# 主机 6100 端口 → 设备 logd(系统日志守护程序)
adb forward tcp:6100 local:logd
2. 传输文件
使用 pull
(从设备复制到本地)和 push
(从本地复制到设备)命令:
# 从设备拉取文件:adb pull <设备路径> <本地路径>
adb pull /sdcard/photo.jpg ~/Desktop/# 向设备推送文件:adb push <本地路径> <设备路径>
adb push ~/music/song.mp3 /sdcard/music/
3. 管理 ADB 服务器
- 停止服务器:
adb kill-server
- 重启服务器:执行任意 ADB 命令(如
adb devices
)即可自动启动。
4. 查看所有支持的命令
如需了解完整命令列表,使用:
adb --help
四、执行 Shell 命令
通过 ADB 可直接在设备上运行 shell 命令,支持两种方式:
1. 单条命令
# 示例:查看设备内存使用情况
adb shell free# 示例:列出设备上的应用包名
adb shell pm list packages
2. 交互式 Shell
启动与设备的交互式命令行:
adb shell
此时可直接输入设备端的 shell 命令(如 ls
、cd
等),退出时输入 exit
或按 Control+D
。
总结
ADB 是连接开发工作站与设备的重要桥梁,通过其丰富的命令集,开发者可以高效地进行设备管理、文件传输、调试等操作。掌握 ADB 的工作原理和核心命令,能显著提升openvela的开发效率。如需进一步探索,可通过 adb --help 查看所有命令的详细说明。