Android调试桥-adb
(1)adb环境配置
- java环境:安装jdk并配置环境变量,验证:java -version;
- AndroidSDK:下载SDK解压存放本地并配置环境变量,验证:adb version;
(2)adb相关命令命令
A、adb与设备交互
- 关闭adb服务:
adb kill-server
; - 开启adb服务:
adb start-server
; - 查看设备(状态):
adb devices
;
- 查看设备状态:
adb get-state
;
-
device:正常;
-
offline:连接出现异常,设备无响应;
-
unanthorized:未授权(真机);
-
- 连接设备:
adb connect 设备名称(模拟器:ip+端口,真机:设备标识)
- 查看系统版本:
adb shell getprop ro.build.version.release
B、adb命令格式: adb [-d|-e|-s <serialNumber>]<command>
- -d 指定当前唯一通过 Usb 连接的 android 设备为命令目标(了解);
- -e 指定当前唯一运行的模拟器为命令目标(了解);
- -s 指定相应的设备为命令目标(重点);
- serialNumber“设备标识”;
C、安装卸载app
- 普通安装
adb install <apk路径>
- 覆盖安装/替代安装
adb install -r <apk路径>
- 完全卸载:
adb uninstall 包名
; - 保留缓存卸载:
adb uninstall -k 包名
;
D、包名、页面名
-
win获取包名启动名:
adb shell dumpsys window windows | findstr mFocusedApp
;
-
win&mac获取当前页面activity名:先打开应用,再执行命令:
adb shell "dumpsys window | grep mCurrentFocus"
;- 或者:
adb shell dumpsys window | findstr mCurrentFocus
- 或者:
adb shell dumpsys activity | findstr "mResume"
- 或者:
-
获取启动页面activity名:先执行命令:
adb logcat ActivityManager:I | findstr "cmp"
,再打开app;
-
启动指定页面:
adb shell am start -n <包名>/<avticity名>
;- am是ActivityManager管理器;
- am是ActivityManager管理器;
-
打开的app退出后重新启动:
adb shell am start -S 包名/activity名
-
打开的app不需要退出,直接使用当前页面:
adb shell am start 包名/activity名
E、adb shell-进入安卓手机Linux内部
- 进入手机内部系统:
adb shell
; - 查看目录结构:
adb shell ls 目录
; - 查看系统当前日期:
adb shell date
; - 查看系统 CPU 使用情况:
adb shell cat /proc/cpuinfo
; - 查看系统内存使用情况:
adb shell cat /proc/meminfo
; - 显示所有应用:
adb shell pm list packages
;- pm是PackageManager包管理器;
- 显示系统自带应用:
adb shell pm list packages -s
; - 显示第 3 方应用:
adb shell pm list packages -3
; - 清楚应用数据及缓存:
adb shell pm clear <包名>
;- 手机缓存数据目录:
/data/data
;
- 手机缓存数据目录:
F、adb文件传输
- 从电脑推送文件到手机:
adb push 电脑路径 设备路径
; - 从手机拉取文件到电脑:
adb pull 设备路径 电脑路径
;- sd卡路径:
/sdcard
;
- sd卡路径:
G、adb查看日志-adb logcat
(1)日志级别
- V — 明细 verbose(最低优先级)
- D — 调试 debug
- I — 信息 info
- W — 警告 warn
- E — 错误 error
- F — 严重错误 fatal
- S — 无记载 silent,静默模式(最高优先级,绝不会输出任何内容)
(2)常用参数
-
adb logcat
打印默认日志数据 -
adb logcat -v color
使用不同的颜色来显示每个优先级 -
adb logcat -f <filename>
将日志输出到文件
-
adb logcat > log.log
保存日志到PC上
-
adb logcat -c 清理已存在的日志
(3)日志条件过滤
- 参考:adb日志过滤
- 格式:
adb logcat 参数 "TAG:LEVEL " " TAG:LEVEL "...
;- 打印error级别的日志并标记红色,不对tag进行过滤:
adb logcat -v color "*:E"
; - 过滤输出tag 为ActivityManager,level为error及以上级别的日志:
adb logcat -v color ActivityManager:E '*:S'
;- [TAG:LEVEL ] 不会影响其他标签的日志, 所以如果要屏蔽其他log请使用 *:S
- 打印error级别的日志并标记红色,不对tag进行过滤:
H、adb模拟手机按键adb shell input
- 模拟点击:
adb shell input tap x坐标 y坐标
; - 模拟输入:
adb shell input text <输入内容>
; - 模拟滑动:
adb shell swipe <起点x> <起点y> <终点x> <终点y> <滑动时长>
; - 模拟手机按键:
adb shell input keyevent 事件对应数字
;- 事件对应数字查找:keyevent
I、adb shell monkey稳定性、健壮性、压力测试
-
格式:
adb shell monkey [参数] {随机发送事件数}
; -
常用参数:
-
-v
:用于指定反馈信息级别,总共分 3 个级别;-
adb shell monkey -v -v -v 10
;
-
-
-s <seednumber>
:用于指定伪随机数生成器的 seed(种子)值,相同seed值的monkey的动作一模一样,用于bug的复现;-
adb shell monkey -s 123 10
;
-
-
--throttle <milliseconds>
:每个事件结束后的间隔时间,用于减缓monkey执行的速度;-
adb shell monkey -v -s 101 --throttle 300 100
;
-
-
-p
: 用于约束限制,用此参数指定一个或多个包,指定monkey在哪些应用里面跑;-
adb shell monkey -v -s 120 --throttle 300 -p com.xueqiu.android -p com.android.browser 100
;
-
-
--ignore-crashes
:忽略崩溃,即使崩溃也不会停止monkey,直到事件数结束; -
--ignore-timeouts
:忽略超时; -
--ignore-security-exceptions
:忽略安全异常; -
--ignore-native-crashes
:忽略本地代码导致的崩溃异常; -
--monitor-native-crashes
:跟踪本地方法的崩溃问题 ;
-
-
monkey事件选项
-
--pct-touch + 百分比
:触摸事件;-
adb shell monkey --pct-touch 100 -v -s 120 --throttle 300 -p com.xueqiu.android 100
;
-
-
--pct-motion+ 百分比
:滑动事件; -
--pct-appswitch
:activity 之间的切换,增加页面间的切换; -
--pct-pinchzoom
:缩放事件; -
--pct-rotation
:屏幕旋转事件; -
--pct-flip
:键盘事件; -
--pct-syskeys
:系统按键; -
--pct-anyevent
:任意事件; -
注意:所有类型属性比例加起来不能超过 100
-
-
使用monkey对腾讯新闻进行10分钟压力测试
- 要求:
- 执行10分钟;10601000/300=2000次;
- 日志级别:3个V;
- 常用操作比例:滑动20、触摸20、键盘10、系统按键10、activity切换40;
- seed值:9527;
- 确定调试选项:
--ignore-crashes --ignore-timeouts --ignore-security-exceptions
; - 将日志重定向到pc:
C:\Users\DELL\Desktop\txxw_monkey.log
;
- 实战结果:
- 获取包名:
adb shell "dumpsys window | grep mCurrentFocus"
; - 压力测试:
adb shell monkey -p com.tencent.news --pct-motion 20 --pct-touch 20 --pct-flip 10 --pct-syskeys 10 --pct-appswitch 40 --throttle 300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -s 9527 -v -v -v 2000 > C:\Users\DELL\Desktop\txxw_monkey.log
;
- 获取包名:
- 要求:
J、app启动性能
- activity启动流程
- App启动性能指标
- 冷启动
- 暖启动
- 热启动
- 首屏启动
- 使用logcat获取app启动时间步骤:
- 定义变量:
package=com.xueqiu.android
; - 清理缓存数据:
adb shell pm clear $package
; - 停止进程:
adb shell am force-stop $package
; - 启动App:
adb shell am start -S -W $package/.view.WelcomeActivityAlias
; - 获取数据:
adb logcat | grep -i displayed
;
- 定义变量:
- 结果分析
- startTime:记录刚准备调用startActivityAndWait()的时间点;
- endTime:记录startActivityAndWait()函数调用返回的时间点;
- WaitTime:startActivityAndWait()调用耗时=endTime-startTime;