一、简介

ADB 全称是 Android 调试桥(Android Debug Bridge),是一个命令行工具,作为 Android 和 PC 连接的桥梁,开发者可以通过 ADB 完成安装卸载应用,启动应用,调试程序,文件传输,获取系统配置,修改应用、系统配置等功能。本文目的是介绍一些常用的 ADB 命令,帮助大家在开发工作中提高效率。

二、ADB 服务

1.查看 ADB版本

1
adb version

adb_1

2.启动 ADB 服务

执行其他部分连接 ADB 命令也会自动启动

1
adb start-server

adb_2

3.关闭 ADB 服务

1
adb kill-server

4.查看 ADB 帮助

有时候难免忘记具体命令,查看帮助是个不错的选择

1
adb --help

三、设备管理

1.查看连接设备

可查看设备序列号和对应的设备状态

1
adb devices

adb_3

增加-l查看设备更详细信息

1
adb devices -l

adb_8

2.shell 操作

进入到设备 shell,也可直接不进入在外面执行命令

1
adb shell

adb_4

多台设备时,通过-s指定设备序列号执行

1
adb -s <serial_number> shell

3.重启设备

正常重启

1
adb reboot

重启到 recovery

1
adb reboot recovery

重启到 bootloader 界面

1
adb reboot bootloader

4.等待执行

1
adb wait-for[-TRANSPORT]-STATE

STATE: device, recovery, rescue, sideload, bootloader, disconnect

TRANSPORT: usb, local, any (默认 any)

如等待设备连接

1
adb wait-for-device

5.root 权限

获取 root 权限,让 ADB 具备更高权限,执行高权限命令

注意:大部分手机设备是没有 root 的,该命令无法获取 root 权限,感兴趣可以尝试安装 ADBD Insecure

1
adb root

退出 root 权限

1
adb unroot

四、设备信息

1.设备序列号

adb devices获取到的序列号一致

1
adb get-serialno

adb_5

2.设备状态

adb devices获取到的状态一致

1
adb get-state

adb_6

常见的状态有:

  • device:设备正常连接
  • offline:设备连接异常,无响应
  • unauthorized:未授权无法连接设备,USB 调试重新授权能解决部分该问题
  • unknown:未知错误未连接设备

3.设备型号

设备型号存储在系统属性ro.product.model。与adb devices -l获取到的型号一致

adb_7

查看所有系统属性,属性值很多,感兴趣可自行了解。开发者可通过SystemProperties访问

1
adb getprop

adb_9

4.手机 MAC 地址

需要 root 权限来查看文件

1
adb shell cat /sys/class/net/wlan0/address

5.查看 wlan ip 地址

1
adb shell ip addr show wlan0

adb_14

6.蓝牙信息

蓝牙 MAC 地址

1
adb shell settings get secure bluetooth_address

adb_15

蓝牙名称

1
adb shell settings get secure bluetooth_name

adb_16

蓝牙开关,1 开启,0 关闭

1
adb shell settings get global bluetooth_on

adb_46

7.电池信息

1
adb shell dumpsys battery

adb_17

部分字段的含义如下:

字段含义
AC powered是否使用 AC 电源
USB powered是否使用 USB 电源
Wireless powered是否使用无线电源
status电池状态。1:未知,2:充电中,3:放电中,4:未充电,5:电池充满
health电池健康情况,一般状态是 2。1:未知,2:良好,3:过热,4:没电,5:电压过载,6:未知错误,7:电池环境冷
present电池是否存在
level电池当前电量,当前电量百分比:(level / scale * 100)%
scale电池最大容量
voltage电池电压,如 4.341V
temperature电池温度,单位 0.1℃,如 31.7℃
technology电池类型,如 Li-poly 为锂电池

改变显示的电量值(系统重启自动恢复),注意设置为 0 会导致关机

1
adb shell dumpsys battery set level <0-100>

恢复到实际情况

1
adb shell dumpsys battery reset

软件模拟断开充电

1
adb shell dumpsys battery unplug

8.设备分辨率

查看分辨率

1
adb shell wm size

adb_13

设置分辨率

1
adb shell wm size <width>x<height>

9.设备密度

查看密度,-d多屏可指定屏幕,默认 0

1
adb shell wm density [-d 0]

adb_36

设置密度

1
adb shell wm density <dp> [-d 0]

adb_37

五、应用管理

1.安装应用

-r:覆盖安装

-d:降级安装

-g:授予所有运行时权限

-t:安装测试包

1
adb install [-r] [-d] [-g] [-t] <apk_file>

adb_18

2.卸载应用

1
adb uninstall <package_name>

adb_19

3.查看应用信息

查看应用所有信息,包含 Activity、Service、广播、权限、版本、安装路径等信息

1
adb shell dumpsys package <package_name>

adb_20

过滤应用版本信息

1
adb shell dumpsys package <package_name> | grep version

adb_21

查看设备上安装的所有应用,增加-f可获取应用安装包路径

1
adb shell pm list package/packages [-f]

adb_22

