测试基础 Android 测试之 adb 常用命令

xiaoxiao · 2019年09月10日 · 最后由 你来咬我啊 回复于 2019年09月10日 · 2751 次阅读

1、查看设备信息

  连接手机,终端执行命令adb devices,确保手机能连上电脑。
(1)方法一:通过adb devices -l查看设备信息;

(2)方法二:(推荐)通过adb shell getprop | grep product查看设备信息:

  而更详细的信息可以使用adb shell getprop查看全部信息。

2、安装/卸载 apk 应用

安装:adb install xxx/xx.apk或者adb install -r xxx/xx.apk,其中-r可选,表示保留数据和缓存文件重新安装,相当于强制覆盖安装。

卸载:adb uninstall com.package或者adb uninstall -k com.package,其中com.package是应用包名,可选参数-k表示保留配置和缓存文件。

3、导入/导出文件

导入:adb push xxx/xxx /sdcard/xxx

导出:adb pull /sdcard/xxx /xxx/xxx

4、adb 抓取日志

通过adb logcat可以抓取手机的实时日志,但是这样抓取的内容会非常非常之多,所以我们可以通过adb logcat | grep 'xxx'。前面的两个命令都会把所有结果输出到命令行中,实际使用中,我们往往需要导出保存到 log 文件中,则可以使用
adb logcat -v time > /xxx/xx.log
或者:
adb logcat -v time | grep 'xxx' > /xxx/xx.log
其中-v选项可以设置日志的输出信息。

5、获取当前 activity

(1)方法一 (推荐):adb shell dumpsys activity | grep "Run #"或者adb shell dumpsys activity | grep -i run,其中最大的编号为当前运行的前台 activity,其它为后台 resume 运行的 activity。

adb shell dumpsys activity | grep "Run #"
        Run #8: ActivityRecord{58eafc u0 com.tencent.mm/.ui.LauncherUI t144}
        Run #7: ActivityRecord{77d375b u0 com.android.mms/.ui.ConversationList t143}
        Run #6: ActivityRecord{18e093 u0 com.meizu.connectivitysettings/.Settings$WifiProxySettingsActivity t132}
        Run #5: ActivityRecord{dc8c307 u0 com.meizu.connectivitysettings/.Settings$WifiInfoSettingsActivity t132}
        Run #4: ActivityRecord{f99b13b u0 com.meizu.connectivitysettings/.Settings t132}
        Run #3: ActivityRecord{9d3e0da u0 com.android.settings/.Settings t132}
        Run #2: ActivityRecord{71a02cb u0 com.meizu.mstore/.page.search.SearchActivity t134}
        Run #1: ActivityRecord{c916ac5 u0 com.meizu.mstore/com.meizu.flyme.appcenter.activitys.AppMainActivity t134}
        Run #0: ActivityRecord{b1bf6ad u0 com.android.incallui/.InCallActivity t129}
        Run #0: ActivityRecord{969f985 u0 com.meizu.flyme.launcher/.Launcher t104}

  如上,Run #8 那一行就是当前我打开的微信首页 activity:com.tencent.mm/.ui.LauncherUI,其它为后台运行的应用。

(2)方法二:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

(3)方法三 (不推荐):adb shell dumpsys activity | grep "mFoc"

不推荐方法三的原因有两个:其一,只能获取得到当前前台的 activity,而获取不到 resume 后台运行的 activity;其二,在高版本的安卓系统中,运行此命令将无法获取到想要的结果。

6、启动 activity/退出应用

启动:adb shell am start -n com.package/com.activity,执行命令,将会启动应用,并跳转到指定的 activity 页面。

退出:adb shell am force-stop com.package,直接退出应用 (非后台)。

注意:如果想要后台应用,可以通过模拟按键事件,执行点击 Home 键adb shell input keyevent KEYCODE_HOMEadb shell input keyevent 3

7、获取应用启动时间

执行adb shell am start -W com.package/com.activity,会返回三个时间:ThisTime、TotalTime、WaitTime。每个时间含义都不同,一般以 TotalTime 为准。

  • ThisTime:一般和 TotalTime 时间一样,除非在应用启动时开了一个透明的 Activity 预先处理一些事再显示出主 Activity,这样将比 TotalTime 小。
  • TotalTime:应用的启动时间,包括创建进程 +Application 初始化 +Activity 初始化到界面显示,但不包括前一个应用 Activity pause 的时间。
  • WaitTime:一般比 TotalTime 大点,包括前一个应用 Activity pause 的时间和新应用启动的时间,以及系统影响的耗时。

8、查看应用的 cpu 和内存占用情况

8.1 查看 cpu

(1)方法一:

低版本 Android(Android N 及之前):adb shell top -n 1 | sed -n '4,17p'

高版本 ANdroid(Android O 及之后):adb shell top -n 1 | sed -n '5,15p'

(2)方法二:adb shell dumpsys cpuinfo

(3)方法三 (不推荐):adb shell top -m 10 -s cpu -n 2,其中,-m 10选项表示获取前 10 行数据,-s cpu表示根据 cpu 排序 (其它值为:vss,rss,thr),-n 2表示执行 2 次。

 参数含义:

PID   进程id
PR    优先级
CPU%  当前瞬时CPU占用率
S     进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
#THR  程序当前所用的线程数
VSS   Virtual Set Size  虚拟耗用内存(包含共享库占用的内存)
RSS   Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PCY   调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
UID   进程所有者的用户id
Name  进程的名称

注意:之所以不推荐方法三,是因为在高版本 Android 中,top 命令的选项已经不同于低版本 Android 的了,执行方法三的命令会直接报错:top: not integer: cpu。具体情况在实际使用中,可以先使用adb shell top --help查看 top 命令支持哪些选项参数。

