Python测开28期-偕行-学习笔记-Android调试桥-adb

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
    image
  • 查看设备状态:adb get-state
    image
    • device:正常;

    • offline:连接出现异常,设备无响应;

    • unanthorized:未授权(真机);

  • 连接设备:adb connect 设备名称(模拟器:ip+端口,真机:设备标识)
  • 查看系统版本:adb shell getprop ro.build.version.release
    image

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
      image
    • 或者:adb shell dumpsys activity | findstr "mResume"
      image
  • 获取启动页面activity名:先执行命令:adb logcat ActivityManager:I | findstr "cmp",再打开app;

  • 启动指定页面:adb shell am start -n <包名>/<avticity名>

    • am是ActivityManager管理器;
      image
  • 打开的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 设备路径 电脑路径

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

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 事件对应数字

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
        image
    • --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
      image
  • 结果分析
    • startTime:记录刚准备调用startActivityAndWait()的时间点;
    • endTime:记录startActivityAndWait()函数调用返回的时间点;
    • WaitTime:startActivityAndWait()调用耗时=endTime-startTime;