Adb Usage
adb(android debug bridge)安卓调试桥是一种能与设备进行通信的命令行工具。可用于执行各种设备操作,如安装和卸载、调试应用。
adb的工作原理#
- 客户端:用于发送命令,在开发机器上运行
- 守护程序(adbd):用于在设备端运行命令,在每个设备上作为后台进程运行
- 服务器:用于管理客户端与守护程序之间的通信,在开发机器上作为后台进程运行
当启动某个adb客户端时,会先检查是否有adb服务器进程已存在。如果没有,则启动服务器进程。启动后会跟本地TCP端口5037绑定,并监听adb客户端发出的命令。 如以下是同样命令的不同情况下的输出:
- 首次启动adb
❯ adb devices -l* daemon not running; starting now at tcp:5037* daemon started successfullyList of devices attachedHA1JQG06 device usb:17956864X product:LenovoTB-J607F_PRC model:Lenovo_TB_J607F device:J607F transport_id:1- adb服务器进程已存在
❯ adb devices -lList of devices attachedHA1JQG06 device usb:17956864X product:LenovoTB-J607F_PRC model:Lenovo_TB_J607F device:J607F transport_id:1服务器会与所有正运行的设备建立连接。通过扫描5555~5585之间的奇数端口查找模拟器。一旦发现adb守护程序,便会与响应端口建立连接。
服务器与所有设备均建立连接后,便可以使用adb命令访问这些设备。可以从任意客户端或某个监本控制任意设备。
连接到设备#
可通过USB线和连接Wi-Fi两种方式连接到设备,均需要提前在开发者选项下开启USB调试。
通过Wi-Fi连接到设备有一定的要求,即需要Android11(API级别30)及以上版本才支持,且需要开发机器和设备处于同一无线网络下。
常见操作命令#
对于平常开发使用,用的多的像安装、卸载应用;文件复制到设备以及从设备复制出来;自动唤起应用;截图等等,接下来一一罗列。
1.查询已连接设备#
adb devices -l通过以上命令,可以了解到哪些设备已经连接到adb服务器。作为响应,adb会对乜咯设备输出以下啊信息:
❯ adb devices -lList of devices attachedHA1JQG06 device usb:17956864X product:LenovoTB-J607F_PRC model:Lenovo_TB_J607F device:J607F transport_id:1- 序列号: 表示通过端口号唯一标识设备,如以上的
HA1JQG06 - 状态:设备的连接状态,
offline表示设备未连接或没有响应,device设备已连接,no device未连接任何设备 - 说明:如果命令加入了
-l选项,devices命令会告知设备是什么,当有多个设备连接时,方便区分
2.将命令发到指定设备#
如果有多个设备连接,那么在发出adb命令时需制定目标设备。
以下示例wield在某个设备上安装test.apk
# 先通过devices命令获取设备序列号❯ adb devicesList of devices attachedHA1JQG06 device172.18.8.140:5555 device
# 在HA1JQG06设备上安装❯ adb -s HA1JQG06 install test.apk3.将文件复制到设备以及从设备复制文件#
如需从设备中复制某个文件或目录(及其子目录),请使用以下命令:
adb pull remote local如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令:
adb push local remote将 local 和 remote 替换为开发机器(本地)和设备(远程)上的目标文件/目录的路径。例如:
adb push myfile.txt /sdcard/myfile.txt4.adb 命令#
adb [-d | -e | -s serial_number] command如果只有一个模拟器在运行或者只连接了一个设备,系统会默认将 adb 命令发送至该设备。如果有多个模拟器正在运行并且/或者连接了多个设备,您需要使用 -d、-e 或 -s 选项指定应向其发送命令的目标设备。
可通过 adb --help查看所有支持的adb命令详细列表及使用方法。
5.shell 命令#
通过adb发出单个shell命令
adb [-d | -e | -s serial_number] shell shell_command如果要在设备上执行多个命令
adb [-d | -e | -s serial_number] shell执行以上命令可进入设备控制台,然后执行对应shell_command
Android 提供了大多数常见的 Unix 命令行工具。如需查看可用工具的列表,请使用以下命令:
adb shell ls /system/bin对于大多数命令,都可通过 --help 参数获得命令帮助。许多 shell 命令都由 toybox 提供。对于所有 toybox 命令,都可通过 toybox --help 获得适用的一般性帮助。
以下是几个重要且常用的shell命令
5.1 调用activity管理器#
可以使用am工具发出命令以执行各种系统操作,如启动activity,强行停止进程、修改设备屏幕属性等等,相应的语法为
# 进入远程shell后am command
# 未进入远程shell,直接从开发机器发出adb shell am command比如以下几个常用的
adb shell am start -a com.xxxapp # 启动某个appadb shell am display-size 1280x800 # 替换设备显示尺寸为1280x800具体可执行的command可参考 https://developer.android.com/tools/adb#am
5.2 调用软件包管理器#
使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。
pm command常见如下
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 实用程序。
screencap filename通常设备都会有截图交互按钮,但我们也可以用shell命令实现,并下载截图
adb shellscreencap /sdcard/screen.pngexitadb pull /sdcard/screen.png5.5 录制视频#
screenrecord 命令是一个用于录制设备显示屏的 shell 实用程序。该实用程序将屏幕 activity 录制为 MPEG-4 文件。
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 | 在命令行屏幕显示日志信息。如果您不设置此选项,则该实用程序在运行时不会显示任何信息。 |