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 相机架构各层之间的调用与验证关系:

CTS Camera 测试架构关系图 CTS Camera 测试与 Android 相机架构关系 CTS Camera 测试用例 Android Camera Framework (CameraManager / CameraDevice) CameraService (native) Camera HAL (HAL3 / HIDL / AIDL) Camera Sensor / ISP 硬件 验证 API 行为 Capture / Stream / Metadata 验证 HAL 行为 process_capture_request CameraTest CameraParameterTest StillCaptureTest VideoTest / MultiViewTest

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 行为验证方法以及常见失败案例分析