CTS测试覆盖多Camera场景与HAL稳定性验证 - 第4节
4.1 环境搭建全景概览
CTS(Compatibility Test Suite)测试环境的正确搭建是Camera HAL稳定性验证的基础。一个完整的环境包含四个核心层次:SDK工具链、CTS测试包、物理设备和调试通道。本节将逐一拆解每个环节的配置要点与常见陷阱。
环境搭建核心原则: 所有组件版本必须严格对齐——Android SDK版本、CTS版本、设备Build ID三者之间需满足兼容性矩阵,否则测试结果无效。
4.2 Android SDK 配置
4.2.1 下载与安装
推荐使用 Android Studio 内置的 SDK Manager 进行安装,或直接下载 Command Line Tools 用于无GUI环境。关键组件版本要求如下:
| 组件 | 最低版本 | 推荐版本 | 说明 |
|---|---|---|---|
| Platform Tools | 30.0.0 | 34.0.0+ | 包含 adb、fastboot |
| Build Tools | 30.0.0 | 34.0.0+ | 包含 aapt2、zipalign |
| SDK Platform | android-33 | android-34 | 需匹配 DUT 的 API Level |
| NDK | 25.0.0 | 26.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 Level | CTS 版本号示例 | 下载标识 |
|---|---|---|---|
| Android 13 | 33 | 13_r5 | android-cts-13_r5-linux_x86-arm.zip |
| Android 14 | 34 | 14_r2 | android-cts-14_r2-linux_x86-arm.zip |
| Android 15 | 35 | 15_r1 | android-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 接口。
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 / SDK | adb、fastboot 命令可用 | 15 min |
| 2 | 下载对应版本 CTS 包 | 解压后 testcases 目录非空 | 10 min |
| 3 | 刷写 userdebug 镜像 | 设备重启后 ro.build.type 为 userdebug | 20 min |
| 4 | 解锁 Bootloader | fastboot flashing unlock 成功 | 5 min |
| 5 | 开启 USB 调试 + 保持唤醒 | adb devices 显示 device | 3 min |
| 6 | 关闭屏幕锁 + 叠加层 | locksettings verify 返回 none | 2 min |
| 7 | 验证多Camera可用性 | dumpsys 显示 ≥2 个 Camera | 2 min |
| 8 | 运行快速切换脚本 | 50 次切换无崩溃 | 5 min |
| 9 | 配置 CTS 环境变量 | cts-tradefed 可执行 | 3 min |
完成以上所有步骤后,CTS 测试环境即搭建完毕,可进入下一阶段的测试执行与结果分析。