4. CarService 概述:CarService 在 AAOS 中的定位、核心功能

CarService 是 Android Automotive OS (AAOS) 中连接 Android 应用框架与 车辆硬件抽象层 (VHAL) 的核心系统服务。它运行在系统进程中,作为车辆功能的“网关”,为上层应用提供统一、安全的车辆属性访问与控制接口。

4.1 CarService 在 AAOS 架构中的定位

在 AAOS 分层架构中,CarService 位于 应用框架层 (Application Framework),是车辆专属服务的注册与调度中心。它向下通过 VHAL (Vehicle Hardware Abstraction Layer) 与车辆 ECU 通信,向上通过 Car API 暴露给系统应用和第三方应用。

架构定位要点:
  • 桥梁角色: 隔离应用与硬件,应用无需感知具体车辆总线协议 (CAN/LIN/Ethernet)。
  • 权限守卫: 所有车辆属性访问必须经过 CarService 的权限校验,防止恶意应用操控车辆。
  • 状态同步: 维护车辆属性的实时缓存,减少对 VHAL 的频繁查询,提升响应速度。
CarService 在 AAOS 分层架构中的定位 应用层 (System Apps & 3rd Party Apps) Car API (android.car.*) CarService (系统进程) 车辆属性访问 · 车辆控制 · 信号管理 VHAL (Vehicle Hardware Abstraction Layer) 车辆硬件 (ECU / CAN / LIN / Ethernet)

4.2 核心功能一:车辆属性访问 (Vehicle Property Access)

车辆属性是描述车辆状态和配置的标准化数据单元,例如车速、车门状态、燃油量、VIN 码等。CarService 通过 VehiclePropertyManager 提供对属性的 读取 (GET) 和 订阅 (SUBSCRIBE) 能力。

属性类别 示例属性 访问模式 权限要求
信息类 VIN、车辆型号、软件版本 只读 android.car.permission.CAR_INFO
状态类 车速、发动机转速、续航里程 只读 / 订阅 android.car.permission.CAR_SPEED
车身类 车门锁状态、车窗位置、天窗状态 读 / 写 android.car.permission.CAR_CONTROL
安全类 安全气囊状态、胎压监测 只读 / 订阅 android.car.permission.CAR_SAFETY
开发提示: 使用 CarPropertyManager.getProperty() 获取属性值时,建议优先使用 回调订阅 模式,而非轮询。订阅模式能减少系统负载,并在属性变化时实时通知应用。

4.3 核心功能二:车辆控制 (Vehicle Control)

车辆控制允许授权应用向车辆发送 控制指令 (SET),例如锁车/解锁、调节空调温度、开关车窗、控制座椅加热等。CarService 在转发指令前会执行严格的权限校验和区域 (Area) 验证。

安全约束: 车辆控制指令必须满足以下条件才能被 CarService 接受:
  • 应用已声明对应的 车辆控制权限。
  • 指令中的 区域 ID (Area ID) 与车辆实际配置匹配。
  • 车辆当前状态允许执行该操作(例如行驶中禁止操作某些功能)。

4.4 核心功能三:信号管理 (Signal Management)

信号管理是 CarService 的 事件驱动引擎,负责处理车辆信号的订阅、分发和优先级调度。当 VHAL 上报车辆信号变化时,CarService 根据订阅列表将信号分发给对应的应用回调。

信号管理的关键机制包括:

  • 订阅注册: 应用通过 CarPropertyManager.registerCallback() 注册感兴趣的属性 ID 和变化频率。
  • 变化检测: CarService 内部维护属性缓存,对比新值与旧值,仅当发生变化时才触发回调,避免无效通知。
  • 优先级队列: 安全相关信号(如碰撞预警、制动辅助)拥有最高优先级,确保低延迟分发。
CarService 信号管理流程 VHAL 上报信号 CarService 接收 变化检测 & 缓存更新 优先级调度 应用回调分发

4.5 核心功能对比总结

功能模块 主要接口 操作类型 典型场景
车辆属性访问 CarPropertyManager GET / SUBSCRIBE 仪表盘显示车速、续航里程
车辆控制 CarPropertyManager SET App 远程锁车、调节空调
信号管理 Callback 机制 事件驱动 车门未关报警、胎压异常通知
架构师视角: CarService 的设计遵循 单一职责原则,将车辆属性访问、控制和信号管理分离,使得每一部分都可以独立演进和测试。在定制 AAOS 系统时,建议保持 CarService 核心逻辑不变,仅通过扩展 VHAL 实现来适配不同车型的硬件差异。