开发者
示例教程
开源代码
常见问题
搜索
暂无数据
ADB 命令更新时间: 2025-06-21 10:46:37

ADB 是一个功能丰富的命令行工具,用于与设备进行通信。adb 通过访问设备的 Unix shell 来在设备上运行各种命令。作为一种客户端-服务器程序,包括以下三个组件:

  • 客户端:用于发送命令,客户端在开发工作站上运行,可以通过发送 adb 命令从命令行终端调用客户端。

  • 守护程序 (adbd):用于在设备上运行命令,守护程序在每个设备上作为后台进程运行。

  • 服务器:用于管理客户端与守护程序之间的通信,服务器在开发工作站上作为后台进程运行。

一、ADB 的工作原理

所有 adb 客户端均使用端口 5037 与 adb 服务器通信。当启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程已在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令。

随后服务器会与所有正在运行的设备建立连接。通过扫描 5555 到 5585 之间(该范围用于前 16 个模拟器)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。

每个模拟器都使用一对按顺序排列的端口:一个用于控制台连接的偶数号端口,另一个用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554;模拟器 1,adb:5555。

模拟器 2,控制台:5556;模拟器 2,adb:5557。

依此类推,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。

服务器与所有设备均建立连接后,便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此可以从任意客户端或从某个脚本控制任意设备。

二、查询设备

发送 adb 命令前,需要了解哪些设备实例已连接到 adb 服务器,可使用如下命令查询已连接设备的列表:

adb devices

adb 会为每个设备输出以下状态信息:

  • 序列号:adb 会创建一个字符串,用于通过端口号唯一标识设备。例如:emulator-5554

  • 状态:设备的连接状态可以是以下几项之一:

    • offline:设备未连接到 adb 或没有响应。

    • device:设备已连接到 adb 服务器,但是此状态并不表示 Guest 系统已完全启动并可正常运行,有可能在设备连接到 adb 时系统仍在启动。系统完成启动后,设备通常处于此运行状态。

    • no device:未连接任何设备。

1、未列出模拟器的情形

adb devices 命令的极端命令序列会导致正在运行的模拟器不显示在 adb devices 输出中(即使在桌面上可以看到该模拟器)。当满足以下所有条件时,就会发生这种情况:

  • adb 服务器未在运行。

  • 在使用 emulator 命令时,将 -port 或 -ports 选项的端口值设为 5554 到 5584 之间的奇数。

  • 选择的奇数号端口处于空闲状态,因此可以与指定端口号的端口建立连接;或者该端口处于忙碌状态,模拟器切换到了符合第 2 条要求的另一个端口。

  • 启动模拟器后才启动 adb 服务器。

三、向指定设备发送命令

adb 要指定目标,请按以下步骤操作:

  1. 使用 devices 命令获取目标设备的序列号。

  2. 获得序列号后,使用 -s 选项与 adb 命令来指定序列号。

1、设置端口转发

可以使用 forward 命令设置任意用于转发的端口,将特定主机端口上的请求转发到设备上的其他端口。以下示例设置了主机 6100 端口到设备 7100 端口的转发:

adb forward tcp:6100 tcp:7100

以下示例设置了主机 6100 端口到 local:logd 的转发:

adb forward tcp:6100 local:logd

如果尝试确定发送到设备上指定端口的内容,上述做法可能会非常有用。系统会将收到的所有数据写入系统日志记录守护程序,并显示在设备日志中。

2、向设备推送或获取文件

可以使用 pullpush 命令将文件复制到设备或从设备复制文件。

如需从设备中复制某个文件或目录(及其子目录),使用以下命令:

adb pull remote local

如需将某个文件或目录(及其子目录)复制到设备,使用以下命令:

adb push local remote

将 local 和 remote 替换为开发工作站(本地)和设备(远程)上的目标文件/目录的路径,使用如下命令:

adb push myfile.txt /sdcard/myfile.txt

3、停止 adb 服务器

在某些情况下,可能需要先终止 adb 服务器进程,然后重启才能解决问题,例如发生 adb 不响应命令的这种情况。

如需停止 adb 服务器,使用 adb kill-server 命令,然后通过发出任意 adb 命令来重启服务器。

4、发送 adb 命令

可以通过开发工作站上的命令行或通过脚本发送 adb 命令,例如:

adb [-d | -e | -s serial_number] command

如果只有一个模拟器在运行或者只连接了一个设备,系统会默认将 adb 命令发送至该设备。如果有多个模拟器正在运行并且/或者连接了多个设备,需要使用 -d-e-s 选项指定应向其发送命令的目标设备。

可以使用以下命令来查看所有受支持 adb 命令的详细列表:

adb --help

四、发送 shell 命令

可以使用 shell 命令通过 adb 发出设备命令,也可以使用该命令启动交互式 shell。如需发出单个命令,请使用如下所示的 shell 命令:

adb [-d |-e | -s serial_number] shell shell_command

要在设备上启动交互式 shell,请使用如下所示的 shell 命令:

adb [-d | -e | -s serial_number] shell

如需退出交互式 shell,请按 Control+D 或输入 exit

文档内容是否有帮助?
有帮助
无帮助