3. AAOS 核心组件:System UI、Car Launcher、Car Settings、Car Service 等核心系统应用介绍
Android Automotive OS (AAOS) 的架构围绕车载环境进行了深度定制。与手机 Android 不同,AAOS 将多个核心系统应用作为车辆交互的入口。本章将深入剖析 System UI、Car Launcher、Car Settings 和 Car Service 这四大核心组件的职责、架构关系及关键技术细节。
3.1 核心组件架构总览
下图展示了 AAOS 核心系统应用在系统架构中的位置及其相互依赖关系。Car Service 作为系统服务运行在 System Server 进程中,而 System UI、Car Launcher 和 Car Settings 则作为普通应用运行,通过 Binder IPC 与 Car Service 通信。
3.2 System UI:车载系统的视觉框架
System UI 是 AAOS 中负责系统级用户界面元素的进程。它管理着驾驶场景下最关键的可视化交互区域,确保驾驶员能够安全、高效地获取信息和进行操作。
3.2.1 核心职责
- 状态栏 (Status Bar): 显示时间、网络信号、蓝牙连接、电量等系统状态图标。在车载场景下,还会显示空调温度、驾驶模式等车辆专属状态。
- 导航栏 (Navigation Bar): 提供返回、主屏幕、最近应用等系统导航操作。AAOS 支持手势导航和传统三键导航。
- 通知面板 (Notification Panel): 管理来自应用和系统的通知,支持快速设置开关(如 Wi-Fi、蓝牙、驾驶模式)。
- 系统对话框 (System Dialogs): 处理权限请求、系统警告、音量调节等模态交互。
3.2.2 关键技术点
| 技术维度 | 说明 |
|---|---|
| 进程模型 | 运行在 com.android.systemui 进程中,属于系统级应用,拥有 system 级别的 UID。 |
| 启动方式 | 由 System Server 在系统启动早期通过 startSystemUi() 方法显式启动,确保在 Launcher 启动前完成初始化。 |
| 窗口层级 | System UI 的窗口类型为 TYPE_STATUS_BAR、TYPE_NAVIGATION_BAR 等系统级窗口,拥有最高的 Z-order。 |
| 车辆集成 | 通过 CarServiceManager 监听车辆状态变化(如车速、车门状态),并动态更新 UI 元素。 |
WindowManagerService 管理窗口层级,确保关键信息(如导航提示、来电通知)始终可见,同时避免遮挡驾驶安全相关的显示区域。
3.3 Car Launcher:车载主屏幕
Car Launcher 是用户进入车辆系统后看到的第一个应用。它不仅是应用启动器,更是驾驶场景下的信息聚合中心。
3.3.1 核心功能模块
- 主屏幕 (Home Screen): 显示导航卡片、媒体播放控件、快捷应用图标等。卡片内容通常由
CarService提供的车辆数据驱动。 - 应用抽屉 (App Drawer): 列出所有已安装且允许在驾驶时使用的应用。AAOS 通过
Distraction Optimization机制过滤不适合驾驶时操作的应用。 - 任务栏 (Taskbar): 在宽屏或横屏模式下,显示最近使用的应用和固定应用,支持快速切换。
3.3.2 与手机 Launcher 的关键差异
| 对比维度 | 手机 Launcher | Car Launcher |
|---|---|---|
| 交互模式 | 触摸为主,支持多点触控 | 触摸 + 旋钮 + 语音,强调单手操作 |
| 内容优先级 | 应用图标、Widget | 导航、媒体、车辆信息卡片 |
| 安全限制 | 无驾驶安全限制 | 受 Distraction Optimization 约束,限制复杂交互 |
| 多用户支持 | 支持多用户切换 | 支持驾驶员档案 (Driver Profile) 切换 |
IDistractionOptimizationCallback 接口,根据车辆行驶状态动态调整 UI 复杂度。例如,当车速超过 5 km/h 时,应禁用列表滚动和键盘输入等高风险交互。
3.4 Car Settings:车辆专属设置中心
Car Settings 是 AAOS 中管理车辆相关配置的系统应用。它扩展了 Android 原生 Settings 应用,增加了大量与车辆硬件和驾驶体验相关的设置项。
3.4.1 设置项分类
- 车辆控制: 灯光、门锁、车窗、后视镜调节等。
- 驾驶辅助: 车道保持、自适应巡航、泊车辅助等 ADAS 功能开关。
- 舒适性: 座椅加热/通风、方向盘加热、氛围灯颜色等。
- 系统偏好: 驾驶模式(运动/舒适/经济)、语音唤醒词、导航偏好等。
3.4.2 架构实现
Car Settings 通过 CarPropertyManager 与 Car Service 交互,读取和写入车辆属性 (Vehicle Property)。每个设置项对应一个或多个 Vehicle Property ID。
// 示例:读取车内温度设置
CarPropertyManager propertyManager =
(CarPropertyManager) car.getCarManager(Car.PROPERTY_SERVICE);
try {
// 读取 HVAC 温度设定值
FloatProperty<Float> tempProperty =
new FloatProperty<>(VehiclePropertyIds.HVAC_TEMPERATURE_SET, 0);
float currentTemp = propertyManager.getProperty(tempProperty, 0);
// 更新 UI
updateTemperatureDisplay(currentTemp);
} catch (CarNotConnectedException e) {
Log.e("CarSettings", "Car service not connected", e);
}
3.5 Car Service:车辆硬件抽象中枢
Car Service 是 AAOS 中连接 Android 框架与车辆硬件的核心系统服务。它运行在 System Server 进程中,作为所有车辆相关 API 的注册中心和调度中心。
3.5.1 核心架构层次
3.5.2 关键服务组件
| 服务名称 | 管理类 | 核心功能 |
|---|---|---|
| Property Service | CarPropertyManager |
管理所有车辆属性(车速、里程、车门状态等)的读写和订阅。 |
| Audio Service | CarAudioManager |
管理车载音频焦点、音量分组、音频路由(导航/媒体/电话/提示音)。 |
| HVAC Service | CarHvacManager |
控制空调温度、风量、风向、座椅加热等舒适性功能。 |
| Navigation Service | CarNavigationManager |
管理导航状态、转弯提示、仪表盘导航信息投射。 |
| Diagnostic Service | CarDiagnosticManager |
提供车辆诊断信息(故障码、传感器数据)。 |
3.5.3 属性订阅机制
Car Service 采用 发布-订阅 (Pub-Sub) 模式管理车辆属性变化。应用通过 CarPropertyManager.registerCallback() 注册监听器,当 VHAL 上报属性变化时,Car Service 负责将事件分发给所有已注册的订阅者。
// 订阅车速变化
CarPropertyManager propertyManager =
(CarPropertyManager) car.getCarManager(Car.PROPERTY_SERVICE);
propertyManager.registerCallback(
new CarPropertyManager.CarPropertyEventCallback() {
@Override
public void onChangeEvent(CarPropertyValue value) {
if (value.getPropertyId() == VehiclePropertyIds.PERF_VEHICLE_SPEED) {
float speed = (float) value.getValue();
updateSpeedDisplay(speed);
// 根据车速调整 UI 安全策略
if (speed > 5.0f) {
enableDistractionOptimization(true);
}
}
}
@Override
public void onErrorEvent(int propertyId, int zone) {
Log.w("CarDemo", "Error on property: " + propertyId);
}
},
VehiclePropertyIds.PERF_VEHICLE_SPEED,
CarPropertyManager.SENSOR_RATE_NORMAL
);
SENSOR_RATE_NORMAL 或 SENSOR_RATE_FAST 模式,低频属性(如车门状态)使用 SENSOR_RATE_ONCHANGE 模式,以减少 Binder 调用开销和 CPU 唤醒次数。
3.6 组件协作流程示例
以下是一个典型的用户操作流程,展示四个核心组件如何协同工作:
- 用户操作: 在 Car Launcher 主屏幕上点击“空调”快捷图标。
- Launcher 处理: Car Launcher 通过
Intent启动 Car Settings 的空调设置页面。 - Settings 读取数据: Car Settings 通过
CarHvacManager向 Car Service 请求当前空调温度。 - Car Service 响应: Car Service 从 VHAL 获取 HVAC 属性值,返回给 Car Settings。
- 用户调节温度: 用户在 Settings 界面滑动温度条。
- Settings 写入数据: Car Settings 调用
CarHvacManager.setTemperature()将新温度值写入 Car Service。 - Car Service 下发: Car Service 将属性变化写入 VHAL,硬件执行温度调节。
- System UI 更新: Car Service 将温度变化事件广播给所有订阅者,System UI 收到通知后更新状态栏中的温度显示。