Android Automotive OS 源代码结构与核心接口总结
源码结构层次
系统应用层
- 路径: packages/apps/Car
- 内容: 预装的车载应用(如:SystemUi/Launcher/车辆设置等),替代传统手机应用模块
- 示例:
CarSettings-车辆设置
CarLauncher-车载桌面
系统框架层
- 路径: packages/services/Car
- CarService: /platform/packages/services/Car/service/src/com/android/car/
- 包含: CarInputService/CarPowerManagementService等,负责车辆状态管理与控制
- Car API: packages/services/Car/car-lib/
- 提供车载应用与 CarService 通信的接口,如: CarSensorManager
硬件抽象层(HAL)
- Vehicle HAL 接口定义: hardware/libhardware/include/include/hardware/vehicle.h
- 定义车辆属性元数据(如: 数据类型/变更模式),供 OEM 实现
- 参考实现路径: hardware/libhardware/modules/vehicle/
- 包含基础 CAN 总线通信/传感器控制等示例代码
- HIDL 接口: hardware/interfaces/automotive/vehicle/
- 用于系统服务云硬件驱动的跨进程通讯
核心接口与功能
CAR API
- 功能: 提供车载应用访问车辆数据的标准化接口(如传感器数据、媒体控制)
- 关键接口:
•CarSensorManager:获取车钠传感器信息(如车速、温度)68。
•CarMediaManager:控制车载媒体播放47。
•代码路径:packages/services/Car/car-1ib/src/android/car/58。
2.CarService子服务
•核心子服务:
•CarInputService:处理车载物理按键/触摸事件47。
•CarPowerManagementService:管理车辆电源状态(如休眠唤醒)47。
•CarProjectionService:支持手机投屏功能57。
• thia: packages/services/Car/service/src/com/android/car/ 7 8 .
3.VehicleHAL接口
•关键属性:
•VEHICLE_PROPERTY_INFO_VIN:车辆识别码。
•VEHICLE_PROPERTYPERF_VEHICLE_SPEED:实时车速 - VehicleHAL接口
•关键属性:
•VEHICLE_PROPERTY_INFO_VIN:车辆识别码。
•VEHICLE_PROPERTY_PERF_VEHICLE_SPEED:实时车速68。
•接口示例:
Copy Code
1//发送车速信号到CAN总线(参考实现)
2 CanIf_Transmit (CAN_CHANNEL_1, &speed _data); // :ml-citation{ref=”3,8” d
4.HIDL接口
•作用:标准化硬件驱动与上层服务的通信协议。
•示例接口:IVehicle.hal
定义车辆属性读写方法(如get()、set()) - 三、源码目录概览
|- 层级 -|-核心目录/文件 -|- 说明 -|
| 应用层 | packages/apps/Car/ |车载系统应用源码(如CarLauncher)|
| 框架层 | packages/services/Car/ | CarService及Car API实现 |
| HAL层 | hardware/libhardware/include/hardware/vehicle.h | 车辆HAL接口定义 |
| HIDL接口 | hardware/interfaces/automotive/vehicle | 硬件抽象接口实现 |
一、源码整体结构
车载Android系统基于AOSP(Android Open Source Project),主要新增了与汽车相关的模块,代码路径集中在以下目录:
- 系统应用层
/packages/apps/Car/
包含车载专用系统应用(如收音机、空调控制、仪表盘等)
/packages/services/Car/
核心服务模块(CarService)及相关工具
/packages/apps/car/systemui/
车载SystemUI扩展,如状态栏、导航栏定制
- 核心服务层
CarService:位于
/packages/services/Car/service/
,是车载系统的核心服务,包含电源管理、传感器、音频控制等子服务。
Vehicle HAL:硬件抽象层接口,定义于
/hardware/interfaces/automotive/vehicle/
,由厂商实现具体逻辑。
- 框架层扩展
Car API:位于
/packages/services/Car/car-lib/
,为车载应用提供专用接口(如空调控制、车辆诊断等)。
二、核心接口及代码路径
- CarService(核心服务)
源码路径:
/packages/services/Car/service/src/com/android/car/
核心子服务:
CarPowerManagementService:电源管理(熄火、休眠等)。
CarAudioService:音频路由控制(多声道、音效调节)。
CarInputService:处理车辆物理按键及触控事件。
CarDiagnosticService:车辆诊断数据(如OBD-II)的采集与上报。
- Car API(应用开发接口)
源码路径:
/packages/services/Car/car-lib/src/android/car/
关键接口:
CarSensorManager:获取车辆传感器数据(如车速、胎压)。
CarHvacManager:控制空调温度、风量及出风模式。
CarProjectionManager:支持手机投屏(如Android Auto)。
VmsSubscriberManager:车辆地图服务订阅与管理。
- Vehicle HAL(硬件抽象层)
接口定义:
/hardware/interfaces/automotive/vehicle/2.0/
核心功能:
通过HIDL(Hardware Interface Definition Language)定义车辆属性(如门窗状态、座椅调节)。
厂商需实现IVehicle.hal接口,并通过VehicleHalManager与CarService通信。
- SystemUI扩展(车载定制)
源码路径:
/packages/apps/car/systemui/
核心模块:
CarStatusBar:定制化状态栏(显示车辆信号、电池状态)。
CarNavigationBar:导航栏/Dock栏(集成车控快捷入口)。
插件化支持:通过SystemUI Plugin`机制动态扩展功能(如自定义通知栏)。
- 系统启动与初始化
CarService启动:由SystemServer在系统启动时加载,通过ICarImpl初始化所有子服务。
SystemUI启动:作为独立进程由SystemServer启动,初始化时序依赖CarSystemUIFactory。
三、开发实践建议
定制化开发
修改CarService子服务逻辑时,优先通过Car API封装接口,避免直接操作HAL层。
使用SystemUI Plugin机制扩展UI功能,减少对主框架的侵入。调试技巧
通过adb shell dumpsys car_service查看CarService实时状态。
使用VehicleHal模拟工具(位于/packages/services/Car/tools/emulator/)测试车辆信号。
车载Android系统(AndroidAutomotiveOS)源码结构与核心接口总
结
一、源码结构概览 AndroidAutomotiveOs(AAOS)基于AOSP扩展,核心模块围绕车载功能设
计,主要分为以下层次:
1.CarAPI层 代码路径:/packages/services/Car/car-1ib/src/android/car/ 提供面向车载应用的Java接口,如车辆属性(速度、温度)、HVAC控制、
座椅调节等25。
关键接口包:
android.car.hardware(车辆硬件控制)
android.car.media(车载音频管理)
android.car.navigation(导航服务)
2. Car Servicela
代码路径:packages/services/Car/service/ 核心服务包括:CarPropertyService(属性管理)、CarAudioservice(音频
控制)、CarHvacManager(空调控制)等。
服务初始化代码位于:src/com/android/car/ICarImpl.java。
3. Vehicle HALFE
代码路径:hardware/interfaces/automotive/vehicle/2.0/ 定义车辆属性元数据(如PERF_VEHICLE_SPEED)和硬件抽象接口,支持属性
订阅、事件上报。
数据访问安全分级:通过权限控制(系统级/应用级)和
VehicleNetworkService实现安全访问。
4.扩展视图系统(EVS) 代码路径:hardware/interfaces/automotive/evs/1.@/
支持多摄像头输入和显示管理,用于倒车影像、环视等功能2。
二、核心接口与代码路径
1.车辆属性控制接口 接口类:carPropertyManager(路径:android.car.hardware.property) 功能:获取/设置车辆属性(如速度、温度、车窗状态),支持异步订阅属
性变化25。
示例属性:
Java
VehicleProperty.PERF_VEHICLE_SPEED//车速(米/秘)
VehicleProperty.HVAC_TEMPERATURE_SET//空;還度龄些
2.HVAC控制接口 接口类:carHvacManager(路径:android.car.hardware)
功能:调节空调温度、风量、循环模式,需系统级权限③⑤。
代码示例:
Java
白复制 CarHvacManager.setFloatProperty(CarHvacManager.ID_ZONED_TEMP_SET,
zone, temp);
3.音频管理接口 接口类:CarAudioManager(路径:android.car.media)
功能:管理多区域音频输出(如主驾、后排独立音区)27。
4.导航与地图接口 接口类:CarNavigationstatusManager(路径:android.car.navigation)
功能:提供导航状态(如转向提示、剩余距离)和地图注点功能⑥7。
三、扩展模块与开发要点
1.系统应用开发 SystemUI定制:位于frameworks/base/packages/SystemUI/,需修改状态栏
(Dock栏)、通知栏等车载UI组件4。 权限控制:车载敏感接口(如HVAC)需声明CAR_CONTROL权限,仅系统应用
可调用⑤9。
2.HAL层打展
OEM自定义属性:在VehicleHAL中扩展VENDOR_前缀属性,需同步修改
CarService和API层29。
3.调试工具
ADB命令:通过adbshelldumpsyscar_service查看CarService状态
4. OEM定制:OEM需基于Vehicle HAL实现具体车型的硬件驱动,并通过CarService扩展定制功能(如空调控制)
应用开发:第三方应用通过Car API访问车辆数据,无需直接调用HAL层接口
https://source.android.com/docs/automotive
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 nathanwriting@126.com