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
返回当前安装位置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
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) 过滤项解析
过滤项格式 :
过滤指定等级⽇志 : 使⽤ 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
am命令有很多个参数及使⽤⽅法,具体可参考官⽅⽹站:am的⽤法列表如下:
[plain]
1. usage: am start [-D] [-W] [-P
2. [--R COUNT] [-S] [--opengl-trace]
3. [--user
4. am startservice [--user
5. am force-stop [--user
6. am kill [--user
7. am kill-all
8. am broadcast [--user
9. am instrument [-r] [-e
10. [--user
11. [--no-window-animation]
12. am profile start [--user
14. am dumpheap [--user
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.
2. [-a
3. [-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 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条)