Skip to content

Adb Usage

· 9 min

adb(android debug bridge)安卓调试桥是一种能与设备进行通信的命令行工具。可用于执行各种设备操作,如安装和卸载、调试应用。

adb的工作原理#

当启动某个adb客户端时,会先检查是否有adb服务器进程已存在。如果没有,则启动服务器进程。启动后会跟本地TCP端口5037绑定,并监听adb客户端发出的命令。 如以下是同样命令的不同情况下的输出:

Terminal window
adb devices -l
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
HA1JQG06 device usb:17956864X product:LenovoTB-J607F_PRC model:Lenovo_TB_J607F device:J607F transport_id:1
Terminal window
adb devices -l
List of devices attached
HA1JQG06 device usb:17956864X product:LenovoTB-J607F_PRC model:Lenovo_TB_J607F device:J607F transport_id:1
所有adb客户端均使用端口5037与adb服务器通信。

服务器会与所有正运行的设备建立连接。通过扫描5555~5585之间的奇数端口查找模拟器。一旦发现adb守护程序,便会与响应端口建立连接。

服务器与所有设备均建立连接后,便可以使用adb命令访问这些设备。可以从任意客户端或某个监本控制任意设备。

连接到设备#

可通过USB线和连接Wi-Fi两种方式连接到设备,均需要提前在开发者选项下开启USB调试

通过Wi-Fi连接到设备有一定的要求,即需要Android11(API级别30)及以上版本才支持,且需要开发机器和设备处于同一无线网络下。

常见操作命令#

对于平常开发使用,用的多的像安装、卸载应用;文件复制到设备以及从设备复制出来;自动唤起应用;截图等等,接下来一一罗列。

1.查询已连接设备#

Terminal window
adb devices -l

通过以上命令,可以了解到哪些设备已经连接到adb服务器。作为响应,adb会对乜咯设备输出以下啊信息:

Terminal window
adb devices -l
List of devices attached
HA1JQG06 device usb:17956864X product:LenovoTB-J607F_PRC model:Lenovo_TB_J607F device:J607F transport_id:1

2.将命令发到指定设备#

如果有多个设备连接,那么在发出adb命令时需制定目标设备。

如果多个设备可用时发出命令但未指定目标设备,adb 会显示错误“adb: more than one device/emulator”。

以下示例wield在某个设备上安装test.apk

Terminal window
# 先通过devices命令获取设备序列号
adb devices
List of devices attached
HA1JQG06 device
172.18.8.140:5555 device
# 在HA1JQG06设备上安装
adb -s HA1JQG06 install test.apk

3.将文件复制到设备以及从设备复制文件#

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

Terminal window
adb pull remote local

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

Terminal window
adb push local remote

将 local 和 remote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如:

Terminal window
adb push myfile.txt /sdcard/myfile.txt

4.adb 命令#

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

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

可通过 adb --help查看所有支持的adb命令详细列表及使用方法。

5.shell 命令#

通过adb发出单个shell命令

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

如果要在设备上执行多个命令

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

执行以上命令可进入设备控制台,然后执行对应shell_command Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:

Terminal window
adb shell ls /system/bin

对于大多数命令,都可通过 --help 参数获得命令帮助。许多 shell 命令都由 toybox 提供。对于所有 toybox 命令,都可通过 toybox --help 获得适用的一般性帮助。

以下是几个重要且常用的shell命令

5.1 调用activity管理器#

可以使用am工具发出命令以执行各种系统操作,如启动activity,强行停止进程、修改设备屏幕属性等等,相应的语法为

Terminal window
# 进入远程shell后
am command
# 未进入远程shell,直接从开发机器发出
adb shell am command

比如以下几个常用的

Terminal window
adb shell am start -a com.xxxapp # 启动某个app
adb shell am display-size 1280x800 # 替换设备显示尺寸为1280x800

具体可执行的command可参考 https://developer.android.com/tools/adb#am

5.2 调用软件包管理器#

使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。

Terminal window
pm command

常见如下

Terminal window
pm list package [options] iflter # 查看所有软件包
pm list permissions [options] group # 查看所有已知权限
pm grant package_name permission # 向应用授权

具体可执行的command可参考 https://developer.android.com/tools/adb#pm

5.3 调用设备政策管理器 (dpm)#

使用该工具控制使用中的管理员应用,或更改设备上的政策状态数据。 该命令我使用不多,可参考 https://developer.android.com/tools/adb#dpm

5.4 截取屏幕截图#

screencap 命令是一个用于对设备显示屏截取屏幕截图的 shell 实用程序。

Terminal window
screencap filename

通常设备都会有截图交互按钮,但我们也可以用shell命令实现,并下载截图

Terminal window
adb shell
screencap /sdcard/screen.png
exit
adb pull /sdcard/screen.png

5.5 录制视频#

screenrecord 命令是一个用于录制设备显示屏的 shell 实用程序。该实用程序将屏幕 activity 录制为 MPEG-4 文件。

Terminal window
screenrecord [options] filename

Ctrl+C 停止屏幕录制。如果不手动停止,到三分钟或 --time-limit 设置的时间限制时,录制将会自动停止。

选项说明
—help显示命令语法和选项
—size widthxheight设置视频大小。默认值为设备的本机显示屏分辨率(如果支持);如果不支持,则为 1280x720。为获得最佳效果,请使用设备的 Advanced Video Coding (AVC) 编码器支持的大小。
—bit-rate rate设置视频的视频比特率(以 MB/秒为单位)。默认值为 20Mbps。 您可以增加比特率以提升视频质量,但这样做会导致视频文件变大。以下示例将录制比特率设为 6Mbps: screenrecord --bit-rate 6000000 /sdcard/demo.mp4
—time-limit time设置最长录制时间(以秒为单位)。默认情况下,最大值为 180(3 分钟)。
—rotate将输出旋转 90 度。此功能处于实验阶段。
—verbose在命令行屏幕显示日志信息。如果您不设置此选项,则该实用程序在运行时不会显示任何信息。

> cd ..