查看正在运行的 Activity,先 dump Activity 信息,再通过sed命令过滤

1
adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

adb_23

4.启动应用

通过 Activity 启动

1
adb shell am start -n <component>

adb_24

启动并显示启动耗时

1
adb shell am start -W <component>

adb_25

通过 Service 启动

1
adb shell am startservice -n <component>

5.停止应用

1
adb shell am force-stop <package_name>

6.隐藏应用

需要管理权限android.permission.MANAGE_USERS,或者 root 权限

1
2
adb shell pm hide <package_name>
adb shell pm unhide <package_name>

7.查看进程和线程 ID

1
adb shell ps [-H]

adb_26

8.top 查看 CPU 使用情况

1
adb shell top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]

如 1s 刷新展示进程 9777 前 10 的线程数据

1
adb shell top -p 9777 -m 10 -d 1 -H

9.抓取内存情况

系统内存信息

1
adb shell cat /proc/meminfo

adb_28

所有进程的内存信息

1
adb shell dumpsys meminfo

adb_29

指定进程的内存详细信息

1
adb shell dumpsys meminfo <process_name>

adb_27

指定进程的内存值(即详细信息的 Pss TOTAL 值)

1
adb shell dumpsys meminfo | grep <process_name> -m 1

adb_38

10.抓取进程堆信息

抓取到的文件可通过 MAT 等工具来进行分析

1
adb shell am dumpheap <pid> /data/local/tmp/<file_name>

adb_30

11.监控 Activity

1
adb shell am monitor

adb_31

六、文件传输

1.从设备导出文件

默认存放在当前目录下

1
adb pull <device_path> [dst_path]

adb_32

2.把文件导入到设备

1
adb push <src_path> <device_path>

adb_33

七、日志查看

1.抓取日志

1
adb logcat

adb_42

2.控制输出字段

-v设置格式,常用的timethreadthreadtime

1
adb logcat -v <format>

3.过滤日志

过滤日志级别(V-VERBOSED-DEBUGI-INFOW-WARNINGE-ERRORF-FATAL

1
adb logcat *[:priority]

过滤日志 tag(实测这种方式效果不太好)

1
adb logcat <tag>[:priority]

可以通过grep过滤(推荐这种方法,过滤更灵活强大)

1
adb logcat *[:priority] | grep <tag>

adb_43

4.输出到文件

1
adb logcat -f <dir_name>

或者重定向到文件

1
adb logcat > <file_name>

5.指定缓存区

常见缓存区有mainsystemeventscrashradio

1
adb logcat -b <buffer>

6.缓存区大小

查看缓存区大小

1
adb logcat -g

adb_44

设置缓存区大小,后缀M或者K,不是设置任何值都会生效(比如测试机在 64K - 231M)

1
adb logcat -G <size>

adb_45

7.清空日志缓冲区

1
adb logcat -c

八、模拟操作

1.模拟屏幕点击

1
adb shell input tab <x_axis> <y_axis>

2.模拟手势滑动

1
adb shell input swipe <start_x> <start_y> <end_x> <end_y> <duration_ms>

如屏幕右滑,持续 2 秒

1
adb shell input swipe 800 1000 200 1000 2000

3.模拟文本输入

前提是输入框已获得焦点,空格可以通过%s输入

1
adb shell input text <string>

如输入 “1 2 3”

1
adb shell input text "1%s2%s3"

4.模拟键盘输入

1
adb shell input keyevent <key_code>

如输入删除

1
adb shell input keyevent 67

常用按键。完整建码见KeyEvent

key 值功能
67删除
21光标左移
22光标右移
7 - 16数字 0 - 9

5.模拟发送广播

通过action发送广播

1
adb shell am broadcast -a <action>

adb_10

指定广播名发送广播,Android O 以上静态注册不能接收大部分隐式广播

1
adb shell am broadcast -n <component>

adb_11

还可以携带extraflag之类的数据

1
adb shell am broadcast -n <component> --es <string_key> "<string_value>" --ei <int_key> int_value --ez <bool_key> bool_value

adb_12

6.屏幕截图

文件名后缀.png将自动保存成 png 图片,或者添加-p来保存,不支持其他格式

1
adb shell [-p] screencap <save_path>

adb_34

7.录制视频

1
adb shell screenrecord [--size WIDTHxHEIGHT] [--bit-rate RATE] [--time-limit TIME] <save_path>

adb_35

九、连接管理

无线连接

先保证 PC 和设备在同一局域网,然后通过四、设备信息-5.查看 wlan ip 地址获取到设备 ip

1
adb connect <ip>

adb_39

如果直接连接默认端口 5555 连接被拒绝,可以先连接 USB 指定端口号,然后连接,连接成功后可拔掉 USB

1
2
adb tcpip 5555
adb connect <ip>:5555

adb_40

断开连接

1
adb disconnect <ip>:5555

adb_41

十、小结

本文介绍了 ADB 的常用命令,熟练掌握 ADB 能大幅提升工作效率。当然,ADB 还有很多实用功能,可以自行去深入了解、探索。