一、模块主要成员
CarServiceHelperService
SystemServer 中专门为 AAOS 设立的系统服务,用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl
CarService
Car模块核心服务APP,Android 13版本开始分为两个,一个是掌管 CarService 服务类的 builtin app,源码在:packages/services/Car/service-builtin/,一个是拥有具体实现和大量 Service 的 updatable app,源码在:packages/services/Car/service/;在系统中,它是在/system/priv-app/CarService/CarService.apk
Car-lib(Car API)
Android 车机里提供给系统使用汽车相关功能的专用接口,源码在:packages/services/Car/car-lib/,它会编译到 android.car.jar 中,其中包括常用的 Car、CarPowerManager、CarSettings 等。
Car APPs
AAOS 专为汽车设计的系统app,目录在:packages/apps/Car/。例如面向 Car 的 SystemUI、Launcher、Settings等。
二、Car模块内部交互机制
下面用一张图以 CarInputService 和 CarpropertyService 演示说明:
三、总结
Car 相关组件 | 所属进程 | 作用 |
---|---|---|
CarServiceHelperService | SystemServer | 管理 Car Serivce 的系统服务 |
CarService | builtin app | Car 核心服务 |
updatable app | Car 核心服务的具体实现 | |
Car-lib | android.car.jar | Car API SDK |
Car Apps | Launcher 等 | Car 专门设计的一系列 App |
- SystemServer 进程在系统启动的时候发现 OS 具备 Automotive 的 feature,则启动 CarServiceHelperService 系统服务,并交由 CarServiceHelperServiceUpdatableImpl 实际负责和 CarService 的绑定
- CarService 的 builtin app 由父类 ServiceProxy 完成中转,即反射出 updatable app 中 CarServiceImpl 实例
- CarServiceImpl 的初始化将构建 ICarImpl 实例并构建内部的一堆具体服务 CarServiceBase,比如负责输入的 CarInputService 、负责车辆属性的 CarPropertyService 等
- 这些具体服务通过 HalServiceBase 和 VehicleHal 进行交互,比如调度输入事件的 InputHalService、读写/转换车辆属性的 PropertyHalService 等
- 后续的交给 VehicleHal 通过 HIDL 和 HAL 层交互
- 其他 Apps 可以通过 Car lib 提供的 Car API 获取 CarService 中的服务接口即 ICarImpl
- ICarImpl 通过启动时候注册的服务名称和 CarServiceBase 实例对照表向 Apps 返回对应的接口实例,比如控制、监听输入的 CarInputManager、读写车辆属性的 CarPropertyManager
- 其他 Apps 拿到这些 Manager 接口之后,像 AOSP 中使用 ActivityManager 等接口一样通过 AIDL 和 CarService 进行交互