注意:不同方法可能获取到的 cpu 数据将会差别很大。瞬时数据以 top 为准;而 cpuinfo 取的是一段时间的平均 cpu 值,而且受其他命令影响大,尤其是 dumpsys meminfo,所以一般优先执行 dumpsys cpuinfo。建议用 busybox top -b -n 1,单次抓取,比系统带的快,计算精度高一位。

参考:android 端取 cpu,fps,men,wifi/gprs 流量等值

8.2 查看内存

输入:adb shell dumpsys meminfo com.package

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

如果需要查看设备系统总内存及占用情况,可以使用adb shell cat /proc/meminfo查看。

9、获取单个应用的电量信息

从 android 5.0 开始,可以通过adb shell dumpsys batterystats com.package获取电量的相关信息。

10、清除应用的数据和缓存

执行:adb shell pm clear com.package

11、截取屏幕(截屏)和(录制屏幕)录屏

11.1 截屏

(1)方法一 (推荐):

执行:adb shell screencap -p /sdcard/1.png 保存图片到设备 sdcard

然后再执行adb pull /sdcard/1.png ~/xxx/ 把截图 pull 到电脑上。

(2)方法二:

Android 7.0 及以上:adb shell screencap -p > screen.png

Android 6.0:adb exec-out screencap -p > screen.png 或者 adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png

注意:低版本 Android 可能用此方法保存的图片是损坏的,因此推荐使用方法一。

11.2 录屏

对于 Android4.4 以上的手机,系统自带了一个命令 screenrecord,我们可以很方便的使用。

录屏命令:adb shell screenrecord /sdcard/test.mp4

命令执行后会一直录制 180s,按下 ctrl+c 可以提前结束录制。

通过adb shell screenrecord --help命令我们可以查看到--size--bit-rate--bugreport--time-limit--verbose--help

参数--size设定视频分辨率 (默认是手机设备的分辨率):

adb shell screenrecord --size 1280*720 /sdcard/test.mp4 # 录屏,保存视频的分辨率为 1280*720

参数--bit-rate设定视频比特率 (默认 4M/s,对应数字:4000000):

adb shell screenrecord --bit-rate 2000000 /sdcard/test.mp4 # 录屏,保存视频的比特率为 2M/s

参数–time-limit N设定录制时间:

adb shell screenrecord /sdcard/test.mp4 --time-limit 10 # 录屏 10s

注意:仅支持 mp4 视频格式。

12、input 模拟事件

通过adb shell input --help我们可以看到,input 相关的命令有以下几种:

text <string> (Default: touchscreen)  
keyevent [--longpress] <key code number or name> ... (Default: keyboard)  
tap <x> <y> (Default: touchscreen)  
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)  
draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)  
press (Default: trackball)  
roll <dx> <dy> (Default: trackball)  
tmode <tmode>  

text:输入文本

keyevent:功能键

tap:点击

swipe:滑动 (长按)

draganddrop:拖拽

press:发送点击按压命令

roll:发送滚动命令

12.1 keyevent 事件

发送事件:adb shell input keyevent key_code

发送文本信息:adb shell input text "xxx"

例如:

adb shell input keyevnet 3 # 点击 home 键操作

adb shell input keyevent 4 # 点击返回键操作

adb shell input keyevent 8 # for key '1'

adb shell input keyevent 29 # for key 'A'

adb shell input text “hello” # 发送文本 “hello”
常用的 key_code 主要有:
0 --> "KEYCODE_UNKNOWN"
1 --> "KEYCODE_MENU"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3“
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER"
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER"
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "TAG_LAST_KEYCODE"

12.2 text 发送文本

在设备光标处于编辑框时,通过adb shell text input "hello"可以将内容填写到编辑框,模拟键盘输入。

12.3 tap 点击坐标点

点击 x,y 坐标点位置:adb shell input tap 50 100 # 点击坐标点 (50, 100)

12.4 swipe 滑动 (长按)

滑动坐标点 (x1,y1) 到 (x2,y2):adb shell input swipe 10 20 100 200 # 从 (10,20) 滑动到 (100,200)

也可以添加滑动时间 (单位:ms):adb shell input swipe 10 20 100 200 500 # 从 (10,20) 滑动到 (100,200),滑动时间 500ms

长按操作:
adb shell input swipe 100 200 100 200 1200 # 从 (100,200) 滑动到 (100,200),滑动时间 1200ms,相当于长按一个坐标点 1200ms

13、通过 WiFi 连接设备

1.手机通过 USB 连接上电脑,然后输入:adb devices,确保设备已经连接上电脑。

2.确保设备和 PC 连接同一个 WiFi 网络环境,并查看 Android 设备的 IP 地址,然后输入:adb connect xx.xx.xx.xx

(1)如果现实连接成功,则断开 USB,即可通过 adb 继续操作设备;

(2)如果提示 connect 拒绝,输入adb tcpip 5555重启 adb,然后再次执行adb connect xx.xx.xx.xx

3.断开连接:adb disconnect

14、其它一些常用命令

查看屏幕分辨率:adb shell wm size 或者 adb shell dumpsys window displays

查看系统版本:adb shell getprop ro.build.version.release

查看系统 api 版本:adb shell getprop ro.build.version.sdk

查看手机 IP 地址:adb shell ifconfig | grep 'inet addr:' | sed -n '2p' | awk '{print $2}' | cut -d ':' -f 2

共收到 2 条回复 时间 点赞

总结的挺全

2楼 已删除

可以 很详细

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册