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 的频繁查询,提升响应速度。
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 内部维护属性缓存,对比新值与旧值,仅当发生变化时才触发回调,避免无效通知。
- 优先级队列: 安全相关信号(如碰撞预警、制动辅助)拥有最高优先级,确保低延迟分发。
4.5 核心功能对比总结
| 功能模块 | 主要接口 | 操作类型 | 典型场景 |
|---|---|---|---|
| 车辆属性访问 | CarPropertyManager | GET / SUBSCRIBE | 仪表盘显示车速、续航里程 |
| 车辆控制 | CarPropertyManager | SET | App 远程锁车、调节空调 |
| 信号管理 | Callback 机制 | 事件驱动 | 车门未关报警、胎压异常通知 |
架构师视角: CarService 的设计遵循 单一职责原则,将车辆属性访问、控制和信号管理分离,使得每一部分都可以独立演进和测试。在定制 AAOS 系统时,建议保持 CarService 核心逻辑不变,仅通过扩展 VHAL 实现来适配不同车型的硬件差异。