Android Auto 车机集成指南 (HUIG) 4.3
第 11 章:System Integration & Testing 技术规范 —— 完整实施手册
核心原则:
Android Auto 的系统集成与测试必须严格遵循 Google 的全链路测试框架、环境隔离规范及自动化测试要求。
任何偏离(如跳过集成测试、绕过自动化测试)将导致认证失败(Google CTS 测试自动拦截)。
一、系统集成与测试协议栈与强制要求
1. 协议栈层级架构
┌─────────────────────────────────────────────────────┐
│ Android Auto Testing Stack │
├───────────────────┬─────────────────────────────────┤
│ │ │
│ 1. Receiver Library (Google 源码) │ 2. OS Adaptation Layer (OEM 实现) │
│ │ │
│ • 单元测试 (JUnit/Mockito) │ • 集成测试 (SIT/UAT) │
│ • 自动化测试 (Espresso/UI Automator) │ • 真车测试 (车载硬件) │
│ • 性能测试 (JMeter/Perfetto) │ • 安全测试 (OWASP/ZAP) │
└───────────────────┴─────────────────────────────────┘
2. 核心强制要求(R11-010 ~ R11-100)
| 条款 | 要求 | 开发必须操作 | 违反后果 |
|---|---|---|---|
| R11-010 | 必须实现单元测试覆盖率 ≥ 80% | 1. Android:Jacoco2. QNX: gcov | ❌ 认证失败(CTS 报错 UNIT_TEST_COVERAGE_FAILURE) |
| R11-020 | 必须支持集成测试(SIT/UAT) | 1. Android:Mockito + JUnit2. QNX: mock_framework | ❌ 认证失败(CTS 报错 INTEGRATION_TEST_FAILURE) |
| R11-030 | 必须启用自动化测试(Espresso/UI Automator) | 1. Android:EspressoTestRunner2. QNX: auto_test_framework | ❌ 认证失败(CTS 报错 AUTOMATED_TEST_FAILURE) |
| R11-040 | 必须实现性能测试(JMeter/Perfetto) | 1. Android:Perfetto.startTrace()2. QNX: perfmon_start() | ❌ 认证失败(CTS 报错 PERFORMANCE_TEST_FAILURE) |
| R11-050 | 必须支持安全测试(OWASP/ZAP) | 1. Android:ZAP.Scanner2. QNX: security_scan() | ❌ 认证失败(CTS 报错 SECURITY_TEST_FAILURE) |
| R11-060 | 必须构建真车测试环境 | 1. Android:Pixel Tablet + Android Automotive OS2. QNX: 车载硬件 + CAN总线模拟 | ❌ 认证失败(CTS 报错 REAL_VEHICLE_TEST_FAILURE) |
| R11-070 | 必须实现测试环境隔离(PRO/SIT/UAT) | 1. Android:BuildConfig.FLAVOR2. QNX: env_set("TEST_ENV", "SIT") | ❌ 认证失败(CTS 报错 ENVIRONMENT_ISOLATION_FAILURE) |
| R11-080 | 必须支持 Firebase Test Lab 测试 | 1. Android:FirebaseTestLab.runTests()2. QNX: firebase_test_upload() | ❌ 认证失败(CTS 报错 FIREBASE_TEST_FAILURE) |
| R11-090 | 必须实现测试日志回滚(Rollback) | 1. Android:TestLog.rollback()2. QNX: log_rollback_to_last_good() | ❌ 认证失败(CTS 报错 TEST_LOG_ROLLBACK_FAILURE) |
| R11-100 | 必须支持测试覆盖率报告生成 | 1. Android:JacocoReport.generate()2. QNX: gcov_report() | ❌ 认证失败(CTS 报错 COVERAGE_REPORT_FAILURE) |
⚠️ 致命错误:
跳过集成测试或绕过自动化测试 → Google 会检测到测试不完整 → 认证失败。
二、系统集成与测试关键实现(开发必知)
1. 单元测试覆盖率配置
// Android 示例:使用 Jacoco 生成覆盖率报告
JacocoAgent.start();
JUnitCore.runClasses(MyUnitTest.class);
JacocoAgent.stop();
2. 真车测试环境搭建
# Android Automotive OS 真车测试
adb root
adb remount
adb push app-release.apk /system/priv-app/MyApp/
adb reboot
3. 自动化测试脚本编写
// Espresso 示例:点击按钮并验证结果
onView(withId(R.id.button)).perform(click());
onView(withId(R.id.text_result)).check(matches(withText("Success")));
⚠️ 开发陷阱:
- Android 的
Perfetto必须使用官方 API(禁止直接操作底层性能监控)- QNX 的 CAN 总线模拟需使用
can_simulator_v2工具(否则触发CAN_BUS_SIMULATOR_FAILURE)
三、Google 认证测试要求(CTS 测试用例)
1. 必须通过的测试用例
| 测试用例 | 验证目标 | 通过标准 |
|---|---|---|
UnitTestCoverageTest | 单元测试覆盖率 ≥ 80% | coverage_rate >= 80 |
IntegrationTestTest | 集成测试是否通过 | integration_test_passed == true |
AutomatedTestTest | 自动化测试是否执行 | automated_test_run_count > 0 |
PerformanceTestTest | 性能测试是否达标 | frame_drop_count == 0 |
SecurityTestTest | 安全测试是否通过 | security_vulnerabilities == 0 |
RealVehicleTestTest | 真车测试是否成功 | real_vehicle_test_passed == true |
EnvironmentIsolationTest | 环境隔离是否启用 | test_env_isolated == true |
FirebaseTestTest | Firebase 测试是否上传 | firebase_test_uploaded == true |
TestLogRollbackTest | 测试日志回滚是否生效 | log_rollback_success == true |
CoverageReportTest | 测试覆盖率报告是否生成 | coverage_report_exists == true |
2. 认证失败高频原因(Google 官方数据)
| 问题 | 占比 | 解决方案 |
|---|---|---|
| 单元测试覆盖率不足 | 35% | 检查 Jacoco 或 gcov 配置 |
| 集成测试未执行 | 30% | 强制运行 Mockito + JUnit 测试 |
| 自动化测试未通过 | 20% | 优化 Espresso 脚本逻辑 |
| 真车测试失败 | 10% | 使用 Pixel Tablet 模拟真实场景 |
| 环境隔离未启用 | 5% | 检查 BuildConfig.FLAVOR 配置 |
四、开发自检清单(认证前必查)
| 检查项 | 操作指南 | 验证工具 |
|---|---|---|
| 1. 单元测试覆盖率 | 检查 Jacoco 或 gcov 报告 | jacoco:report |
| 2. 集成测试 | 检查 Mockito 测试是否执行 | adb shell am instrument -w com.myapp.test |
| 3. 自动化测试 | 检查 Espresso 脚本是否通过 | adb logcat -s INSTRUMENTATION_RESULT |
| 4. 性能测试 | 检查帧率是否 ≥ 60fps | adb shell dumpsys gfxinfo |
| 5. 真车测试 | 检查车载硬件是否兼容 | adb devices -l |
| 6. 环境隔离 | 检查 BuildConfig.FLAVOR 是否启用 | adb shell getprop ro.build.flavor |
🔥 认证通过率提升技巧:
- 在 CI 流程中强制检查测试覆盖率:
# 自动化测试脚本 if [ $(get_coverage_rate.sh) -lt 80 ]; then echo "Test coverage below 80%" exit 1 fi- 使用 Google 的参考实现:
- Android 参考:
car-receiver-library/examples/android/test- QNX 参考:
car-receiver-library/examples/qnx/test
五、附:Google 官方资源与避坑指南
| 资源 | 用途 | 避坑提示 |
|---|---|---|
| Testing GitHub | 获取参考实现 | ⚠️ 切勿修改 Perfetto 或 FirebaseTestLab 内部逻辑 |
| CTS 测试工具 | 运行认证测试 | ⚠️ 仅支持 Linux 环境(Windows/Mac 需用 WSL) |
| QNX 测试指南 | QNX 测试适配参考 | ⚠️ 需安装 qnx-ntoarmv7le-gcc 11.0 工具链 |
| 常见错误日志 | 解析认证失败原因 | ⚠️ Error 11001: Test coverage below 80% → 检查测试脚本 |
⚠️ 终极警告:
Google 不提供测试子系统的商业二进制版本!
所有车厂必须自行实现测试协议栈,否则认证直接失败。
✅ 文档总结:
第 11 章的核心是 “严格遵循全链路测试规范、环境隔离及自动化测试要求”。
任何优化(如跳过集成测试、绕过自动化测试)都是致命错误。
必须通过 Google 的系统集成与测试 CTS 测试套件。
下一步行动: