常用ADB命令使用和adblogcat命令行用法monkey压力测试

常用ADB命令使用和adblogcat命令行用法monkey压力测试

2023年7月10日发(作者:)

常⽤ADB命令使⽤和adblogcat命令⾏⽤法monkey压⼒测试

⼀、常ADB命令1. adb连接成功验证

命令:adb shell

命令:adb devices2.使⽤adb安装、卸载应⽤安装命令:adb install apk包名.apk举例:安装测试电池曲线的APK卸载命令:adb uninstall apk包名.apk3.使⽤adb复制⽂件从⼿机到电脑从⼿机复制到电脑命令:adb pull (⽂件⼿机路径) (电脑保存路径)举例:adb pull sdcard/mtklog d:mtklog

4.使⽤adb抓取LOG抓取所有LOG命令:adb logcat –v time > D:抓取应⽤层LOG命令:adb logcat –b main –v time >D:抓取死机、重启LOG命令: adb shell dumpsys > d:/

5.使⽤adb重启⼿机命令:adb reboot6.查看⼿机应⽤版本号命令:adb shell

dumpsys package qq | grep version ⼆、项⽬测试中使⽤1.测试系统apk占⽤ 命令:adb shell Top –m 5 –t

查看当前⼿机焦点activity⽅法:adb shell dumpsys activity | find "mF"adb shell dumpsys activity | grep -i runadb shell dumpsys window windows | grep mCurrent2.测试单个应⽤启动速度 命令:adb shell dumpsys window w |findstr |findstr name=adb shell am start -W -n qq/ctivity3.获取应⽤的内存消耗: 单个应⽤内存消耗命令:adb shell dumpsys meminfo qq系统所有应⽤内存消耗命令: adb shell dumpsys meminfo

adb shell bugreport

当我们⼿机突然报错或者anr 直接终端输⼊adb shell bugreport就会打印出相对⽐较全的⽇志信息。adb shell dmesg

⼿机查看内核信息可以使⽤此命令

三、注意事项连接 USB连接⼿机后,发现ADB连接不上 命令:adb kill-server adb start-server2. adb pull命令使⽤ a,复制⼿机⽂件夹到电脑,电脑路径名⼀定要是⽂件夹 b,复制⼿机⽂件或者APK,电脑路径⼀定要是已在电脑建⽴的⽂件夹名 四、⾮常规ADB命令使⽤列出⼿机装的所有app的包名:adb shell pm list packages列出系统应⽤的所有包名:adb shell pm list packages -s列出除了系统应⽤的第三⽅应⽤包名:adb shell pm list packages -3

列出⼿机每个包的⽂件位置:adb shell pm list packages -f

列出⼿机禁⽌的应⽤的包名(停⽤):adb shell pm list packages -d

列出⼿机可⽤的应⽤的包名:adb shell pm list packages -e

查看到引⽤的安装者:adb shell pm list packages -i

PM清除应⽤数据:pm clear

pm禁⽌与启⽤应⽤pm enable

pm disable

应⽤默认安装位置控制

pm set install locate 0:⾃动:让系统决定最好的位置1:内部存储:安装在内部设备上的存储2:外部存储:安装在外部媒体

返回当前安装位置pm get install locate

获取 MAC 地址$adb shell cat /sys/class/net/wlan0/addressbc:f5:ac:f9:f7:c8查看设备型号adb shell getprop 查看 Android 系统版本adb shell getprop e查看屏幕分辨率adb shell wm sizePhysical size: 1080×1920复制电脑⽂件 到⼿机Adb push (⽂件)(⼿机路径)

adb logcat 命令格式 : adb logcat [选项] [过滤项], 其中 选项 和 过滤项 在 中括号 [] 中, 说明这是可选的;

(1) 选项解析

选项解析 :

-- "-s"选项 : 设置输出⽇志的标签, 只显⽰该标签的⽇志;--"-f"选项 : 将⽇志输出到⽂件, 默认输出到标准输出流中, -f 参数执⾏不成功;--"-r"选项 : 按照每千字节输出⽇志, 需要 -f 参数, 不过这个命令没有执⾏成功;--"-n"选项 : 设置⽇志输出的最⼤数⽬, 需要 -r 参数, 这个执⾏ 感觉 跟 adb logcat 效果⼀样;--"-v"选项 : 设置⽇志的输出格式, 注意只能设置⼀项;--"-c"选项 : 清空所有的⽇志缓存信息;--"-d"选项 : 将缓存的⽇志输出到屏幕上, 并且不会阻塞;--"-t"选项 : 输出最近的⼏⾏⽇志, 输出完退出, 不阻塞;--"-g"选项 : 查看⽇志缓冲区信息;--"-b"选项 : 加载⼀个⽇志缓冲区, 默认是 main, 下⾯详解;--"-B"选项 : 以⼆进制形式输出⽇志;

.输出指定标签内容 :

-- "-s"选项 : 设置默认的过滤器, 如 我们想要输出 "" 标签的信息, 就可以使⽤adb logcat -s 命令;

[plain]

1. octopus@octopus:~$ adb logcat -s

2. --------- beginning of /dev/log/system

3. --------- beginning of /dev/log/main

4. I/(22930): GSM -91

5. I/(22930): SignalStrength issssssssss : -91

6. I/(22930): GSM -91

7. I/(22930): SignalStrength issssssssss : -91

8. I/(22930): Supervisor Thread

9. I/(22930): Got run mode

输出⽇志信息到⽂件 :

-- "-f"选项 : 该选向后⾯跟着输⼊⽇志的⽂件, 使⽤adb logcat -f /sdcard/ 命令, 注意这个log⽂件是输出到⼿机上,需要指定合适的路径。

[plain]

1. octopus@octopus:~$ adb logcat -f /sdcard/

这个参数对对不能⼀直⽤电脑连着⼿机收集⽇志的场景⾮常有⽤,其实 shell下也有⼀个相同参数的logcat命令。使⽤如下命令可以执⾏后断开PC和⼿机持续收集LOG。 [plain]

1. shell@pc$ adb shell

2. shell@android$ logcat -f /sdcard/ & #这⾥的&符号表⽰后台执⾏,别少了。

3. shell@android$ exit

注:

(1)以上shell@pc$ 指在pc的shell终端执⾏后边的命令, shell@android$ 表⽰在⼿机shell中执⾏后边的命令l

(2)⼀定注意合适的时候需要停⽌掉以上命令,否则再次使⽤相同命令的时候,就会有两个logcat写同⼀个⽂件了 停⽌⽅法: adb shell kill -9

其中logcat_pid 通过 如下命令获取 adb shell ps | grep logcat # 平台 adb shell ps | findstr "logcat" #Windows平台

-- ">"输出 : ">" 后⾯跟着要输出的⽇志⽂件, 可以将 logcat ⽇志输出到⽂件中, 使⽤adb logcat > log 命令, 使⽤more log 命令查看⽇志信息;

[plain]

1. octopus@octopus:~$ adb logcat > log

2. ^C

3. octopus@octopus:~$ more log

4. --------- beginning of /dev/log/system

5. V/ActivityManager( 500): We have pending thumbnails: null

6. V/ActivityManager( 500): getTasks: max=1, flags=0, receiver=null

