Android Automotive OS 与普通 Android 手机系统的架构差异是什么?
解读
面试官问“架构差异”,并不是让你把 AOSP 代码目录背一遍,而是想看三件事:
- 你是否知道车载场景对可靠性、实时性、安全合规的硬性要求;
- 你是否能把手机系统里“能省就省”的模块,对应到车载里“必须留、必须改、必须加”的模块;
- 你是否能把差异落到具体技术决策:进程模型、SELinux 策略、HAL 接口、系统服务、应用框架、升级机制、权限模型、测试流程。
一句话:手机是“消费级”,车载是“车规级”,架构差异就是“怎么把消费级改写成车规级”。
知识点
-
车规级硬件抽象层(Vehicle HAL)
- 定义在 /hardware/interfaces/automotive/vehicle/2.0 及以上版本
- 用 HIDL/AIDL 描述车身信号:车速、档位、空调、车门、燃油、EV 电池
- 手机侧无此 HAL,车载必须实现且通过 CTS-on-Truck/VTS 认证
-
系统服务差异
- CarService 作为系统级服务常驻 system_server 进程,内部再拆: – CarPowerService:管理点火、熄火、休眠、唤醒序列(与 kernel 的 suspend-to-RAM 对齐) – CarPropertyService:把 Vehicle HAL 属性映射成 Android 属性,供上层调用 – CarAudioService:多音区、优先级抢占、紧急提示音(eCall)路由 – CarPackageManagerService:车机专用权限,禁止第三方 APK 在行驶中启动视频类 Activity
- 手机侧只有 ActivityManager、AudioService、PowerManager,无 CarService
-
多用户与多屏模型
- 车载采用“系统用户(System User)+ 前台乘客用户(Foreground User)+ 后台临时用户(Rear Seat User)”模型,支持 Driver-Only 模式与 Multi-Display 安全隔离
- 手机侧多用户仅用于工作资料或儿童空间,不会同时激活两块屏幕
-
SELinux 与安全合规
- 车载在 system/sepolicy 里新增 automotive/domain.te、car_service.te,对 Vehicle HAL、CarService、VMCU 访问线程做 MLS/MLS-CAP 限制
- 国内过《汽车整车信息安全技术要求》(GB/T 40861)与《汽车软件升级通用技术要求》(GB/T 40857),SELinux 必须 enforcing 且通过渗透测试
-
升级与回滚
- 车载必须使用 A/B 无缝系统分区 + 虚拟 AB 压缩快照,保证 30 分钟内完成全量 OTA,升级失败可回滚到上一次“可行驶”版本
- 手机侧允许用户跳过版本,车载侧由车厂 TSP 平台强制推送,且需先经过仿真台架、封闭道路、公开道路三级测试
-
应用框架限制
- 禁止直接使用 android.permission.CAMERA、RECORD_AUDIO,需通过 CarUxRestrictionsManager 检查行驶状态
- 禁止后台启动 Activity,必须使用 SystemUI 提供的 CarNotificationListener
- 国内厂商(华为鸿蒙车机、百度 CarLife+、阿里斑马)在 AOSP 之上再封装一套 China Automotive SDK,与 Google GAS(Google Automotive Services)不兼容,面试时需说明“国内无 GMS,用高德地图、酷我音乐替代”
-
性能与实时性
- 车载对冷启动要求 <2.5 s 显示 Launcher,Android 10 之后引入 Bootloader 提前渲染 splash 的 Early-Surface 机制
- 音频通路延迟 <50 ms,使用 ALSA tinycompress + FastMixer 线程优先级 SCHED_FIFO:98
- 手机侧无此硬实时指标
-
测试认证
- 必须通过 CTS、GAS-Vehicle-ATS、VTS、STS、BTS、Perf-RT 六套测试,国内还要过中汽研 CATARC 信息安全与 OTA 备案
- 手机侧只需 CTS/GTS/STS
答案
Android Automotive OS 在保持 AOSP 内核、Binder IPC、SELinux 沙箱等大框架不变的前提下,围绕“车规级可靠性、车规级安全、车规级实时”做了四方面重构:
-
新增 Vehicle HAL 与 CarService 把车身信号抽象成 HIDL/AIDL 接口,由 CarPowerService、CarAudioService、CarPropertyService 等系统级服务统一管理,手机系统无此层。
-
多用户+多屏安全隔离 采用 System User + Foreground User 模型,支持仪表盘、中控、副驾、后排四块屏幕独立 DisplayId,通过 CarUxRestrictions 禁止行驶中视频,手机系统无多屏安全策略。
-
升级与回滚车规化 强制 A/B 无缝分区 + 虚拟 AB 压缩,升级失败必须回滚到“可行驶”版本,OTA 流程由车厂 TSP 管控;手机系统允许用户跳过版本。
-
权限、SELinux、性能指标收紧 新增 automotive sepolicy 域,Vehicle HAL 线程优先级 SCHED_FIFO,冷启动 <2.5 s,音频延迟 <50 ms;手机侧无此类硬实时要求。
因此,Android Automotive OS 并不是简单地把手机系统“搬上车”,而是通过“加 HAL、加服务、加策略、加认证”把消费级架构改造成车规级架构。
拓展思考
- 如果车厂要求“熄火后 10 分钟内可远程开空调,但 MCU 需休眠省电”,你怎么设计 CarPowerService 的 WakeLock 与 SuspendBlocker 策略?
- 国内项目无 GMS,如何把高德地图 SDK 封装成 Automotive 的 MapService,使其既能被 SystemUI 调用,又能通过 CarProperty 把导航状态写到 Vehicle HAL 的 NAV_ACTIVE 属性?
- 当仪表和中控共用一颗 SoC、跑两套 Android 实例(安全岛+娱乐岛)时,Hypervisor 方案(QNX+Android、KVM、Xen)在 Binder IPC 和 GPU 共享上分别有哪些坑?