一、简介
ADB 全称是 Android 调试桥(Android Debug Bridge),是一个命令行工具,作为 Android 和 PC 连接的桥梁,开发者可以通过 ADB 完成安装卸载应用,启动应用,调试程序,文件传输,获取系统配置,修改应用、系统配置等功能。本文目的是介绍一些常用的 ADB 命令,帮助大家在开发工作中提高效率。
二、ADB 服务
1.查看 ADB版本
2.启动 ADB 服务
执行其他部分连接 ADB 命令也会自动启动
3.关闭 ADB 服务
4.查看 ADB 帮助
有时候难免忘记具体命令,查看帮助是个不错的选择
三、设备管理
1.查看连接设备
可查看设备序列号和对应的设备状态
增加-l
查看设备更详细信息
2.shell 操作
进入到设备 shell,也可直接不进入在外面执行命令
多台设备时,通过-s
指定设备序列号执行
1
| adb -s <serial_number> shell
|
3.重启设备
正常重启
重启到 recovery
重启到 bootloader 界面
4.等待执行
1
| adb wait-for[-TRANSPORT]-STATE
|
STATE
: device
, recovery
, rescue
, sideload
, bootloader
, disconnect
TRANSPORT
: usb
, local
, any
(默认 any
)
如等待设备连接
5.root 权限
获取 root 权限,让 ADB 具备更高权限,执行高权限命令
注意:大部分手机设备是没有 root 的,该命令无法获取 root 权限,感兴趣可以尝试安装 ADBD Insecure
退出 root 权限
四、设备信息
1.设备序列号
与adb devices
获取到的序列号一致
2.设备状态
与adb devices
获取到的状态一致
常见的状态有:
- device:设备正常连接
- offline:设备连接异常,无响应
- unauthorized:未授权无法连接设备,USB 调试重新授权能解决部分该问题
- unknown:未知错误未连接设备
3.设备型号
设备型号存储在系统属性ro.product.model
。与adb devices -l
获取到的型号一致
查看所有系统属性,属性值很多,感兴趣可自行了解。开发者可通过SystemProperties
访问
4.手机 MAC 地址
需要 root 权限来查看文件
1
| adb shell cat /sys/class/net/wlan0/address
|
5.查看 wlan ip 地址
1
| adb shell ip addr show wlan0
|
6.蓝牙信息
蓝牙 MAC 地址
1
| adb shell settings get secure bluetooth_address
|
蓝牙名称
1
| adb shell settings get secure bluetooth_name
|
蓝牙开关,1 开启,0 关闭
1
| adb shell settings get global bluetooth_on
|
7.电池信息
1
| adb shell dumpsys battery
|
部分字段的含义如下:
字段 | 含义 |
---|
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 <width>x<height>
|
9.设备密度
查看密度,-d
多屏可指定屏幕,默认 0
1
| adb shell wm density [-d 0]
|
设置密度
1
| adb shell wm density <dp> [-d 0]
|
五、应用管理
1.安装应用
-r
:覆盖安装
-d
:降级安装
-g
:授予所有运行时权限
-t
:安装测试包
1
| adb install [-r] [-d] [-g] [-t] <apk_file>
|
2.卸载应用
1
| adb uninstall <package_name>
|
3.查看应用信息
查看应用所有信息,包含 Activity、Service、广播、权限、版本、安装路径等信息
1
| adb shell dumpsys package <package_name>
|
过滤应用版本信息
1
| adb shell dumpsys package <package_name> | grep version
|
查看设备上安装的所有应用,增加-f
可获取应用安装包路径
1
| adb shell pm list package/packages [-f]
|
查看正在运行的 Activity,先 dump Activity 信息,再通过sed
命令过滤
1
| adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
|
4.启动应用
通过 Activity 启动
1
| adb shell am start -n <component>
|
启动并显示启动耗时
1
| adb shell am start -W <component>
|
通过 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
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
|
所有进程的内存信息
1
| adb shell dumpsys meminfo
|
指定进程的内存详细信息
1
| adb shell dumpsys meminfo <process_name>
|
指定进程的内存值(即详细信息的 Pss TOTAL 值)
1
| adb shell dumpsys meminfo | grep <process_name> -m 1
|
10.抓取进程堆信息
抓取到的文件可通过 MAT 等工具来进行分析
1
| adb shell am dumpheap <pid> /data/local/tmp/<file_name>
|
11.监控 Activity
六、文件传输
1.从设备导出文件
默认存放在当前目录下
1
| adb pull <device_path> [dst_path]
|
2.把文件导入到设备
1
| adb push <src_path> <device_path>
|
七、日志查看
1.抓取日志
2.控制输出字段
-v
设置格式,常用的time
、thread
、threadtime
3.过滤日志
过滤日志级别(V-VERBOSE
、D-DEBUG
、I-INFO
、W-WARNING
、E-ERROR
、F-FATAL
)
1
| adb logcat *[:priority]
|
过滤日志 tag(实测这种方式效果不太好)
1
| adb logcat <tag>[:priority]
|
可以通过grep
过滤(推荐这种方法,过滤更灵活强大)
1
| adb logcat *[:priority] | grep <tag>
|
4.输出到文件
1
| adb logcat -f <dir_name>
|
或者重定向到文件
1
| adb logcat > <file_name>
|
5.指定缓存区
常见缓存区有main
、system
、events
、crash
、radio
等
6.缓存区大小
查看缓存区大小
设置缓存区大小,后缀M
或者K
,不是设置任何值都会生效(比如测试机在 64K - 231M)
7.清空日志缓冲区
八、模拟操作
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>
|
指定广播名发送广播,Android O 以上静态注册不能接收大部分隐式广播
1
| adb shell am broadcast -n <component>
|
还可以携带extra
、flag
之类的数据
1
| adb shell am broadcast -n <component> --es <string_key> "<string_value>" --ei <int_key> int_value --ez <bool_key> bool_value
|
6.屏幕截图
文件名后缀.png
将自动保存成 png 图片,或者添加-p
来保存,不支持其他格式
1
| adb shell [-p] screencap <save_path>
|
7.录制视频
1
| adb shell screenrecord [--size WIDTHxHEIGHT] [--bit-rate RATE] [--time-limit TIME] <save_path>
|
九、连接管理
无线连接
先保证 PC 和设备在同一局域网,然后通过四、设备信息-5.查看 wlan ip 地址
获取到设备 ip
如果直接连接默认端口 5555 连接被拒绝,可以先连接 USB 指定端口号,然后连接,连接成功后可拔掉 USB
1
2
| adb tcpip 5555
adb connect <ip>:5555
|
断开连接
1
| adb disconnect <ip>:5555
|
十、小结
本文介绍了 ADB 的常用命令,熟练掌握 ADB 能大幅提升工作效率。当然,ADB 还有很多实用功能,可以自行去深入了解、探索。