CTS测试覆盖多Camera场景与HAL稳定性验证 - 第4节

4.1 环境搭建全景概览

CTS(Compatibility Test Suite)测试环境的正确搭建是Camera HAL稳定性验证的基础。一个完整的环境包含四个核心层次:SDK工具链、CTS测试包、物理设备和调试通道。本节将逐一拆解每个环节的配置要点与常见陷阱。

环境搭建核心原则: 所有组件版本必须严格对齐——Android SDK版本、CTS版本、设备Build ID三者之间需满足兼容性矩阵,否则测试结果无效。
CTS测试环境四层架构 Android SDK / Platform Tools / Build Tools adb、fastboot、aapt2、systrace 等核心工具 CTS / CTS-Verifier 测试套件 android-cts.zip + android-cts-verifier.zip 物理测试设备(DUT) userdebug 版本 / 解锁 Bootloader / 开启 USB 调试 adb 调试环境 USB 连接 / 网络 adb / 多设备管理

4.2 Android SDK 配置

4.2.1 下载与安装

推荐使用 Android Studio 内置的 SDK Manager 进行安装,或直接下载 Command Line Tools 用于无GUI环境。关键组件版本要求如下:

组件最低版本推荐版本说明
Platform Tools30.0.034.0.0+包含 adb、fastboot
Build Tools30.0.034.0.0+包含 aapt2、zipalign
SDK Platformandroid-33android-34需匹配 DUT 的 API Level
NDK25.0.026.0.0+部分 CTS 测试需要 native 库

4.2.2 环境变量配置

将 SDK 工具路径添加到系统 PATH 中,确保终端可直接调用 adb、fastboot 等命令:

# Linux / macOS
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/build-tools/34.0.0
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin

# Windows (PowerShell)
$env:ANDROID_HOME = "$env:USERPROFILE\Android\Sdk"
$env:Path += ";$env:ANDROID_HOME\platform-tools"
$env:Path += ";$env:ANDROID_HOME\build-tools\34.0.0"
验证方法: 执行 adb --version 和 fastboot --version,确认输出中包含正确的版本号。若提示"command not found",请检查 PATH 路径是否包含可执行文件所在目录。

4.3 CTS 工具下载与部署

4.3.1 获取 CTS 包

CTS 测试包从 AOSP 官方仓库 或 Google 兼容性页面 下载。每个 Android 版本对应独立的 CTS 版本:

Android 版本API LevelCTS 版本号示例下载标识
Android 133313_r5android-cts-13_r5-linux_x86-arm.zip
Android 143414_r2android-cts-14_r2-linux_x86-arm.zip
Android 153515_r1android-cts-15_r1-linux_x86-arm.zip

4.3.2 解压与目录结构

将下载的 zip 包解压到工作目录,建议使用无空格、无中文的路径:

# 解压命令
unzip android-cts-14_r2-linux_x86-arm.zip -d /opt/cts/

# 解压后的核心目录结构
/opt/cts/android-cts/
├── android-cts/
│   ├── testcases/          # 测试用例二进制与配置文件
│   ├── tools/              # 测试执行工具(cts-tradefed)
│   ├── repository/         # 测试计划与结果仓库
│   ├── logs/               # 运行日志输出目录
│   ├── results/            # 测试结果 XML 存放目录
│   └── cts-tradefed        # 主执行脚本
└── android-cts-verifier/   # 手动测试套件(需安装 APK)
重要: CTS-Verifier 需要手动安装 APK 到设备上,用于测试相机预览、触摸响应、传感器等需要人工交互的用例。Camera HAL 的稳定性验证中,多Camera场景切换、闪光灯时序、视频稳像等测试项必须通过 CTS-Verifier 完成。

4.4 测试设备准备

4.4.1 设备固件要求

CTS 测试对设备固件有严格约束,不满足条件将直接导致测试失败:

  • Build 类型: 必须为 userdebug 或 eng 版本,user 版本无法通过 CTS。
  • Bootloader: 必须解锁,允许刷写系统分区。
  • 系统分区: 必须为 可写 状态,CTS 运行时会推送测试文件到 /data/local/tmp。
  • 安全设置: 关闭屏幕锁(PIN/图案/密码),关闭"允许屏幕叠加"。
  • 开发者选项: 开启 USB 调试、保持唤醒、不锁定屏幕。

4.4.2 多Camera场景的设备配置

针对 Camera HAL 稳定性测试,设备需具备以下硬件配置:

Camera 类型数量要求测试覆盖场景
后置主摄≥1基础预览、拍照、录像、HDR
前置摄像头≥1自拍、人脸检测、美颜
超广角/长焦≥1(可选)多Camera切换、变焦流畅性
深度/ToF≥1(可选)3D 扫描、AR 场景
多Camera场景验证要点: 在 CTS 测试前,建议手动执行 3~5 次前后摄切换、主摄与广角切换,确保 HAL 层不会出现 CameraService 崩溃或 BufferQueue 泄漏。这些异常在 CTS 自动化测试中往往表现为"测试超时"或"无响应"。

4.5 adb 调试环境

4.5.1 连接与授权

adb 是 CTS 与设备通信的唯一通道,必须确保稳定可靠:

# 检查设备是否被识别
adb devices -l

# 预期输出(已授权状态)
List of devices attached
ABCDEF1234567890    device product:xxx model:XXX device:XXX transport_id:1

# 若显示 "unauthorized",需在设备上确认 RSA 指纹授权
# 若显示 "offline",尝试重新插拔 USB 或重启 adb 服务
adb kill-server
adb start-server

