You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动化测试Android应用运行1小时后的内存使用情况?

嘿,我正好做过类似的自动化内存测试,给你分享几个实用的方案,解决你用systrace看不到最大最小内存的问题:

方案一:ADB + 自定义脚本(最轻量化)

这个方案不需要额外工具,用Android自带的ADB命令就能实现定时采集,最后统计最大最小值。核心是用adb shell dumpsys meminfo获取应用内存数据,再用脚本循环采集1小时。

步骤:

  1. 准备一个bash脚本(Windows可以用Git Bash或者PowerShell改写):
#!/bin/bash
# 替换成你的应用包名
PACKAGE_NAME="com.your.app"
# 每10秒采集一次(可调整)
INTERVAL=10
# 总时长1小时=3600秒
TOTAL_DURATION=3600
OUTPUT_FILE="memory_logs.csv"

# 初始化CSV表头
echo "时间戳,PSS(KB),私有脏内存(KB)" > $OUTPUT_FILE

# 计算采集次数
ITERATIONS=$((TOTAL_DURATION / INTERVAL))

# 先启动应用(可选,确保应用在前台)
adb shell monkey -p $PACKAGE_NAME -c android.intent.category.LAUNCHER 1
sleep 5  # 等待应用启动稳定

for ((i=0; i<ITERATIONS; i++))
do
    TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
    # 提取内存数据(适配大多数Android版本)
    MEM_DATA=$(adb shell dumpsys meminfo $PACKAGE_NAME | grep -A1 "TOTAL")
    PSS=$(echo "$MEM_DATA" | awk '/TOTAL/ {print $2}')
    PRIVATE_DIRTY=$(echo "$MEM_DATA" | awk '/Private Dirty/ {print $2}')
    
    # 写入日志
    echo "$TIMESTAMP,$PSS,$PRIVATE_DIRTY" >> $OUTPUT_FILE
    sleep $INTERVAL
done

# 统计最大最小值
echo "=== 1小时内存统计结果 ==="
echo "PSS最大值: $(awk -F ',' '{if(NR>1) print $2}' $OUTPUT_FILE | sort -n | tail -1) KB"
echo "PSS最小值: $(awk -F ',' '{if(NR>1) print $2}' $OUTPUT_FILE | sort -n | head -1) KB"
echo "私有脏内存最大值: $(awk -F ',' '{if(NR>1) print $3}' $OUTPUT_FILE | sort -n | tail -1) KB"
echo "私有脏内存最小值: $(awk -F ',' '{if(NR>1) print $3}' $OUTPUT_FILE | sort -n | head -1) KB"
  1. 给脚本加执行权限:chmod +x memory_test.sh
  2. 确保设备/模拟器通过ADB连接正常,运行脚本即可。

注意:

  • *PSS(Proportional Set Size)*是最推荐的内存指标,它能准确反映应用实际占用的物理内存(考虑了共享内存的分摊)。
  • 不同Android版本的dumpsys meminfo输出格式可能略有差异,若提取不到数据,可调整grep和awk的匹配规则。
方案二:Android Studio Profiler 命令行自动化

如果你需要更详细的内存变化曲线,同时要自动化,可以用Profiler的命令行工具profiler-cli来录制1小时的内存数据,之后分析最大最小值。

操作步骤:

  1. 确保Android Studio的bin目录在系统PATH里,或者直接用全路径调用profiler-cli。
  2. 启动内存录制:
# 录制指定应用的内存数据,持续3600秒,输出到trace文件
profiler-cli record --memory --duration 3600 --output app_memory.trace com.your.app
  1. 录制完成后,你可以:
    • 用Android Studio打开app_memory.trace,直观查看内存波动,手动找到最大最小值;
    • 用Python脚本解析trace文件(trace是基于protobuf的格式),自动提取统计数据。
方案三:Docker + 模拟器(CI/CD场景)

如果需要在持续集成环境中自动化运行测试,可以用Docker打包Android模拟器环境,实现无界面测试。

大致流程:

  1. 拉取带模拟器的Docker镜像(比如第三方维护的镜像):
docker pull budtmo/docker-android:emulator_33
  1. 启动容器并映射ADB端口:
docker run -d -p 5555:5555 --name android-emulator budtmo/docker-android:emulator_33
  1. 连接容器内的模拟器:
adb connect localhost:5555
  1. 之后就可以复用方案一的脚本,在容器内完成1小时的内存采集和统计。

额外优化:

如果要模拟真实用户操作(比如滑动、点击),可以在脚本中加入adb shell input命令,比如:

# 每隔30秒模拟一次屏幕滑动
adb shell input swipe 500 1500 500 500

内容的提问来源于stack exchange,提问作者scll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:05:57