04 - AAOS 模拟器与离线环境

解决 P7(难脱离真车)的根本方案:让车控信号链路在没有真车/实机的情况下跑起来。本篇对标业界所有 AAOS 模拟器/云真机方案。

解决痛点:P7 难离车 / P9 应用层 CI(间接)


1. 方案速览与结论

方案能跑 car_service 全链路支持 3791 自定义 proppriv-app+平台签名免费结论
Cuttlefish AAOS✅ 完整✅ vhalconfig JSON✅ userdebug 可重签✅ 开源⭐ 小米最该投入的底座
AVD-Automotive✅ 完整❌ 仅标准 prop❌ release build仅冒烟,不能当主力
Genymotion SaaS✅ 完整⚠️ 需定制⚠️ 需定制❌ $179+/月备用(出差/演示)
Corellium❌ 无 AAOS 镜像❌ 企业价不推荐
Waydroid/redroid❌ 无 AAOS 镜像不推荐

两个独立 agent(模拟器方向 + AAOS 官方方向)都点名 Cuttlefish + vhalconfig JSON 是 Google 给 OEM 的”标准答案”,交叉印证可信。


2. Cuttlefish (CF) —— 推荐底座

原理

AOSP 官方”准真实”虚拟设备,基于 crosvm + KVM,跑未改动的完整 AOSP 镜像(bootloader/kernel/system/vendor 全套),含完整 car_service/VehicleService/FakeVehicleHardware。AAOS 目标:aosp_cf_x86_64_auto-userdebug

本地起一台

sudo apt install -y cuttlefish-common cuttlefish-base cuttlefish-user
sudo usermod -aG cuttlefish-network,kvm $USER && reboot
repo init -u .../platform/manifest -b android-latest-release && repo sync -c -j8
source build/envsetup.sh && lunch aosp_cf_x86_64_auto-userdebug && m
HOME=$PWD launch_cvd --num_instances=1 -daemon=true
adb connect localhost:6520      # 或 acloud create --local-instance
stop_cvd

在 CF 上注入信号(工具全可用)

adb shell cmd car_service inject-vhal-event HVAC_POWER_ON 1     # 按名字(见 02 篇)
adb shell cmd car_service emulate-driving-state drive           # 聚合驾驶态
python3 vhal_emulator.py --prop 0x11400400 --value 60 --area 0  # host 工具

三大拦路虎与对策

  1. 小米 3791 自定义 prop 不在 AOSP → 写代码生成器,从小米 VHAL AIDL/头文件导出成 /vendor/etc/automotive/vhalconfig/xiaomi.json(Android 14+ 零代码,无需改 VHAL 源码)。
  2. priv-app + 平台签名 → 生成小米 platform key,MiCarSettings 同 key 签名,预装 /system/priv-app/MiCarSettings/ + 写 privapp-permissions-xiaomi.xml
  3. CarService 私有 API 漂移 → 小米 car-builtin 改动需 cherry-pick 到 CF manifest,建议直接 fork 小米整车 manifest。

3. acloud —— 团队共享封装

AOSP 自带 AVD 管理 CLI,launch_cvd 的上层包装 + 远端 GCE 编排:

acloud create --local-instance        # 本地起 CF
acloud create --build-id <id>         # 从 ci.android.com 拉指定 build

团队推广:把”小米定制 CF 镜像”封装成 micar-emulator start/stop/inject <prop> <val> 一键 CLI,成员 micar-emulator pull --version <x> 拉镜像。远程模式国内走自建机房(避免 GCE 跨境合规)。


4. AVD-Automotive —— 零门槛但仅冒烟

Android Studio AVD Manager 直接下发的 AAOS 镜像(含 “Automotive With Play Store”),基于 Goldfish/QEMU,5 分钟启动、零源码。自带 GUI “VHAL Properties” 面板(Tools > VHAL)。

致命局限

  • Google release build,无 root adb / 不能 remount → priv-app 装不上(MiCarSettings 直接 INSTALL_FAILED)。
  • VHAL 只有 AOSP 标准 prop,小米 3791 自定义 prop 不存在
  • 仅适合”编译能不能过 / 标准 Car SDK API 对不对”的快速冒烟,不能替代真车
  • 想真正可用:用 CF 的 userdebug 自定义镜像通过 AVD Manager 加载。

5. Genymotion SaaS AAOS 14 —— 商业云(备用)

2024 起官方提供 AAOS 14 镜像,核心卖点是可编程 gRPC VHAL(CI 友好)。~$179–219/月。


6. 不推荐:Corellium / Waydroid / redroid

  • Corellium:Arm 虚拟化强,但无现成 AAOS 镜像(官方 generic device 基于 Ranchu,无 car_service)。
  • Waydroid/redroid:容器化方案,目标是 mobile AOSP,AAOS 依赖的 car_service+VHAL+car-builtin-lib 都不在镜像里,VHAL 注入无解,实际不可行。

7. 小米落地路线(4 阶段)

阶段周期产出
P1 基线镜像1-2 周1高配 Linux+KVM 服务器(32C/64G/500G),aosp_cf_x86_64_auto-userdebug 跑通 inject-vhal-event
P2 小米定制2-3 周2⭐从小米 VHAL AIDL 生成 vhalconfig/xiaomi.json(3791 prop);MiCarSettings 平台签名预装;CarDemo 功能迁移成 inject 脚本/Web 控制台
P3 团队平台化1-2 周1-2封装 micar-emulator CLI;镜像归档内部制品库;CI 每 PR 起一台 CF 跑 UI/信号冒烟
P4 云真机演进长期中心化部署内部机房;引入 Android 16 GRPCVehicleHardware,信号源 server 团队共享

关键风险

  • 3791 prop 数据缺失:必须从小米 VHAL 团队拿完整 prop 定义表,否则 JSON 生成不出——最大依赖。
  • 私有 API 漂移:CF manifest 建议 fork 小米整车 manifest。
  • arm-only native lib:CF 主力 x86_64,遇 arm-only so 需编译 arm64 CF(实验性)或临时砍除。

预期收益(vs 真机 + CarDemo)

  • 开发者人手一台”虚拟车”,等车时间从天级降到秒级
  • 可覆盖真车难触发的故障码/极限信号,UI 测试覆盖率提升一个量级
  • CI 自动化回归;新人 onboarding 不依赖申请真机。