7. V/ActivityManager( 500): gs/.Settings: task=TaskRecord{42392278 #448 A gs U 0}

8. V/ActivityManager( 500): We have pending thumbnails: null

-- " -d -f " 组合命令:可以将⽇志保存到⼿机上的指定位置,对不能⼀直⽤电脑连着⼿机收集⽇志的场景⾮常有⽤。[plain]

1. adb logcat -d -v /sdcard/

指定 logcat 的⽇志输出格式 :

-- "-v"选项 : 使⽤adb logcat -v time 命令, 可以啥看⽇志的输出时间; 使⽤adb logcat -v threadtime 命令, 可以啥看⽇志的输出时间和线程信息;-- "brief"格式 : 这是默认的⽇志格式" 优先级 / 标签 (进程ID) : ⽇志信息 ", 使⽤adb logcat -v prief 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v brief

2. --------- beginning of /dev/log/system

3. D/PowerManagerService( 500): handleSandman: canDream=true, mWakefulness=Awake

4. D/PowerManagerService( 500): releaseWakeLockInternal: lock=1101267696, flags=0x0

-- "process"格式 : " 优先级 (进程ID) : ⽇志信息 ", 使⽤adb logcat -v process 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v process

2. --------- beginning of /dev/log/system

3. D( 500) MobileDataStateReceiver received: ACTION_ANY_DATA_CONNECTION_STATE_CHANGED_MOBILE [wap] (MobileDataStateTracker) 4. V( 500) Broadcast: Intent { act=_DATA_STATE_MOBILE flg=0x10 (has extras) } ordered=true userid=0 (ActivityManager)

5. D( 500) wap: Intent from SIM 0, current SIM 0, current DataState DISCONNECTED (MobileDataStateTracker)

6. D( 500) wap: wap setting isAvailable to false (MobileDataStateTracker)

7. D( 500) wap: Received state=DISCONNECTED, old=DISCONNECTED, reason=dataDetached (MobileDataStateTracker)

8. D( 500) BDC-Calling finishReceiver: IIntentReceiver=41c46ba0 (ActivityThread)

-- "tag"格式 : " 优先级 / 标签 : ⽇志信息", 使⽤adb logcat -v tag 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v tag

2. --------- beginning of /dev/log/system

3. I/PowerManagerService: setBrightness mButtonLight 0.

4. D/PowerManagerService: updateScreenStateLocked: mDisplayReady=true, newScreenState=2, mWakefulness=1, mWakeLockSummary=0x1, mUserActivitySummary=05. D/PowerManagerService: handleSandman: canDream=true, mWakefulness=Awake

-- "thread"格式 : " 优先级 ( 进程ID : 线程ID) 标签 : ⽇志内容 ", 使⽤adb logcat -v tag 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v thread

2. --------- beginning of /dev/log/system

3. V( 500: 2141) getTasks: max=1, flags=0, receiver=null

4. V( 500: 2141) er/.Launcher: task=TaskRecord{41dccc20 #425 A er U 0}

5. V( 500: 2141) We have pending thumbnails: null

6. V( 500: 2140) getTasks: max=1, flags=0, receiver=null

-- "raw"格式 : 只输出⽇志信息, 不附加任何其他 信息, 如 优先级 标签等, 使⽤adb logcat -v raw 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v raw

2. --------- beginning of /dev/log/system

3. notifications are enabled for ty

4. Assigned score=0 to Notification(pri=0 contentView=ty/0x7f030052 vibrate=null sound=null defaults=0x0 flags=0x2 kind=[null])

5. Native set alarm :Alarm{41e1ca00 type 3 ty}

6. reset poweroff alarm none

-- "time"格式 : "⽇期 时间 优先级 / 标签 (进程ID) : 进程名称 : ⽇志信息 ", 使⽤adb logcat -v time 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v time

2. --------- beginning of /dev/log/system

3. 04-25 17:18:13.019 V/ActivityManager( 500): Broadcast sticky: Intent { act=_STR flg=0x10 (has extras) } ordered=false userid=-1

4. 04-[null])

5. 04-25 17:18:13.158 V/NotificationService( 500): notifications are enabled for ty

6. 04-[null])

7. 04-25 17:18:13.555 V/ActivityManager( 500): getTasks: max=1, flags=0, receiver=null

-- "long"格式:" [ ⽇期 时间 进程ID : 线程ID 优先级 / 标签] ⽇志信息 ", 输出以上提到的所有的头信息, 使⽤adb logcat -v long 命令;

[plain]

1. octopus@octopus:~$ adb logcat -v long

2. --------- beginning of /dev/log/system

3. [ 04-25 17:21:18.118 500:0x2fe V/ActivityManager ]

4. We have pending thumbnails: null

5.

6. [ 04-25 17:21:18.696 593:0x251 W/ActivityThread ]

7. Content provider onyProvider already published as telephony

8.

