4. 测试环境搭建:CTS工具下载、测试设备配置、ADB调试、媒体文件推送
CTS(Compatibility Test Suite)测试环境的正确搭建是Camera HAL适配与修复工作的基础。一个标准、可复现的环境能够有效隔离硬件与软件层面的干扰,确保失败分析聚焦于HAL实现本身。本节将系统讲解从工具获取到设备就绪的完整流程。
环境一致性原则: 所有参与CTS测试的工程师应使用同一版本的CTS工具包、同一版本的Android系统镜像以及同一批次的媒体测试文件。任何版本偏差都可能导致测试结果不可比,增加问题定位的复杂度。
4.1 CTS工具下载与版本管理
CTS工具包由Google官方发布,包含测试框架、测试用例(Test Cases)以及必要的配置文件。下载时需严格匹配目标设备的Android API Level(SDK版本)。
| Android 版本 | API Level | CTS 版本命名示例 | 下载来源 |
|---|---|---|---|
| Android 13 | 33 | android-cts-13_r5-linux_x86-arm | Google CTS Downloads |
| Android 14 | 34 | android-cts-14_r2-linux_x86-arm | Google CTS Downloads |
| Android 15 | 35 | android-cts-15_r1-linux_x86-arm | Google CTS Downloads |
关键操作步骤:
- 登录Google CTS官方下载页面(需具备AOSP Contributor权限或通过设备厂商授权账号)。
- 选择与设备GMS(Google Mobile Services)版本对应的CTS包,通常为
android-cts-{version}-linux_x86-arm.zip。 - 下载完成后,使用
sha256sum校验文件完整性,确保与官网提供的哈希值一致。 - 解压至Linux工作目录,例如
/opt/android-cts/,并设置环境变量CTS_ROOT。
# 下载与校验示例
wget https://dl.google.com/dl/android/cts/android-cts-14_r2-linux_x86-arm.zip
sha256sum android-cts-14_r2-linux_x86-arm.zip
# 输出应与官网一致:a1b2c3d4e5f6...
# 解压与设置环境变量
unzip android-cts-14_r2-linux_x86-arm.zip -d /opt/
export CTS_ROOT=/opt/android-cts-14_r2-linux_x86-arm
echo 'export CTS_ROOT=/opt/android-cts-14_r2-linux_x86-arm' >> ~/.bashrc
4.2 测试设备配置要求
设备配置是CTS测试通过率的基础保障。Camera相关测试对设备状态尤为敏感,任何非标准配置都可能导致测试失败。
设备配置红线:
- 设备必须运行 user 版本 的Android系统镜像,不可使用 userdebug 或 eng 版本进行正式CTS测试。
- 必须解锁 Bootloader,但测试完成后需重新锁定以模拟用户环境。
- 禁止Root设备,CTS测试框架会检测Root状态并直接标记为失败。
- 必须插入SIM卡(或使用支持eSIM的激活设备),部分Camera测试依赖Telephony状态。
| 配置项 | 要求 | 验证命令 |
|---|---|---|
| 系统版本 | user 版本 | adb shell getprop ro.build.type |
| 安全补丁 | 最新安全补丁级别 | adb shell getprop ro.build.version.security_patch |
| 屏幕状态 | 常亮,不锁屏 | adb shell settings put global stay_on_while_plugged_in 3 |
| 语言与区域 | 英文(美国) | adb shell setprop persist.sys.locale en-US |
| 开发者选项 | 开启USB调试、禁用窗口动画 | adb shell settings put global window_animation_scale 0 |
4.3 ADB调试环境配置
ADB(Android Debug Bridge)是CTS测试框架与设备通信的核心通道。调试环境的稳定性直接影响测试执行效率。
4.3.1 主机端配置
# 安装ADB(Ubuntu/Debian)
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
# 配置USB规则(以MediaTek平台为例)
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", MODE="0666", GROUP="plugdev"' | sudo tee /etc/udev/rules.d/51-android.rules
sudo udevadm control --reload-rules
sudo udevadm trigger
# 验证设备连接
adb devices -l
# 输出示例:
# List of devices attached
# 0123456789ABCDEF device usb:1-1 product:example_model model:Example_Device device:example_device transport_id:1
4.3.2 设备端配置
- 开启USB调试: 设置 → 开发者选项 → USB调试。
- 禁用ADB授权超时: 开发者选项中设置“USB调试(安全设置)”为开启。
- 保持唤醒: 开发者选项中开启“不锁定屏幕”和“保持唤醒状态”。
- 设置DNS: 确保设备可以解析Google域名,部分CTS测试需要网络访问。
ADB调试常见问题排查:
- 设备显示 offline: 重新插拔USB线,或执行
adb kill-server && adb start-server。 - 设备显示 unauthorized: 检查设备屏幕是否弹出RSA指纹授权弹窗,点击“允许”。
- 多设备冲突: 使用
adb -s <serial>指定目标设备,或在cts-tradefed中配置--serial参数。
4.4 媒体文件推送
Camera CTS测试需要大量标准化的媒体文件作为输入源,包括静态图像、视频流和YUV原始数据。这些文件必须精确推送到设备指定路径,否则测试框架将无法找到测试资源。
4.4.1 媒体文件清单
| 文件类型 | 分辨率/规格 | 数量 | 推送目标路径 |
|---|---|---|---|
| JPEG 静态图 | 1920x1080, 3264x2448 | 20 | /sdcard/test_images/ |
| YUV 原始数据 | NV21, 640x480 | 10 | /sdcard/test_yuv/ |
| H.264 视频流 | 1080p@30fps, 720p@30fps | 15 | /sdcard/test_videos/ |
| HEIC 高效图像 | 4032x3024 | 5 | /sdcard/test_heic/ |
4.4.2 推送脚本与自动化
#!/bin/bash
# push_media_files.sh - 自动推送CTS媒体文件到设备
CTS_MEDIA_DIR="${CTS_ROOT}/repository/testcases/media"
DEVICE_BASE="/sdcard"
# 创建目录结构
adb shell mkdir -p ${DEVICE_BASE}/test_images
adb shell mkdir -p ${DEVICE_BASE}/test_yuv
adb shell mkdir -p ${DEVICE_BASE}/test_videos
adb shell mkdir -p ${DEVICE_BASE}/test_heic
# 推送图像文件
echo "Pushing JPEG images..."
adb push ${CTS_MEDIA_DIR}/jpeg/ ${DEVICE_BASE}/test_images/
# 推送YUV文件
echo "Pushing YUV raw data..."
adb push ${CTS_MEDIA_DIR}/yuv/ ${DEVICE_BASE}/test_yuv/
# 推送视频文件
echo "Pushing H.264 videos..."
adb push ${CTS_MEDIA_DIR}/h264/ ${DEVICE_BASE}/test_videos/
# 推送HEIC文件
echo "Pushing HEIC images..."
adb push ${CTS_MEDIA_DIR}/heic/ ${DEVICE_BASE}/test_heic/
# 验证文件完整性
echo "Verifying file count..."
adb shell "find ${DEVICE_BASE} -type f | wc -l"
媒体文件推送注意事项:
- 推送前确保设备存储空间充足,至少预留 2GB 可用空间。
- 使用
adb push时添加-p参数可显示传输进度。 - 推送完成后,使用
adb shell ls -lR /sdcard/test_*检查文件权限和大小。 - 部分CTS测试要求媒体文件具有特定的修改时间戳,可使用
adb shell touch -t统一设置。
4.5 环境验证清单
在启动正式CTS测试之前,建议执行以下快速验证步骤,确保环境就绪。
| 验证项 | 验证方法 | 预期结果 |
|---|---|---|
| ADB连接 | adb devices -l |
设备状态为 device |
| 系统类型 | adb shell getprop ro.build.type |
user |
| 媒体文件存在 | adb shell ls /sdcard/test_images/ |
文件列表非空 |
| CTS工具版本 | ${CTS_ROOT}/tools/cts-tradefed --version |
显示版本号 |
| 存储空间 | adb shell df -h /sdcard |
可用空间 > 2GB |
最佳实践: 建议编写一个
check_env.sh 脚本,将上述验证项自动化。每次执行CTS测试前运行该脚本,确保环境状态可追溯。脚本输出应包含时间戳,便于后续问题回溯。