09 - 对抗分析与选型对比

本篇是全库的裁决中枢:把 7 个调研方向的方案放进同一张对比矩阵,记录多 agent 交叉验证的关键争议裁决,给出”痛点 → 首选解药”映射和避坑清单。

多个独立 agent 的交叉印证(如 Cuttlefish、GRPCVehicleHardware、car-test-lib、COVESA VSS 被不同方向 agent 反复点名)显著提升了结论可信度。


1. 全景对比矩阵

按”注入层级 × 解决痛点 × 落地门槛 × ROI”横向对比所有候选方案:

方案注入层解决痛点真机可用user 版开源/免费落地门槛ROI
cmd car_service 按名字注入CarServiceP1/P5否(userdebug)极低⭐⭐⭐⭐⭐
inject-error-event/emulate-driving-stateCarServiceP6/场景极低⭐⭐⭐⭐⭐
⭐应用层 mock(mock_vehicle_property_envApp 回调P6✅(项目已有)极低⭐⭐⭐⭐⭐
--mock_from_car --stat(现有主力)VHALP6⭐⭐⭐⭐
vc_client_mockvehiclecoreP7✅(已有)⭐⭐⭐
Cuttlefish + vhalconfig JSON模拟器P7/P9❌(模拟器)(需 AOSP 源码)⭐⭐⭐⭐⭐(战略)
AVD-Automotive模拟器P7(冒烟)极低⭐⭐(仅冒烟)
Android 16 GRPCVehicleHardwareVHAL proxyP7✅(真机代理)高(升 A16)⭐⭐⭐⭐⭐(战略)
cantools+python-can+vcan+can-utilsCAN/DBCP7/P8❌(PC)⭐⭐⭐(电控团队)
candump/canplayer 录制回放CANP8❌(PC)⭐⭐⭐⭐
LogPropMonitor.py(现有)脚本P8(弱)✅(已有)⭐⭐⭐(待升级)
自写 DDS Mock publisher(复用 nddsjava.jar)DDSP10⭐⭐⭐⭐⭐
car-test-lib(FakeCarPropertyService)JVM 单测P9N/AN/A中(需重构)⭐⭐⭐⭐
Hilt+FakeRepositoryJVM 单测P9N/AN/A(重构封装层)⭐⭐⭐⭐(长期)
COVESA VSS 命名标准规范P1/P5(根因)N/AN/A低(规范采纳)⭐⭐⭐⭐⭐
RemotiveLabs(商业云)云 BrokerP7/P8❌(订阅)中(采购/参考)⭐⭐⭐⭐
Vector CANoe/dSPACE HIL总线/HIL电控❌(百万级)⭐(座舱App误购)

录制回放(06 篇)、应用层测试(07 篇)两行的细节见对应专篇,agent 加固后补充。


2. 对抗裁决——多 agent 交叉验证的关键争议

裁决 1:离线环境选 Cuttlefish 还是 AVD-Automotive?

  • 模拟器 agent + AAOS 官方 agent 双重印证:Cuttlefish 胜出。
  • AVD-Automotive 零门槛但 priv-app 装不上、3791 prop 不支持 → 仅冒烟;CF 支持 vhalconfig JSON 加自定义 prop、userdebug 可重签 → 团队底座。
  • 裁决:AVD 做 Day-1 demo,CF 做长期底座。

裁决 2:VHAL mock 还是 CAN 注入?

  • 不是二选一,而是分层互补(CAN agent + 01 篇分层认知)。
  • VHAL mock 验证 CarService 及以上(调 App UI 够);CAN 注入多验证 vehiclecore 一层(DBC 解析/映射)。
  • 裁决:MiCarSettings App 团队用 VHAL mock;vehiclecore/MCU 验证才上 CAN(平台团队范畴)。

裁决 3:DDS mock 要不要买 RTI license?

  • DDS agent 直接读代码裁决:不用。项目已有 nddsjava.jar + rtiddsgen 生成的 DataWriter,~50 行 Kotlin 即可 mock。
  • Security 当前禁用 → 开源 DDS 也能接入。
  • 裁决:自写 Mock publisher,商业工具仅 Express 免费版作锦上添花。

裁决 4:应用层测试用 car-test-lib 还是 Hilt+FakeRepo?

  • 待 07 篇 agent 加固。初步判断(基于项目封装层硬编码 new VehicleControlManager(mContext) 无 DI):
    • car-test-lib:接得快,但只能 mock CarPropertyManager 行为层,覆盖有限;
    • Hilt+FakeRepo:最干净,但要重构 SettingsCarPropertyManager 出 Repository 接口,改造量大。
  • 裁决(初稿):短期 car-test-lib 补 Controller 单测;长期推 Repository 接口 + Hilt。

裁决 5:座舱 App 团队能不能采购 Vector CANoe?

  • 业界 agent 强烈反对:CANoe 工作在 CAN/Ethernet 总线层,跨不到 Android Framework/VHAL 层,对 MiCarSettings 投入产出比极差。
  • 裁决:座舱 App 团队禁采购 CANoe/dSPACE;这些是整车电控团队的工具。

裁决 6:要不要对齐 COVESA VSS?

  • 业界 agent 列为”最重要建议”,且 AOSP 已有 Vehicle Signal Catalogs 对齐。
  • 裁决:P0 采纳,作为自研 Broker 的命名标准,避免重新发明轮子。

3. 痛点 → 首选解药映射(一查即得)

痛点首选解药备选见篇
P1 propId 难记cmd car_service 按名字 + 推动 micar prop 注册进 HalPropertyDebugUtilsCOVESA VSS 命名02
P2 areaId 语义get-carpropertyconfig 查配置02
P3 平台差异service list | grep automotive.vehicle 判定 + 11 篇
P4 user 版拦截应用层 mock(settings put)/ VHAL --mock_from_car(不受限)01
P5 命令冗长cmd car_service 按名字 + 封装 CLI/GUICarDemo02
P6 异常状态⭐应用层 mock_vehicle_property_env + inject-error-event--mock_from_car --stat01/02
P7 难离车短期 AVD 冒烟;长期 Cuttlefish + vhalconfig;战略 GRPCVehicleHardwareRemotiveLabs04/08
P8 回放弱candump/canplayer(真车录制)+ 升级 LogPropMonitor.pyMCAP/Plotjuggler06
P9 应用层难测car-test-lib 补单测 + 长期 Hilt+FakeRepoRobolectric07
P10 DDS 无入口⭐自写 Mock publisher(复用 nddsjava.jar)RTI Express05

4. 避坑清单(不推荐/误购)

原因
vhal_emulator.py 真机直接用依赖 SocketComm 33452,小米 vendor VHAL 没集成
❌ CANdevStudio 当主力2021 后维护停滞
❌ Corellium/Waydroid/redroid 跑 AAOS无 AAOS 镜像,car_service 跑不了
❌ AVD-Automotive 当调试主力priv-app 装不上、3791 prop 不支持,仅冒烟
❌ MiCarSettings 团队采购 Vector CANoe/dSPACE跨不到 Android Framework 层,误购
❌ 照搬 GM 移除 CarPlay 路线用户反弹(业界反面教材)
❌ 自研 Mock 用自创信号命名应对齐 COVESA VSS,否则未来接第三方要重做映射
⚠️ DDS Security 一旦启用开源 DDS 互通方案全失效,需跟踪 /data/vendor/rtidds/SOASecurityEnable.cfg
⚠️ -h/--help 永远空输出小米 vendor VHAL dump 无 help 分支,别指望

5. 选型一句话结论

短期(0 成本,立刻做):把团队 SOP 从 --mock_from_car 切到 cmd car_service <名字>;用起来项目已有的应用层异常 mock(mock_vehicle_property_env);自写 DDS Mock publisher;采纳 COVESA VSS 命名。

中期(开源主导):Cuttlefish + vhalconfig JSON 建离线底座;cantools/canplayer 做真车录制回放;car-test-lib 补 Controller 单测;升级 LogPropMonitor.py 为带时间戳的回放器。

长期(战略):自研 “Mi Car Signal Broker”(参考 RemotiveLabs + VSS);评估 Android 16 GRPCVehicleHardware;推 SettingsCarPropertyManager 重构出 Repository 接口 + Hilt,建立应用层 CI 回归。

绝不:座舱 App 团队采购 Vector/dSPACE 重型工具(那是整车电控团队的)。

详细分阶段动作见 10 落地路线图