25 17:18:13.157 V/NotificationService( 500): enqueueNotificationInternal: pkg=ty id=1020 notification=Notification(pri=0 contentView=25 17:18:13.158 V/NotificationService( 500): Assigned score=0 to Notification(pri=0 contentView=ty/0x7f030052 vibrate=null sound=null default9. [ 04-25 17:21:19.119 500:0x396 V/ActivityManager ]

10. getTasks: max=1, flags=0, receiver=null

清空⽇志缓存信息 : 使⽤ adb logcat -c 命令, 可以将之前的⽇志信息清空, 重新开始输出⽇志信息;将缓存⽇志输出 : 使⽤ adb logcat -d 命令, 输出命令, 之后推出命令, 不会进⾏阻塞;

输出最近的⽇志 : 使⽤adb logcat -t 5 命令, 可以输出最近的5⾏⽇志, 并且不会阻塞;

[plain]

1. octopus@octopus:~$ adb logcat -t 5

2. --------- beginning of /dev/log/system

3. --------- beginning of /dev/log/main

4. W/ADB_SERVICES(10028): adb: unable to open /proc/10028/oom_adj

5. D/dalvikvm(23292): threadid=11: created from interp

6. D/dalvikvm(23292): start new thread

7. D/dalvikvm(23292): threadid=11: notify debugger

8. D/dalvikvm(23292): threadid=11 (Thread-24538): calling run()

9. octopus@octopus:~$

查看⽇志缓冲区信息 : 使⽤ adb logcat -g 命令;

[plain]

1. octopus@octopus:~$ adb logcat -g

2. /dev/log/main: ring buffer is 256Kb (255Kb consumed), max entry is 5120b, max payload is 4076b

3. /dev/log/system: ring buffer is 256Kb (255Kb consumed), max entry is 5120b, max payload is 4076b

4. octopus@octopus:~$

加载⽇志缓冲区 : 使⽤ adb logcat -b 缓冲区类型 命令;-- Android中的⽇志缓冲区 : system缓冲区 - 与系统相关的⽇志信息, radio缓冲区 - ⼴播电话相关的⽇志信息, events缓冲区 - 事件相关的⽇志信息, main缓冲区 - 默认的缓冲区;

[plain]

1. octopus@octopus:~$ adb logcat -b radio -t 5

2. D/PHONE (23599): [GeminiDataSubUtil] UAPP_C6-4

3. D/GSM (23599): [GDCT][simId1]apnType = default

4. D/GSM (23599): [GDCT][simId1]isDataAllowed: not allowed due to - gprs= 1 - SIM not loaded - desiredPowerState= false

5. D/GSM (23599): [GDCT][simId1]isDataPossible(default): possible=false isDataAllowed=false apnTypePossible=true apnContextisEnabled=true apnContextState()=IDLE

6. I/MUXD (23591): [gsm0710muxd] 3426:main(): Frames received/dropped: 18242/0

7. octopus@octopus:~$

8. octopus@octopus:~$ adb logcat -b main -t 5

9. D/NotificationService( 500): =null

10. D/NotificationService( 500): mDmLock=false

11. I/ATCIJ (16576): Couldn't find 'atci-serv-fw' socket; retrying after timeout

12. W/ADB_SERVICES( 246): create_local_service_socket() name=shell:export ANDROID_LOG_TAGS="" ; exec logcat -b main -t 5

13. W/ADB_SERVICES(16815): adb: unable to open /proc/16815/oom_adj

14. octopus@octopus:~$

15. octopus@octopus:~$ adb logcat -b system -t 5

16. D/PowerManagerService( 500): updateScreenStateLocked: mDisplayReady=true, newScreenState=0, mWakefulness=0, mWakeLockSummary=0x1, mUserActivitySumm17. D/PowerManagerService( 500): handleSandman: canDream=false, mWakefulness=Asleep

18. V/NotificationService( 500): enqueueNotificationInternal: pkg=ty id=1020 notification=Notification(pri=0 contentView=ty/0x7f03[null])

19. V/NotificationService( 500): notifications are enabled for ty

20. V/NotificationService( 500): Assigned score=0 to Notification(pri=0 contentView=ty/0x7f030052 vibrate=null sound=null defaults=0x0 flags=0x2

[null])

21. octopus@octopus:~$ 22. octopus@octopus:~$ adb logcat -b event -t 5

23. Unable to open log device '/dev/log/event': No such file or directory

24. octopus@octopus:~$ adb logcat -b events -t 5

25. I/notification_cancel( 500): [ty,1026,NULL,0,0,64]

26. I/notification_enqueue( 500): [ty,1020,NULL,0,Notification(pri=0 contentView=ty/0x7f030052 vibrate=null sound=null defaults=[null])]

27. I/notification_cancel( 500): [ty,1026,NULL,0,0,64]

28. I/notification_enqueue( 500): [ty,1020,NULL,0,Notification(pri=0 contentView=ty/0x7f030052 vibrate=null sound=null defaults=[null])]

29. I/notification_cancel( 500): [ty,1026,NULL,0,0,64]

30. octopus@octopus:~$

以⼆进制形式输出⽇志 : 使⽤ adb logcat -B 命令;

[plain]

1. octopus@octopus:~$ adb logcat -B -t 5

2. O��_�3ZS�4gps_mt3326nmea_reader_parse: line = 1218GPS get accuracy failed, fix mode:1

3. ^��_�3ZS�=gps_mt3326nmea_reader_addc: line = 1331the structure include nmea_cb address is 0x658cc8e8

4. H��_�3ZSEGEgps_mt3326nmea_reader_addc: line = 1332nmea_cb address is 0x5d2fe279

5. i���3ZS�)>ADB_SERVICEScreate_local_service_socket() name=shell:export ANDROID_LOG_TAGS="" ; exec logcat -B -t 5

6. 7*E*E�3ZSo�YADB_SERVICESadb: unable to open /proc/17706/oom_adj

(2) 过滤项解析

过滤项格式 : [:priority] , 标签:⽇志等级, 默认的⽇志过滤项是 " *:I " ;-- V : Verbose (明细);-- D : Debug (调试);-- I : Info (信息);-- W : Warn (警告);-- E : Error (错误);-- F: Fatal (严重错误);-- S : Silent(Super all output) (最⾼的优先级, 可能不会记载东西);

过滤指定等级⽇志 : 使⽤ adb logcat 10 *:E 命令, 显⽰ Error 以上级别的⽇志;

[plain]

1. octopus@octopus:~$ adb logcat *:E

2.

3. Note: log switch off, only log_main and log_events will have logs!

4. --------- beginning of /dev/log/main

5. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

6. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

7. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

8. E/dalvikvm( 756): GC_CONCURRENT freed 1809K, 27% free 19489K/26695K, paused 16ms+5ms, total 109ms

9. E/WifiHW ( 441): wifi_send_command : SCAN ; interface index=0;

10. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

11. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

12. E/dalvikvm( 756): GC_CONCURRENT freed 1820K, 27% free 19490K/26695K, paused 16ms+3ms, total 102ms

13. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

14. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

过滤指定标签等级⽇志 : 使⽤ adb logcat WifiHW:D *:S 命令进⾏过滤; -- 命令含义 : 输出10条⽇志, ⽇志是 标签为 WifiHW, 并且优先级 Debug(调试) 等级以上的级别的⽇志;--注意 *:S : 如果没有 *S 就会输出错误;

[plain]

1. octopus@octopus:~$ adb logcat WifiHW:D *:S

2.

3. Note: log switch off, only log_main and log_events will have logs!

4. --------- beginning of /dev/log/main

5. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

6. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

7. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

8. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

9. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

10. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

11. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

可以同时设置多个过滤器 : 使⽤adb logcat WifiHW:D dalvikvm:I *:S 命令, 输出 WifiHW 标签 的 Debug 以上级别 和 dalvikvm 标签的 Info 以上级别的⽇志;

[plain]

1. octopus@octopus:~$ adb logcat WifiHW:D dalvikvm:I *:S

2.

3. Note: log switch off, only log_main and log_events will have logs!

4. --------- beginning of /dev/log/main

5. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

6. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

7. E/dalvikvm( 756): GC_CONCURRENT freed 1820K, 27% free 19490K/26695K, paused 17ms+2ms, total 110ms

8. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

9. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

10. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

11. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

12. E/dalvikvm( 756): GC_CONCURRENT freed 1810K, 27% free 19489K/26695K, paused 17ms+5ms, total 108ms

13. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

14. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

2. 使⽤管道过滤⽇志

(1) 过滤固定字符串

过滤固定字符串 : 只要命令⾏出现的⽇志都可以过滤, 不管是不是标签;-- 命令 : adb logcat | grep Wifi ;

[plain]

1. octopus@octopus:~$ adb logcat | grep Wifi

2. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

3. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

4. E/WifiHW ( 441): wifi_send_command : SCAN ; interface index=0;

5. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0; 6. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

7. E/WifiHW ( 441): wifi_send_command : AP_SCAN 1 ; interface index=0;

8. E/WifiHW ( 441): wifi_send_command : SCAN_RESULTS ; interface index=0;

过滤字符串忽略⼤⼩写 : adb logcat | grep -i wifi ;

(2) 使⽤正则表达式匹配

分析⽇志 : 该⽇志开头两个字符是 "V/", 后⾯开始就是标签, 写⼀个正则表达式 "^..ActivityManager", 就可以匹配⽇志中的 "V/ActivityManager" 字符串;

[plain]

1. V/ActivityManager( 574): getTasks: max=1, flags=0, receiver=null

正则表达式过滤⽇志: 使⽤上⾯的正则表达式组成命令 adb logcat | grep "^..Activity" ;

log的⽅式如下:Android系统下:

1:adb logcat -b main -v time> 打印应⽤程序的log2:adb logcat> ⽇志的抓取3:adb logcat -b events -v time 打印系统事件的⽇志,⽐如触屏事件。。。4:adb bugreport> 状态信息抓取5:adb shell dmesg > ldmesg_ kernel的log抓取6:dmesg | grep “xxxxx” ⽤于log出指定的程序⽇志

状态信息:其实⼀个就够了,那就是bugreport(命令adb bugreport>)。⾥⾯包含有dmesg,dumpstate和dumpsys。dmesg(命令adb shell dmesg >ldmesg_)是kernel的log,凡是跟kernel相关的,⽐如driver出了问题(相机,蓝⽛,usb,启动,等等吧)。 dumpstate是系统状态信息,⾥⾯⽐较全,包括⼿机当前的内存信息、cpu信息、logcat缓存,kernel缓存等等。adb shell dumpsys这个是关于系统service的内容都在这个⾥⾯,这个命令还有更详尽的⽤法,⽐如db shelldumpsys meminfo system是查看system这个process的内存信息。

Monkey 参数⼤全 Monkey 命令 基本参数介绍-p <允许的包名列表>

⽤此参数指定⼀个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。

指定⼀个包:adb shell monkey -p 100

指定多个包:adb shell monkey -p –p 100

-v

⽤亍指定反馈信息级别(信息级别就是⽇志的详细程度),总共分3个级别,分别对应的参数如下 表所⽰:

Level 0 : adb shell monkey -p -v 100 // 缺省值,仅提供启动提⽰、测试完成和最终结果等少量信息

Level 1 : adb shell monkey -p -v -v 100 // 提供较为详细的⽇志,包括每个发送到Activity的事件信息Level 2 : adb shell monkey -p -v -v -v 100 // 最详细的⽇志,包括了测试中选中/未选中的Activity信息-s(随机数种⼦)

⽤亍指定伪随机数⽣成器的seed值,如果seed相同,则两次Monkey测试所产⽣的事件序列也相同的。 ⽰例:monkey测试1:adb shell monkey -p –s 10 100

monkey测试2:adb shell monkey -p –s 10 100

--throttle <毫秒>

⽤亍指定⽤户操作(即事件)间的时延,单位是毫秒;如果丌指定这个参数,monkey会尽可能快的 ⽣成和发送消息。 ⽰例:adb shell monkey -p --throttle 3000 100

Monkey 实例⽤monkey 命令 对上海公交 app进⾏ 性能测试adb shell monkey –p –-throttle 100 –-pct-touch 50 –-pct-motion 50 –v –v 1000 >c:

Monkey 查看包名⼿机中安装APK包名查看器

源码下的⽂件查看

aapt命令查看

Monkey ⽇志分析正常情况, 如果Monkey测试顺利执⾏完成, 在log的最后, 会打印出当前执⾏事件的次数和所花费的时间; // Monkey finished 代表执⾏完成

异常情况Monkey 测试出现错误后,⼀般的分析步骤看Monkey的⽇志 (注意第⼀个swith以及异常信息等)1. 程序⽆响应的问题: 在⽇志中搜索 “ANR”2. 崩溃问题:在⽇志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bugMonkey 执⾏中断, 在log最后也能看到当前执⾏次数

必须重视Crash

虽然Monkey测试有部分缺陷,我们⽆法准确地得知重现步骤, Monkey测试所出现的NullPointException, 都是可以在⽤户使⽤时出现的, 何时出现只是时间问题理论上来说, Monkey所有的Crash 都需要在发布前修复掉

测试步骤:1.安装ADB2.连接被测⼿机和电脑3.打开CMD命令⾏4.输⼊monkey命令

⼀.monkey测试命令有哪些选项?

1:常⽤选项--help:打印帮助信息-v:指定打印信息的详细级别,⼀个 -v增加⼀个级别 , 默认级别为 0 。-v -v -v 为最详细⽇志。2:时间选项-s:指定产⽣随机事件种⼦值,相同的种⼦值产⽣相同的事件序列。如: -s 200--throttle:每个事件结束后的间隔时间——降低系统的压⼒(如不指定,系统会尽快的发送事件序列)。如:--throttle 100--pct-touch:指定触摸事件的百分⽐,如:--pct-touch 5% , 相关的还有以下option:--pct-motion (滑动事件)--pct-trackball (轨迹球事件)--pct-nav (导航事件 up/down/left/right)--pct-majornav (主要导航事件 back key 、 menu key)--pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)--pct-appswitch (activity之间的切换)--pct-anyevent (任意事件)3:约束选项-p:指定有效的package(如不指定,则对系统中所有package有效),⼀个-p 对应⼀个有效package, 如:-p -p ;-c:activity必须⾄少包含⼀个指定的category,才能被启动,否则启动不了;4:调试选项--dbg-no-events:初始化启动的activity,但是不产⽣任何事件。--hprof:指定该项后在事件序列发送前后会⽴即⽣成分析报告 —— ⼀般建议指定该项。--ignore-crashes:忽略崩溃--ignore-timeouts:忽略超时--ignore-security-exceptions:忽略安全异常--kill-process-after-error:发⽣错误后直接杀掉进程--monitor-native-crashes:跟踪本地⽅法的崩溃问题--wait-dbg:知道连接了调试器才执⾏monkey。⼆.⼀个完整的monkey语句?adb shell monkey -p --pct-touch 30 --ignore-crashes --ignore-timeouts--throttle 250 -s 2 -v -v -v 5000000触摸事件占30%,忽略crash和超时,每个事件间隔250ms,输出最详细⽇志,执⾏500万次三.如何保存不连着电脑跑monkey?1.输⼊命令进⼊shell环境:adb shell2.输⼊monkey语句执⾏:monkey –p –s 100 --throttle 1000 –v –v –v 15000 > /mnt/sdcard/monkey_&四.如何跑多个apk的monkey?⿊名单:执⾏除了⿊名单中以外的apk;⽩名单:只执⾏在⽩名单中的apk。⿊名单的设置⽅法:a.创建⼀个名称为blacklist的txt⽂档,在⽂件中输⼊应⽤程序的包名,如mms应⽤,则在⽂件中输⼊s;如果有多个应⽤程序不想被执⾏,则在⽂件中添加多个包名,注意包名与包名之间均⽤回车键。b.将的⽂件导⼊到⼿机的/data⽬录下,然后在执⾏monkey测试的时候使⽤--pkg-blacklist-file参数再加上blacklist⽂件的存储路径,其他的参数设置则和测试单⼀apk没有区别。⽩名单的设置⽅法:⽩名单的设置⽅法和⿊名单的设置⽅法基本⼀致,只是在创建txt⽂档的时候,⽂件的命令应为whitelist。在执⾏monkey的时候,只执⾏⽩名单中的应⽤。例⼦:monkey –pkg-blacklist-file /data/ -c -s <限制语句> --throttle -v 执⾏次数> C:blacklist_ //执⾏⿊名单以外的应⽤monkey –pkg-whitelist-file /data/ -c -s <限制语句> --throttle -v 执⾏次数 > C:whitelist_ //执⾏⽩名单的应⽤五.如何关闭mokey?1. ps命令查找uiautomator的进程cmd命令⾏窗⼝输⼊:adb shell ps | grep monkey返回来的第⼀个数字,即是monkey的进程号 命令结束进程继续输⼊: adb shell kill [刚才查到的进程号]六.如何分析monkey⽇志?1、 ANR问题:在⽇志中搜索“ANR”2、 崩溃问题:在⽇志中搜索“Exception”3、搜索"crash" 、"error"七.如何重现BUG?1、 找到是monkey⾥⾯的哪个地⽅出错2、 查看Monkey⾥⾯出错前的⼀些事件动作,并⼿动执⾏该动作3、 若以上步骤还不能找出,可以使⽤之前执⾏的monkey命令再执⾏⼀遍,注意seed值要⼀样⼋.monke的测试策略?单个apk的验收测试时,使⽤单⼀apk且不忽略异常的命令执⾏单个apk的解决问题的测试时,使⽤单⼀apk且忽略异常的命令执⾏。这样可以在⼀次执⾏的过程中发现应⽤程序中的多个问题。单个apk的应⽤程序的压⼒/健壮性测试时,主要缩短monkey测试中事件与事件之间的延迟时间,验证在快速的事件响应的过程中,程序是否能正常运⾏。将--throttle的值设定为500或者更⼩,⼀般都使⽤500毫秒的延迟事件。在进⾏apk的集合测试(测试对象为多个APP,⼿机测试?)时,对于⾼频率使⽤的apk、长时间使⽤的apk都要包含在执⾏的应⽤程序中间。APK分类具体:⾼频率使⽤的apk如:Phone、Contacts、Message、Settings、File Manager、Gallery、Input Method长时间使⽤的apk如:Phone、Browser、Music player、Camera、Video player、Email、Chat其他的apk如:Calendar、Notepad、Calculator、FM Radio、Google Search九.想不随机跑moneky,指定脚本跑monkey?

