基本用法
为命令指定目标设备
adb [-d|-e|-s <serialNumber>] <command>
参数 | 含义 |
---|---|
-d | 指定当前唯一通过 USB 连接的 Android 设备为命令目标 |
-e | 指定当前唯一运行的模拟器为命令目标 |
-s <serialNumber> | 指定相应 serialNumber 号的设备/模拟器为命令目标 |
启动/停止
adb start-server
adb kill-server
查看 adb 版本
adb version
以 root 权限运行 adbd
adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。
但有些命令需要 root 权限才能执行。
adb root
adb unroot
指定 adb server 的网络端口
adb -P <port> start-server
默认端口为 5037。
设备连接管理
adb devices
输出格式为serialNumber 即 SN,state 有如下几种:
-
offline —— 表示设备未连接成功或无响应。
-
device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。
-
no device —— 没有设备/模拟器连接。
应用管理
查看应用列表
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
参数 | 显示列表 |
---|---|
无 | 所有应用 |
-f | 显示应用关联的 apk 文件 |
-d | 只显示 disabled 的应用 |
-e | 只显示 enabled 的应用 |
-s | 只显示系统应用 |
-3 | 只显示第三方应用 |
-i | 显示应用的 installer |
-u | 包含已卸载应用 |
<FILTER> | 包名包含 <FILTER> 字符串 |
安装 APK
adb install [-lrtsdg] <path_to_apk>
参数 | 含义 |
---|---|
-l | 将应用安装到保护目录 /mnt/asec |
-r | 允许覆盖安装 |
-t | 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用 |
-s | 将应用安装到 sdcard |
-d | 允许降级覆盖安装 |
-g | 授予所有运行时权限 |
--abi abi-identifier | 为特定 ABI 强制安装 apk,abi-identifier 可以是 armeabi-v7a、arm64-v8a、v86、x86_64 等 |
卸载应用
adb uninstall [-k] <packagename>
packagename 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。
清除应用数据与缓存
adb shell pm clear <packagename>
查看前台 Activity
adb shell dumpsys activity activities | grep mResumedActivity
查看正在运行的 Services
adb shell dumpsys activity services [<packagename>]
查看应用详细信息
adb shell dumpsys package <packagename>
查看应用安装路径
adb shell pm path <PACKAGE>
与应用交互
启动应用/ 调起 Activity
command | 用途 |
---|---|
start [options] <INTENT> | 启动 <INTENT> 指定的 Activity |
startservice [options] <INTENT> | 启动 <INTENT> 指定的 Service |
broadcast [options] <INTENT> | 发送 <INTENT> 指定的广播 |
force-stop <packagename> | 停止 <packagename> 相关的进程 |
参数 | 含义 |
---|---|
-a <ACTION> | 指定 action,比如 android.intent.action.VIEW |
-c <CATEGORY> | 指定 category,比如 android.intent.category.APP_CONTACTS |
-n <COMPONENT> | 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity |
adb shell am start [options] <INTENT>
调起 Service
adb shell am startservice [options] <INTENT>
# 显示虚拟按键
adb shell am startservice -n com.android.systemui/.SystemUIService
强制停止应用
adb shell am force-stop <packagename>
文件管理
复制设备里的文件到电脑
adb pull <设备里的文件路径> [电脑上的目录]
复制电脑里的文件到设备
adb push <电脑上的文件路径> <设备里的目录>
模拟按键/输入
adb shell input keyevent <keycode>
keycode | 含义 |
---|---|
3 | HOME 键 |
4 | 返回键 |
5 | 打开拨号应用 |
6 | 挂断电话 |
24 | 增加音量 |
25 | 降低音量 |
26 | 电源键 |
27 | 拍照(需要在相机应用里) |
64 | 打开浏览器 |
82 | 菜单键 |
85 | 播放/暂停 |
86 | 停止播放 |
87 | 播放下一首 |
88 | 播放上一首 |
122 | 移动光标到行首或列表顶部 |
123 | 移动光标到行末或列表底部 |
126 | 恢复播放 |
127 | 暂停播放 |
164 | 静音 |
176 | 打开系统设置 |
187 | 切换应用 |
207 | 打开联系人 |
208 | 打开日历 |
209 | 打开音乐 |
210 | 打开计算器 |
220 | 降低屏幕亮度 |
221 | 提高屏幕亮度 |
223 | 系统休眠 |
224 | 点亮屏幕 |
231 | 打开语音助手 |
276 | 如果没有 wakelock 则让系统休眠 |
滑动解锁
adb shell input swipe 300 1000 300 500
参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。
输入文本
adb shell input text hello
查看日志
Android 系统的日志分为两部分,底层的 Linux 内核日志输出到 /proc/kmsg,Android 的日志输出到 /dev/log。
Android 日志
[adb] logcat [<option>] ... [<filter-spec>] ...
按级别过滤日志
Android 的日志分为如下几个优先级(priority):
- V —— Verbose(最低,输出得最多)
- D —— Debug
- I —— Info
- W —— Warning
- E —— Error
- F —— Fatal
- S —— Silent(最高,啥也不输出)
按某级别过滤日志则会将该级别及以上的日志输出。
adb logcat *:W
会将 Warning、Error、Fatal 和 Silent 日志输出。
按 tag 和级别过滤日志
adb logcat ActivityManager:I MyApp:D *:S
表示输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。
清空日志
adb logcat -c
内核日志
adb shell dmesg
查看设备信息
型号
adb shell getprop ro.product.model
电池状况
adb shell dumpsys battery
屏幕分辨率
adb shell wm size
屏幕密度
adb shell wm density
显示屏参数
adb shell dumpsys window displays
android_id
adb shell settings get secure android_id
Android 系统版本
adb shell getprop ro.build.version.release
IP 地址
adb shell ifconfig | grep Mask
查看局域网 IP:
adb shell ifconfig wlan0
Mac 地址
adb shell cat /sys/class/net/wlan0/address
CPU 信息
adb shell cat /proc/cpuinfo
内存信息
adb shell cat /proc/meminfo
修改设置
修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 adb reboot 重启设备,或手动重启。
分辨率
adb shell wm size 480x1024
恢复原分辨率命令:
adb shell wm size reset
屏幕密度
adb shell wm density 160
恢复原屏幕密度命令:
adb shell wm density reset
显示区域
adb shell wm overscan 0,0,0,200
四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。
adb shell wm overscan reset
关闭 USB 调试模式
adb shell settings put global adb_enabled 0
实用功能
屏幕截图
截图保存到电脑:
adb exec-out screencap -p > sc.png
参数 | 含义 |
---|---|
-p | 指定保存文件为 png 格式 |
-d display-id | 指定截图的显示屏编号(有多显示屏的情况下) |
录制屏幕
录制屏幕以 mp4 格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
参数 | 含义 |
---|---|
--size WIDTHxHEIGHT | 视频的尺寸,比如 1280x720 ,默认是屏幕分辨率。 |
--bit-rate RATE | 视频的比特率,默认是 4Mbps。 |
--time-limit TIME | 录制时长,单位秒。 |
--verbose | 输出更多信息。 |
查看连接过的 WiFi 密码
注:需要 root 权限。
adb shell
su
cat /data/misc/wifi/*.conf
或者
adb shell
su
cat /data/misc/wifi/WifiConfigStore.xml
设置系统日期和时间
注:需要 root 权限。
adb shell
su
date -s 20160823.131500
表示将系统日期和时间更改为 2016 年 08 月 23 日 13 点 15 分 00 秒。
重启手机
adb reboot
检测设备是否已 root
adb shell
su
此时命令行提示符是 $ 则表示没有 root 权限,是 # 则表示已 root。
使用 Monkey 进行压力测试
Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。
adb shell monkey -p <packagename> -v 500
monkey
开启/关闭 WiFi
注:需要 root 权限。
开启 WiFi:
adb root
adb shell svc wifi enable
关闭 WiFi:
adb root
adb shell svc wifi disable
参考
adb