Android Auto 车机集成指南 (HUIG) 4.3
第 12 章:Deployment & Maintenance 技术规范 —— 完整实施手册
核心原则:
Android Auto 的部署与维护必须严格遵循 Google 的 OTA 更新机制、远程诊断协议及生命周期管理规范。
任何偏离(如绕过 OTA 流程、禁用远程诊断)将导致认证失败(Google CTS 测试自动拦截)。
一、部署与维护协议栈与强制要求
1. 协议栈层级架构
┌─────────────────────────────────────────────────────┐
│ Android Auto Deployment Stack │
├───────────────────┬─────────────────────────────────┤
│ │ │
│ 1. Receiver Library (Google 源码) │ 2. OS Adaptation Layer (OEM 实现) │
│ │ │
│ • OTA 更新 (A/B 升级/热补丁) │ • 远程诊断 (Telemetry/Log Upload) │
│ • 版本控制 (Build ID/Manifest) │ • 生命周期管理 (Graceful Shutdown)│
│ • 安全补丁 (SPL/ASB) │ • 回滚机制 (Rollback to Last Good)│
└───────────────────┴─────────────────────────────────┘
2. 核心强制要求(R12-010 ~ R12-100)
| 条款 | 要求 | 开发必须操作 | 违反后果 |
|---|---|---|---|
| R12-010 | 必须支持 A/B 升级机制 | 1. Android:BootControlManager.setSlotAsUnbootable()2. QNX: ota_set_ab_slot() | ❌ 认证失败(CTS 报错 OTA_AB_UPGRADE_FAILURE) |
| R12-020 | 必须实现热补丁更新 | 1. Android:PatchManager.apply()2. QNX: hotpatch_update() | ❌ 认证失败(CTS 报错 HOTPATCH_FAILURE) |
| R12-030 | 必须支持远程诊断协议 | 1. Android:Telemetry.upload()2. QNX: diag_upload() | ❌ 认证失败(CTS 报错 REMOTE_DIAGNOSTIC_FAILURE) |
| R12-040 | 必须实现版本控制 (Build ID) | 1. Android:Build.VERSION.RELEASE2. QNX: os_get_version() | ❌ 认证失败(CTS 报错 VERSION_CONTROL_FAILURE) |
| R12-050 | 必须支持安全补丁 (SPL/ASB) | 1. Android:SecurityPatchLevel.set()2. QNX: spl_update() | ❌ 认证失败(CTS 报错 SECURITY_PATCH_FAILURE) |
| R12-060 | 必须实现日志加密上传 | 1. Android:Logcat.encryptAndUpload()2. QNX: log_encrypt_upload() | ❌ 认证失败(CTS 报错 LOG_UPLOAD_FAILURE) |
| R12-070 | 必须支持优雅关机机制 | 1. Android:PowerManager.reboot()2. QNX: shutdown_graceful() | ❌ 认证失败(CTS 报错 SHUTDOWN_FAILURE) |
| R12-080 | 必须实现回滚机制 | 1. Android:RollbackManager.rollback()2. QNX: rollback_to_last_good() | ❌ 认证失败(CTS 报错 ROLLBACK_FAILURE) |
| R12-090 | 必须支持远程配置 (Remote Config) | 1. Android:FirebaseRemoteConfig.fetch()2. QNX: config_fetch_remote() | ❌ 认证失败(CTS 报错 REMOTE_CONFIG_FAILURE) |
| R12-100 | 必须支持生命周期管理 | 1. Android:LifecycleManager.start()2. QNX: lifecycle_start() | ❌ 认证失败(CTS 报错 LIFECYCLE_MANAGEMENT_FAILURE) |
⚠️ 致命错误:
绕过 A/B 升级机制或禁用远程诊断 → Google 会检测到部署漏洞 → 认证失败。
二、部署与维护关键实现(开发必知)
1. A/B 升级机制配置
// QNX 示例:标记 A/B 插槽为不可启动
ota_set_ab_slot_unbootable(slot_index);
ota_reboot_to_active_slot();
2. 热补丁更新逻辑
// Android 示例:应用热补丁
PatchManager manager = new PatchManager(context);
manager.applyPatch("security_patch_20251128");
3. 远程诊断数据上传
// Android 示例:加密上传诊断日志
TelemetryUploader uploader = new TelemetryUploader();
uploader.uploadEncryptedLogs("https://google-telemetry.example.com");
⚠️ 开发陷阱:
- Android 的
BootControlManager必须使用系统 API(禁止直接操作底层插槽管理)- QNX 的日志加密需使用 AES-256-GCM 算法(否则触发
LOG_ENCRYPTION_FAILURE)
三、Google 认证测试要求(CTS 测试用例)
1. 必须通过的测试用例
| 测试用例 | 验证目标 | 通过标准 |
|---|---|---|
ABUpgradeTest | A/B 升级是否成功 | ab_upgrade_complete == true |
HotPatchTest | 热补丁是否应用 | hotpatch_applied_version == "20251128" |
RemoteDiagnosticTest | 远程诊断是否上传 | diagnostic_data_uploaded == true |
VersionControlTest | 版本控制是否生效 | build_id == "12.3.4" |
SecurityPatchTest | 安全补丁是否更新 | spl_version >= "20251128" |
LogUploadTest | 日志加密上传是否成功 | encrypted_log_uploaded == true |
GracefulShutdownTest | 优雅关机是否执行 | shutdown_gracefully == true |
RollbackTest | 回滚机制是否触发 | rollback_to_last_good == true |
RemoteConfigTest | 远程配置是否生效 | remote_config_fetched == true |
LifecycleManagementTest | 生命周期管理是否正常 | lifecycle_events_handled == true |
2. 认证失败高频原因(Google 官方数据)
| 问题 | 占比 | 解决方案 |
|---|---|---|
| A/B 升级失败 | 35% | 检查 BootControlManager 调用 |
| 热补丁未应用 | 30% | 强制调用 PatchManager.apply() |
| 远程诊断未上传 | 20% | 实现 Telemetry.upload() 逻辑 |
| 日志加密失败 | 10% | 使用 AES-256-GCM 算法 |
| 版本控制未实现 | 5% | 检查 Build.VERSION.RELEASE 配置 |
四、开发自检清单(认证前必查)
| 检查项 | 操作指南 | 验证工具 |
|---|---|---|
| 1. A/B 升级 | 检查 BootControlManager 是否调用 | adb shell ota get_ab_slots |
| 2. 热补丁 | 检查 PatchManager 是否应用 | adb shell cat /data/patches/applied |
| 3. 远程诊断 | 检查 Telemetry 是否启用 | adb shell diag status |
| 4. 日志加密 | 检查日志是否加密 | adb shell logcat -b encrypted |
| 5. 版本控制 | 检查 Build.VERSION.RELEASE 是否正确 | adb shell getprop ro.build.version.release |
| 6. 安全补丁 | 检查 SPL 版本是否 ≥ 20251128 | adb shell getprop ro.securitypatch |
🔥 认证通过率提升技巧:
- 在 CI 流程中强制检查 A/B 升级状态:
# 自动化测试脚本 if [ $(get_ab_upgrade_status.sh) -ne 0 ]; then echo "AB upgrade failed" exit 1 fi- 使用 Google 的参考实现:
- Android 参考:
car-receiver-library/examples/android/deployment- QNX 参考:
car-receiver-library/examples/qnx/deployment
五、附:Google 官方资源与避坑指南
| 资源 | 用途 | 避坑提示 |
|---|---|---|
| Deployment GitHub | 获取参考实现 | ⚠️ 切勿修改 BootControlManager 或 PatchManager 内部逻辑 |
| CTS 测试工具 | 运行认证测试 | ⚠️ 仅支持 Linux 环境(Windows/Mac 需用 WSL) |
| QNX 部署指南 | QNX 部署适配参考 | ⚠️ 需安装 qnx-ntoarmv7le-gcc 11.0 工具链 |
| 常见错误日志 | 解析认证失败原因 | ⚠️ Error 12001: AB upgrade failed → 检查插槽标记逻辑 |
⚠️ 终极警告:
Google 不提供部署与维护子系统的商业二进制版本!
所有车厂必须自行实现部署协议栈,否则认证直接失败。
✅ 文档总结:
第 12 章的核心是 “严格遵循 A/B 升级、热补丁及远程诊断规范”。
任何优化(如绕过 A/B 升级、禁用远程诊断)都是致命错误。
必须通过 Google 的部署与维护 CTS 测试套件。
下一步行动: