使用 Monkey + Android Studio 进行安卓 App 性能测试的完整指南

901 阅读4分钟

🚀 性能测试是确保安卓应用流畅运行的关键环节。本文将详细介绍如何通过 Monkey 压力测试工具Android Studio 性能分析工具,系统化地发现和优化 App 的性能问题(如卡顿、内存泄漏、CPU 过载等)。

一、测试工具简介

1. Monkey 工具

  • 定位:安卓系统自带的压力测试工具,模拟用户随机操作(点击、滑动、按键等)。
  • 核心功能
    • 发送伪随机事件流,验证 App 的稳定性。
    • 支持设定事件数量、类型、频率等参数。
    • 输出日志记录崩溃(Crash)和 ANR(Application Not Responding)。

2. Android Studio Profiler

  • 定位:集成在 Android Studio 中的性能分析套件。
  • 核心功能
    • CPU Profiler:分析代码执行耗时、线程状态。
    • Memory Profiler:检测内存泄漏、对象分配。
    • Network Profiler:监控网络请求流量。
    • Energy Profiler:统计电量消耗。

二、测试流程设计

1. 准备工作

(1) 安装 Android SDK 和 ADB 工具

  • 确保已安装 Android SDK,并配置 adb 环境变量。
  • 验证 ADB 连接设备:
    adb devices  # 查看已连接的设备
    

(2) 配置待测 App 的 Debug 包

  • build.gradle 中启用调试选项:
    android {
        buildTypes {
            debug {
                debuggable true
                minifyEnabled false
            }
        }
    }
    

(3) 连接设备并启动 Android Profiler

  • 通过 USB 或无线调试连接设备。
  • 在 Android Studio 中打开 Profiler 窗口:
    View → Tool Windows → Profiler
    

2. 执行 Monkey 压力测试

(1) 基础命令示例

adb shell monkey -p com.example.app \  # 指定包名
  --throttle 100 \                     # 事件间隔 100ms
  --ignore-crashes \                   # 崩溃后继续执行
  --ignore-timeouts \                  # 忽略 ANR
  -v -v -v 100000 \                   # 输出详细日志 + 执行 10 万次事件
  > monkey_log.txt                     # 保存日志到文件

(2) 关键参数说明

参数说明
-p <包名>仅测试指定应用
--throttle <ms>事件间隔时间
--pct-touch <百分比>调整触摸事件比例
--ignore-crashes崩溃后继续执行
-s <种子值>复现随机事件流

(3) 监控实时日志

  • 通过 adb logcat 过滤关键信息:
    adb logcat | grep "monkey"
    

3. 使用 Android Profiler 分析性能问题

(1) CPU 性能分析

  • 操作步骤

    1. 在 Profiler 中点击 CPU 时间线
    2. 选择 Record 开始录制函数调用栈。
    3. 停止录制后,查看 Call ChartFlame Chart,定位耗时方法。
  • 常见问题

    • 主线程(Main Thread)执行耗时操作 → 优化为异步任务。
    • 频繁 GC(垃圾回收) → 检查内存分配。

(2) 内存分析

  • 操作步骤

    1. 在 Profiler 中点击 Memory 时间线
    2. 点击 Record 捕获内存堆转储(Heap Dump)。
    3. 分析 Memory Heap,查看未被释放的对象(如 Activity 泄漏)。
  • 关键指标

    • Java Heap:未释放的 Java 对象。
    • Native Heap:Native 层内存分配。
    • Allocations:对象分配次数。

(3) 网络和电量分析

  • Network Profiler

    • 监控请求频率、响应时间、数据量。
    • 发现冗余请求或未关闭的连接。
  • Energy Profiler

    • 定位高耗电模块(如 GPS、传感器、WakeLock)。

4. 分析 Monkey 日志

(1) 定位崩溃(Crash)和 ANR

  • 搜索关键字
    grep "CRASH" monkey_log.txt       # 崩溃日志
    grep "ANR" monkey_log.txt        # 应用无响应
    grep "Exception" monkey_log.txt  # 异常堆栈
    

(2) 复现问题路径

  • 使用 -s <seed> 参数复现随机事件流:
    adb shell monkey -p com.example.app -s 12345 1000
    

三、优化建议

1. Monkey 测试增强

  • 自定义事件脚本
    通过 adb shell monkey -f <脚本文件> 指定精确操作序列。
  • 结合其他工具
    使用 App Crawler(自动遍历界面)或 Espresso(UI 测试框架)补充场景覆盖。

2. 性能问题修复

  • 内存泄漏:使用 WeakReferenceLeakCanary 工具自动检测。
  • 主线程阻塞:将耗时操作迁移到 AsyncTaskCoroutine
  • 过度绘制:通过 Android Studio 的 Layout Inspector 检查视图层级。

3. 自动化集成

  • 编写 Shell/Python 脚本,自动化执行 Monkey 测试 + Profiler 数据收集。
  • 示例脚本片段:
    #!/bin/bash
    adb shell monkey -p com.example.app 5000
    adb pull /sdcard/monkey_logs
    

四、常见问题 FAQ

Q1:Monkey 测试时 App 卡死怎么办?

  • 调整 --throttle 增加事件间隔时间。
  • 使用 adb shell am force-stop com.example.app 强制停止应用。

Q2:如何过滤无关日志?

  • 通过 adb logcat-s 参数过滤指定 TAG:
    adb logcat -s AndroidRuntime
    

Q3:Profiler 数据不准确?

  • 确保测试包为 debug 模式,关闭代码混淆(ProGuard)。

五、总结

通过 Monkey 压力测试Android Studio Profiler 的组合,可以快速发现 App 的性能瓶颈。关键在于:

  1. 合理设计 Monkey 参数,覆盖高频操作场景。
  2. 熟练使用 Profiler 工具,精准定位问题代码。
  3. 建立自动化流程,持续监控性能回归。

立即动手尝试,为你的 App 打造极致流畅的用户体验吧!