Android Auto开发(12)-Deployment & Maintenance

48 阅读5分钟

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.RELEASE
2. 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. 必须通过的测试用例

测试用例验证目标通过标准
ABUpgradeTestA/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 版本是否 ≥ 20251128adb shell getprop ro.securitypatch

🔥 认证通过率提升技巧

  1. 在 CI 流程中强制检查 A/B 升级状态
    # 自动化测试脚本
    if [ $(get_ab_upgrade_status.sh) -ne 0 ]; then
      echo "AB upgrade failed"
      exit 1
    fi
    
  2. 使用 Google 的参考实现
    • Android 参考:car-receiver-library/examples/android/deployment
    • QNX 参考:car-receiver-library/examples/qnx/deployment

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

资源用途避坑提示
Deployment GitHub获取参考实现⚠️ 切勿修改 BootControlManagerPatchManager 内部逻辑
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 测试套件

下一步行动

  1. 立即从 GitHub 下载 deployment 模块参考实现
  2. 按照 QNX 示例 搭建部署环境
  3. CTS 测试工具 运行 ABUpgradeTest 验证 A/B 升级逻辑