am命令有很多个参数及使⽤⽅法,具体可参考官⽅⽹站:am的⽤法列表如下:

[plain]

1. usage: am start [-D] [-W] [-P ] [--start-profiler ]

2. [--R COUNT] [-S] [--opengl-trace]

3. [--user | current]

4. am startservice [--user | current]

5. am force-stop [--user | all | current]

6. am kill [--user | all | current]

7. am kill-all

8. am broadcast [--user | all | current]

9. am instrument [-r] [-e ] [-p ] [-w]

10. [--user | current]

11. [--no-window-animation]

12. am profile start [--user current] 13. am profile stop [--user current] []

14. am dumpheap [--user current] [-n]

15. am set-debug-app [-w] [--persistent]

16. am clear-debug-app

17. am monitor [--gdb ]

18. am screen-compat [on|off]

19. am display-size [reset|WxH]

20. am display-density [reset|DENSITY]

21. am to-uri [INTENT]

22. am to-intent-uri [INTENT]

23. am switch-user

24. am stop-user

下⾯只介绍am start 的⽤法

各条命令参数如下所⽰:

[plain]

1. specifications include these flags and arguments:

2. [-a ] [-d ] [-t ]

3. [-c [-c ] ...]

4. [-e|--es ...]

5. [--esn ...]

