Android 调试桥 (adb) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。该工具作为一个客户端-服务器程序,包括如下组件:(参考system/core/adb/overview.txt)
该组件发送adb命令,在开发计算机上运行。它会找出PC端的运行的adb server,如果没有找到就会自动的启动adb server,然后向adb server发送请求命令
该组件在设备上运行命令。运行于一个Android Devices/Emulator的后台守护进程,该进程主要是用来连接ADB Server通过USB(模拟器通过TCP协议)并为adb clients提供一系列的services。
该组件管理客户端和后台程序之间的通信,在开发计算机上作为后台进程运行。运行在PC端的一个后台应用程序,用来检测Android Devices的连接或去除。ADB Server是一个时刻协调交换Client、Services和Android devices之间数据的组件。.
服务(services):主要分为Host Services及 Local Services两类
Host Services: 运行于ADB Server,不需要和devices进行数据交换。典型的就是执行adb devices命令时,只需要adb server端返回当前的adb devices的状态即可。
Local Services: 这些服务运行于adbd守护进程中。ADB Server用于在adb clients和运行在adbd上的Local Services二者之间实现多路传送复用Streams。Local Services 用来初始化建立连接并用于数据的传递。
启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令-------所有 adb 客户端均使用端口 5037 与 adb 服务器通信。
然后,服务器设置与所有运行的模拟器/设备实例的连接。它通过扫描端口 5555 到 5587 之间(模拟器/设备使用的范围)的奇数号端口查找模拟器/设备实例。服务器一旦发现 adb 后台程序,它将设置与该端口的连接。请注意,每个模拟器/设备实例将获取一对按顺序排列的端口 — 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
以此类推…
如上所示,在端口 5555 与 adb 连接的模拟器实例与侦听端口 5554 的控制台的实例相同。
当服务器已设置与所有模拟器实例的连接后,您可以使用 adb 命令访问这些实例。由于服务器管理与模拟器/设备实例的连接,并处理来自多个 adb 客户端的命令,因此,您可以从任意客户端(或从某个脚本)控制任意模拟器/设备实例。
如果多个模拟器/设备实例正在运行,在发出 adb 命令时您必须指定一个目标实例。为此,请在命令中使用 -s 选项。以下是 -s 选项的用法:
adb -s serial_number command
如上所示,您使用由 adb 分配的序列号为命令指定目标实例。您可先使用 devices 命令获取正在运行的模拟器/设备实例的序列号。然后再发送特定命令给指定的模拟器/设备实例。例如:如下install命令
adb -s emulator-5556 install helloWorld.apk
注意,如果在多个设备可用时您未指定目标模拟器/设备实例就发出命令,那么 adb 将生成一个错误。
如果您有多个设备可用(硬件或模拟设备),但只有一个设备是模拟器,则使用 -e 选项将命令发送至该模拟器。同样,如果有多个设备,但只连接了一个硬件设备,则使用 -d 选项将命令发送至该硬件设备。
您可以在开发计算机上从命令行发出 adb 命令,或通过脚本发出。用法如下:
adb [-d|-e|-s serial_number] command
如果只有一个模拟器在运行或只连接了一个设备,则默认情况下将 adb 命令发送至该设备。如果有多个模拟器在运行和/或连接了多个设备,您需要使用 -d、-e 或 -s 选项指定应向其发送命令的目标设备。
下表列出了所有支持的 adb 命令并解释其含义和用法。
您可以使用 shell 命令通过 adb 发出设备命令,可以进入或不进入模拟器/设备实例上的 adb 远程 shell。要在不进入远程 shell 的情况下发出一个命令,请使用如下 shell 命令:
adb [-d|-e|-s serial_number] shell shell_command
或者,使用如下命令进入模拟器/设备实例上的远程 shell:
adb [-d|-e|-s serial_number] shell
当您准备退出远程 shell 时,按 Control + D 或输入 exit。
shell 命令二进制文件存储在模拟器或设备的文件系统中,其路径为 /system/bin/。