1. CTS 概述:定义、角色与 Camera 测试套件
Android 兼容性测试套件(Compatibility Test Suite,CTS)是 Google 为确保 Android 生态系统一致性与应用兼容性而设计的自动化测试框架。对于 Camera HAL 开发者而言,CTS 不仅是认证门槛,更是验证 HAL 行为是否符合 Android 相机架构规范的权威依据。
1.1 CTS 定义与核心目标
CTS 是一套运行在设备上的可执行测试用例集合,用于验证设备实现是否符合 Android 兼容性定义文档(CDD) 中的强制性要求。其核心目标包括:
- 应用兼容性保障:确保同一应用在不同设备上行为一致。
- API 正确性验证:检查 framework 与 HAL 层接口实现是否符合 AOSP 规范。
- 行为一致性:强制设备在 Camera、Sensor、Graphics 等关键子系统上遵循统一行为模式。
- 安全与权限合规:验证 Camera 权限模型、数据隔离等安全机制。
关键认知: CTS 不是性能测试工具,而是 行为符合性验证 工具。Camera CTS 失败通常意味着 HAL 实现与 Android 框架预期之间存在偏差,可能导致第三方相机应用崩溃或功能异常。
1.2 CTS 在 Android 兼容性中的角色
在 Android 兼容性认证体系中,CTS 处于核心验证层,与以下组件协同工作:
| 组件 | 角色 | 与 Camera 的关系 |
|---|---|---|
| CDD | 定义兼容性规则(必须/建议/可选) | 规定 Camera 分辨率、帧率、HDR、RAW 等硬件能力要求 |
| CTS | 自动化验证 CDD 规则的可执行测试 | 覆盖 Camera API2 行为、Capture 流程、Stream 配置等 |
| CTS Verifier | 需要人工干预的半自动化测试 | 验证闪光灯同步、对焦精度、多摄像头标定等主观项 |
| GTS / STS | Google 服务 / 安全补丁验证 | Camera 权限、安全漏洞、Google 服务集成 |
设备必须通过 CTS 全部必测项(含 Camera 模块)才能预装 Google 移动服务(GMS)。HAL 层开发者需要理解:CTS 测试用例直接映射到 HAL 接口的输入输出约束,测试失败往往指向 HAL 对 metadata 的填充错误、buffer 管理异常或 pipeline 状态机偏离。
1.3 CTS Camera 测试套件概览
Camera CTS 测试套件位于 cts/tests/tests/camera/ 目录,主要分为以下测试模块:
- CameraTest:核心 API2 行为测试,覆盖 CaptureSession、CameraDevice、CameraManager 的常规与异常路径。
- CameraExtensionTest:验证厂商扩展(如美颜、HDR 模式)的接口一致性。
- CameraMultiViewTest:多摄像头同时打开、逻辑摄像头切换、物理摄像头流测试。
- CameraStillCaptureTest:静态拍照的 AE/AF/AWB 行为、JPEG/RAW/YUV 输出质量。
- CameraVideoTest:视频录制帧率、编码格式、音视频同步、Camera2 录像 pipeline。
- CameraParameterTest:逐个验证 android.control.*、android.sensor.*、android.lens.* 等 metadata 的读写与约束。
开发者提示: 在 HAL 开发阶段,建议优先运行
CameraParameterTest 和 CameraTest 中的基础 capture 用例。这两个模块覆盖了 HAL 必须实现的 80% 以上核心行为,且失败信息通常能直接定位到 HAL 的 process_capture_request 或 construct_default_request_settings 实现。
1.4 CTS Camera 测试架构关系图
下图展示了 CTS Camera 测试用例与 Android 相机架构各层之间的调用与验证关系:
1.5 测试用例构造与 HAL 验证的映射关系
理解 CTS 测试用例如何映射到 HAL 行为,是后续章节的基础。下表总结了典型 CTS 测试类别与 HAL 接口的对应关系:
| CTS 测试类别 | 验证的 HAL 接口 / 行为 | 常见失败根因(HAL 侧) |
|---|---|---|
| CameraTest#testCameraDeviceCreate | camera_device.open()、getCameraCharacteristics() |
HAL 返回的 metadata 缺失必填项(如 REQUEST_PARTIAL_RESULT_COUNT) |
| CameraParameterTest#testAvailableOutputSizes | getCameraCharacteristics(SCALER_AVAILABLE_STREAM_CONFIGURATIONS) |
输出尺寸列表不符合 CDD 分辨率要求,或缺少常用 16:9/4:3 比例 |
| CameraStillCaptureTest#testJpegCapture | process_capture_request() 输出 JPEG buffer |
JPEG 编码质量不达标、EXIF 数据缺失、缩略图尺寸错误 |
| CameraVideoTest#testVideoRecording | process_capture_request() 输出 YUV/HEVC buffer |
帧率不稳定、timestamp 跳跃、编码器配置与 HAL 输出不匹配 |
| CameraMultiViewTest#testConcurrentCamera | camera_device.open() 并发、ICameraDeviceCallback |
HAL 不支持同时打开多个物理 camera,或资源分配冲突 |
常见误区: 部分开发者认为 CTS 失败可以通过修改 framework 层绕过。实际上,CTS 测试用例直接调用 framework 公开 API,而 framework 会将这些调用转化为 HAL 接口请求。如果 HAL 行为不符合规范,即使修改 framework 层,在 CTS 认证环境中仍会被检测为失败。正确的做法是 从 HAL 层修复行为,而非在 framework 层打补丁。
1.6 本章小结
CTS 是 Android 兼容性认证的核心执行工具,Camera CTS 测试套件覆盖了从 API 行为到 HAL 实现的完整验证链路。作为 HAL 层开发者,需要建立以下认知:
- CTS 测试用例 = 对 HAL 接口行为的 可执行规格说明书
- 每个测试失败都对应 HAL 实现与 AOSP 规范之间的 具体偏差
- Camera 测试套件按功能模块划分,便于定位问题所属的 HAL 子系统
- 后续章节将深入每个测试用例的构造逻辑、HAL 行为验证方法以及常见失败案例分析