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
关键操作步骤:
  1. 登录Google CTS官方下载页面(需具备AOSP Contributor权限或通过设备厂商授权账号)。
  2. 选择与设备GMS(Google Mobile Services)版本对应的CTS包,通常为 android-cts-{version}-linux_x86-arm.zip。
  3. 下载完成后,使用 sha256sum 校验文件完整性,确保与官网提供的哈希值一致。
  4. 解压至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
CTS 工具包目录结构 android-cts/ testcases/ tools/ repository/ plans/ Camera 测试用例 cts-tradefed 启动器 媒体文件 / 配置文件 测试计划 XML Camera 相关测试用例位于 testcases/ 目录下,以 android.hardware.camera 开头

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
CTS 测试设备状态检查流程 连接设备 检查系统类型 验证安全补丁 配置完成 非 user 版本 → 刷机 补丁过旧 → 更新镜像 每个检查点失败后需修复并重新验证,确保设备处于纯净状态

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 参数。
ADB 调试链路架构 CTS 主机 (Linux) cts-tradefed / adb USB 传输层 Android 设备 adbd 守护进程 Camera HAL HIDL / AIDL ADB 作为桥梁,将 CTS 测试命令转发至设备端的 Camera HAL 接口 关键指标:USB 传输速率 ≥ 480 Mbps,延迟 < 5ms

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 统一设置。
媒体文件推送流程与验证 CTS 媒体仓库 adb push adb shell mkdir adb shell ls -l /sdcard/test_images/ JPEG 文件 /sdcard/test_videos/ H.264 文件 /sdcard/test_yuv/ YUV 原始数据 推送完成后,CTS 测试框架通过绝对路径索引媒体文件,路径错误将导致测试立即失败

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测试前运行该脚本,确保环境状态可追溯。脚本输出应包含时间戳,便于后续问题回溯。