4.5.2 多设备管理

当同时连接多台 DUT 时,需指定设备序列号:

# 列出所有设备
adb devices

# 指定设备执行命令
adb -s ABCDEF1234567890 shell dumpsys media.camera

# 使用环境变量统一指定
export ANDROID_SERIAL=ABCDEF1234567890
adb shell getprop ro.build.fingerprint

4.5.3 网络 adb(无线调试)

对于 Camera 稳定性测试,无线 adb 可避免 USB 线缆对设备摆放的干扰:

# 1. 设备连接 USB 后,开启网络 adb 端口
adb tcpip 5555

# 2. 断开 USB,通过 IP 连接
adb connect 192.168.1.100:5555

# 3. 验证连接状态
adb devices
# 输出:192.168.1.100:5555    device

# 4. 恢复 USB 模式
adb usb
稳定性建议: 无线 adb 在 Camera 高带宽场景(如 4K 录像)下可能出现丢包,建议在 CTS 执行前使用 adb shell dumpsys media.camera 连续运行 30 秒,观察是否有 "timeout" 或 "disconnected" 日志。若出现不稳定,优先使用 USB 3.0 接口。
adb 调试环境与 CTS 通信流程 CTS 主机(Linux/Windows) cts-tradefed adb server (端口 5037) 测试用例 APK 结果收集器 USB / TCP DUT(测试设备) adbd (守护进程) Camera HAL CameraService 测试用例 APK 运行 关键检查点 1. adb devices 显示 device 2. 无 unauthorized 状态 3. 传输速率 > 10 MB/s 4. 连续 30min 不断连 5. 日志无 timeout 异常

4.6 环境验证清单

在正式执行 CTS 测试前,逐项确认以下环境条件是否满足:

检查项验证命令/方法通过标准
SDK 工具可用adb --version输出版本号 ≥ 34.0.0
CTS 包完整性ls -l android-cts/testcases/包含 Camera 相关测试目录
设备 Build 类型adb shell getprop ro.build.type输出 userdebug
USB 调试开启adb shell settings get global adb_enabled输出 1
屏幕锁关闭adb shell locksettings verify返回 none 或无锁屏
多Camera可用adb shell dumpsys media.camera | grep "Number of cameras"数量 ≥ 2
adb 稳定性adb shell "for i in 1..100; do echo \$i; done"无中断输出 1~100
常见失败原因:
  • 设备为 user 版本 → 重新刷写 userdebug 镜像。
  • adb 显示 unauthorized → 在设备上重新授权 USB 调试。
  • CTS 运行时报 No tests found → CTS 版本与设备 API Level 不匹配。
  • Camera 测试全部超时 → 检查 HAL 层是否在 CTS 调用时发生 crash(查看 logcat -b crash)。

4.7 多Camera场景的专项环境配置

针对 Camera HAL 稳定性验证,还需额外配置以下环境参数:

4.7.1 关闭 Camera 相关系统优化

# 关闭 Camera 服务的内存压缩,避免测试期间被 kill
adb shell setprop persist.camera.force.nonpub 1

# 关闭 HAL 层的低功耗模式
adb shell setprop persist.camera.hal3.enable 1

# 增加 Camera 服务超时时间(毫秒)
adb shell setprop persist.camera.cts.timeout 10000

4.7.2 准备多Camera测试脚本

在 CTS 测试前,建议先运行一个快速的多Camera切换脚本,验证 HAL 层的基本稳定性:

#!/bin/bash
# quick_camera_switch_test.sh
# 快速验证前后摄切换是否会导致 HAL 崩溃

for i in {1..50}; do
  echo "=== Iteration $i ==="
  # 打开后置摄像头
  adb shell am start -a android.media.action.IMAGE_CAPTURE
  sleep 2
  # 切换到前置摄像头
  adb shell input keyevent 21  # 模拟切换按钮(需根据实际 UI 调整)
  sleep 2
  # 关闭相机
  adb shell input keyevent 4   # Back 键
  sleep 1
  # 检查 CameraService 是否存活
  adb shell dumpsys media.camera | grep "CameraService" | grep "pid"
  if [ $? -ne 0 ]; then
    echo "ERROR: CameraService crashed at iteration $i"
    exit 1
  fi
done
echo "All iterations passed."
最佳实践: 在正式 CTS 运行前,使用上述脚本完成 50 次以上的 Camera 快速切换,若出现 CameraService 崩溃或 BufferQueue 溢出,说明 HAL 层存在稳定性缺陷,应先修复再执行 CTS,否则 CTS 测试结果将大量失败,浪费排查时间。

4.8 环境搭建检查清单(速查表)

步骤操作预期结果耗时
1安装 Android Studio / SDKadb、fastboot 命令可用15 min
2下载对应版本 CTS 包解压后 testcases 目录非空10 min
3刷写 userdebug 镜像设备重启后 ro.build.type 为 userdebug20 min
4解锁 Bootloaderfastboot flashing unlock 成功5 min
5开启 USB 调试 + 保持唤醒adb devices 显示 device3 min
6关闭屏幕锁 + 叠加层locksettings verify 返回 none2 min
7验证多Camera可用性dumpsys 显示 ≥2 个 Camera2 min
8运行快速切换脚本50 次切换无崩溃5 min
9配置 CTS 环境变量cts-tradefed 可执行3 min

完成以上所有步骤后,CTS 测试环境即搭建完毕,可进入下一阶段的测试执行与结果分析。