6. [--ez ...]

7. [--ei ...]

8. [--el ...]

9. [--ef ...]

10. [--eu ...]

11. [--ecn ]

12. [--eia [,

13. [--ela [,

14. [--efa [,

15. [-n ] [-f ]

16. [--grant-read-uri-permission] [--grant-write-uri-permission]

17. [--debug-log-resolution] [--exclude-stopped-packages]

18. [--include-stopped-packages]

19. [--activity-brought-to-front] [--activity-clear-top]

20. [--activity-clear-when-task-reset] [--activity-exclude-from-recents]

21. [--activity-launched-from-history] [--activity-multiple-task]

22. [--activity-no-animation] [--activity-no-history]

23. [--activity-no-user-action] [--activity-previous-is-top]

24. [--activity-reorder-to-front] [--activity-reset-task-if-needed]

25. [--activity-single-top] [--activity-clear-task]

26. [--activity-task-on-home]

27. [--receiver-registered-only] [--receiver-replace-pending]

28. [--selector]

29. [ | | ]

具体如何使⽤,还可以参考源代码,am.⽂件------------------------------------------2014.11.20 更新-------------------------

[java]

1. am broadcast -a eCameraService

启动nubia⼿机的抓拍功能

最新项⽬⾥⼀直在做 Android RIL ⽅⾯的研究,⾮常最终项⽬还是未能解决通信底层模块的问题,但是在使⽤adb抓log上还是有⼀些收获的,这⾥记录⼀下。

Log分类 Android⽇志主要分为kernel、radio、event、main这四种log。Kernel Log kernel log属于Linux内核的log ,可以通过读取/proc/kmsg或者通过串⼝来抓取。 adb 抓取kernel log的命令如下(需要有root权限):adb shell cat /proc/kmsg > /tmp/io Log -b radio参数可以抓取Android RIL层 log,在调试Android通信⽅⾯的代码时,这个Log⾮常关键。抓取命令如下:adb logcat -b radio > /tmp/n Log main log和我们在eclipse⾥通过DDMS中看到的log是⼀致的。抓取命令如下:adb logcat -b main > /tmp/nt Log event log属于system log,平时可以跟在main log之后。抓取命令如下:adb logcat -b event -v time > /tmp/ -v time表⽰在log中加⼊每条log发⽣的时间。完整Log adb logcat -b选项是可以复⽤的,因此我们抓取所有Log的命令就是复⽤了-b选项。抓取命令如下:adb logcat -b main -b system -b radio -b events -v time > /tmp/

git log --oneline --decoreate --graph --all 显⽰图形化提交⽇志。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688983023a191377.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信