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

xiaoxiao · September 10, 2019 · Last by qinqingdao replied at September 10, 2019 · 497 hits

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 条回复 时间 点赞

总结的挺全

2Floor has been deleted

可以 很详细

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up