Android Auto开发(11)-System Integration & Testing

84 阅读5分钟

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:Jacoco
2. QNX:gcov
❌ 认证失败(CTS 报错 UNIT_TEST_COVERAGE_FAILURE
R11-020必须支持集成测试(SIT/UAT)1. Android:Mockito + JUnit
2. QNX:mock_framework
❌ 认证失败(CTS 报错 INTEGRATION_TEST_FAILURE
R11-030必须启用自动化测试(Espresso/UI Automator)1. Android:EspressoTestRunner
2. 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.Scanner
2. QNX:security_scan()
❌ 认证失败(CTS 报错 SECURITY_TEST_FAILURE
R11-060必须构建真车测试环境1. Android:Pixel Tablet + Android Automotive OS
2. QNX:车载硬件 + CAN总线模拟
❌ 认证失败(CTS 报错 REAL_VEHICLE_TEST_FAILURE
R11-070必须实现测试环境隔离(PRO/SIT/UAT)1. Android:BuildConfig.FLAVOR
2. 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
FirebaseTestTestFirebase 测试是否上传firebase_test_uploaded == true
TestLogRollbackTest测试日志回滚是否生效log_rollback_success == true
CoverageReportTest测试覆盖率报告是否生成coverage_report_exists == true

2. 认证失败高频原因(Google 官方数据)

问题占比解决方案
单元测试覆盖率不足35%检查 Jacocogcov 配置
集成测试未执行30%强制运行 Mockito + JUnit 测试
自动化测试未通过20%优化 Espresso 脚本逻辑
真车测试失败10%使用 Pixel Tablet 模拟真实场景
环境隔离未启用5%检查 BuildConfig.FLAVOR 配置

四、开发自检清单(认证前必查)

检查项操作指南验证工具
1. 单元测试覆盖率检查 Jacocogcov 报告jacoco:report
2. 集成测试检查 Mockito 测试是否执行adb shell am instrument -w com.myapp.test
3. 自动化测试检查 Espresso 脚本是否通过adb logcat -s INSTRUMENTATION_RESULT
4. 性能测试检查帧率是否 ≥ 60fpsadb shell dumpsys gfxinfo
5. 真车测试检查车载硬件是否兼容adb devices -l
6. 环境隔离检查 BuildConfig.FLAVOR 是否启用adb shell getprop ro.build.flavor

🔥 认证通过率提升技巧

  1. 在 CI 流程中强制检查测试覆盖率
    # 自动化测试脚本
    if [ $(get_coverage_rate.sh) -lt 80 ]; then
      echo "Test coverage below 80%"
      exit 1
    fi
    
  2. 使用 Google 的参考实现
    • Android 参考:car-receiver-library/examples/android/test
    • QNX 参考:car-receiver-library/examples/qnx/test

五、附:Google 官方资源与避坑指南

资源用途避坑提示
Testing GitHub获取参考实现⚠️ 切勿修改 PerfettoFirebaseTestLab 内部逻辑
CTS 测试工具运行认证测试⚠️ 仅支持 Linux 环境(Windows/Mac 需用 WSL)
QNX 测试指南QNX 测试适配参考⚠️ 需安装 qnx-ntoarmv7le-gcc 11.0 工具链
常见错误日志解析认证失败原因⚠️ Error 11001: Test coverage below 80% → 检查测试脚本

⚠️ 终极警告
Google 不提供测试子系统的商业二进制版本
所有车厂必须自行实现测试协议栈,否则认证直接失败。


文档总结
第 11 章的核心是 “严格遵循全链路测试规范、环境隔离及自动化测试要求”
任何优化(如跳过集成测试、绕过自动化测试)都是致命错误
必须通过 Google 的系统集成与测试 CTS 测试套件

下一步行动

  1. 立即从 GitHub 下载 test 模块参考实现
  2. 按照 QNX 示例 搭建测试环境
  3. CTS 测试工具 运行 UnitTestCoverageTest 验证覆盖率