1. CTS 概述:测试框架与 Camera 兼容性验证

Android 兼容性测试套件(CTS,Compatibility Test Suite)是 Google 提供的自动化测试框架,用于验证设备实现是否符合 Android 兼容性定义文档(CDD,Compatibility Definition Document)的要求。对于 Camera 子系统,CTS 是确保不同厂商的 Camera HAL 实现与 Android 框架行为一致、功能完整的关键手段。

1.1 CTS 测试框架介绍

CTS 基于 JUnit 测试框架,运行在 Android 设备或模拟器上。其核心架构分为三层:

  • 测试用例层:由 Java/Kotlin 编写的测试类,继承自 android.test.AndroidTestCase 或使用 @Test 注解的 Instrumentation 测试。
  • 测试执行层:通过 cts-tradefed 命令行工具调度测试计划、管理设备、收集结果。
  • 结果报告层:生成 XML 格式的测试结果,包含 pass/fail/ignore 状态及详细日志。
关键概念: CTS 测试不直接测试硬件,而是测试 Android 框架 API 与 HAL 实现之间的契约。Camera CTS 验证的是 android.hardware.camera2 API 的完整性和正确性。
CTS 测试框架三层架构 CTS 测试框架三层架构 测试用例层 (Test Cases) CameraTest / CameraManagerTest / CaptureRequestTest 测试执行层 (Tradefed) cts-tradefed run cts --plan Camera --module CtsCameraTestCases 结果报告层 (Reports) test_result.xml / test_result.html / logs 测试用例通过 Tradefed 调度执行,结果汇总为 XML 报告

1.2 Camera CTS 在 Android 兼容性测试中的角色

Camera CTS 是 Android 兼容性测试的核心模块之一,其角色体现在以下方面:

角色维度 具体职责 验证目标
API 一致性 验证 Camera2 API 的所有公共方法、回调、常量是否按 CDD 要求实现 确保应用层 API 行为与 Android 框架定义一致
HAL 功能完整性 测试 Camera HAL 是否支持所有必须的静态特性、请求模板、数据流格式 确保 HAL 实现覆盖 CDD 强制要求的功能点
性能基准 验证预览帧率、拍照延迟、AE/AF 收敛时间等关键指标 确保用户体验达到 Android 兼容性最低要求
稳定性与健壮性 通过压力测试、异常场景测试验证 Camera 子系统的稳定性 确保设备在长时间、高负载下不崩溃、不泄漏
提示: Camera CTS 测试失败通常意味着设备无法通过 Google 移动服务(GMS,Google Mobile Services)认证,因此 Camera HAL 开发者必须将 CTS 通过率作为首要质量指标。
Camera CTS 角色关系图 Camera CTS 在兼容性测试中的角色 Camera CTS API 一致性 Camera2 API 验证 HAL 功能完整性 特性枚举验证 性能基准 帧率/延迟测试 稳定性 压力/异常测试 Camera CTS 覆盖 API、HAL、性能、稳定性四个维度,确保设备通过 GMS 认证

1.3 测试环境搭建

搭建 Camera CTS 测试环境需要准备以下组件:

  1. Android SDK 与平台工具:包含 adb、fastboot 等调试工具。
  2. CTS 测试包:从 Google 官方下载对应 Android 版本的 CTS 包(如 android-cts-14.0_r1-linux_x86-arm.zip)。
  3. 测试设备:运行 Android 原生系统或 AOSP 构建的工程机,已解锁 bootloader 并开启 USB 调试。
  4. 测试主机:Linux(推荐 Ubuntu 20.04+)或 macOS,安装 Java 8+ 运行环境。

环境搭建步骤

步骤 操作 验证命令
1 下载并解压 CTS 包 unzip android-cts-*.zip -d ~/cts
2 配置 adb 环境变量 export PATH=$PATH:~/Android/Sdk/platform-tools
3 连接设备并确认识别 adb devices 应列出设备序列号
4 运行 CTS 测试计划 ./cts-tradefed run cts --plan Camera
5 查看测试结果 ls -la ~/cts/android-cts/results/latest/
常见问题: 如果设备未正确识别,请检查 USB 连接模式是否为“文件传输”或“MTP”,并确认已授权 USB 调试。部分设备需要关闭“监控 ADB 安装应用”选项以避免干扰。
CTS 测试环境搭建流程 CTS 测试环境搭建流程 下载 CTS 包 Google 官方下载 解压配置 设置环境变量 连接设备 adb 识别设备 运行测试 tradefed 执行 生成测试报告 XML / HTML 格式 推荐使用 Linux 主机,设备需运行 userdebug 或 eng 版本系统

1.4 运行 Camera CTS 测试的典型命令

以下为常用的 Camera CTS 测试命令示例:

# 运行所有 Camera 测试模块
./cts-tradefed run cts --plan Camera

# 运行指定测试模块
./cts-tradefed run cts --module CtsCameraTestCases

# 运行单个测试类
./cts-tradefed run cts --module CtsCameraTestCases --test android.hardware.camera2.cts.CameraManagerTest

# 运行单个测试方法
./cts-tradefed run cts --module CtsCameraTestCases --test android.hardware.camera2.cts.CameraManagerTest#testGetCameraIdList

# 带重试机制运行(失败用例自动重试 2 次)
./cts-tradefed run cts --plan Camera --retry 2
最佳实践: 在开发阶段,建议先运行 --plan Camera 全量测试一次,然后针对失败用例使用 --retry 参数重试,以排除偶发环境问题。对于 HAL 修改,应重点验证 CtsCameraTestCases 和 CtsCameraHALTestCases 两个模块。

1.5 测试结果解读

CTS 测试结果以 XML 格式存储在 android-cts/results/<timestamp>/ 目录下。关键文件包括:

  • test_result.xml:汇总所有测试模块的 pass/fail/ignore 计数。
  • test_result.html:可读性更好的 HTML 报告,支持按模块、用例筛选。
  • logs/:包含设备日志(logcat)、测试框架日志(tradefed.log)和详细失败堆栈。

对于 Camera 测试,常见的失败原因包括:

失败类型 典型错误信息 可能原因
特性缺失 CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL 未返回预期值 HAL 未正确填充静态特性元数据
格式不支持 YUV_420_888 格式未在输出流配置中列出 HAL 的 getSupportedOutputFormats 实现不完整
性能不达标 Preview frame rate below 15fps ISP 处理能力不足或驱动瓶颈
稳定性问题 Camera service died after 1000 capture requests HAL 存在内存泄漏或死锁
调试技巧: 当 Camera CTS 测试失败时,首先检查 logs/device_logcat_*.txt 中的 Camera HAL 相关日志,搜索 CameraService、HAL、ERROR 等关键词,通常能快速定位问题根因。