MiCarSettings 整体架构探索
本文档由 8 个 Explore Agent 并行调研 + 源码对抗交叉验证产出,时间为 2026-07-12。 所有关键结论均经过源码核对,发现的 Agent 转述偏差已在《08-对抗验证记录》中列明修正。
这份文档解决什么问题
回答两个核心问题:
- 项目有多少个模块? —— 共 35 个 Gradle 子模块(app 1 + base 11 + settingsCommon 7 + settingsPage 16)。
- 每个模块都是做什么的? —— 见《01-模块全景与分层》,逐模块给出职责、关键类、依赖关系。
并在此之上,理清「一个设置项从启动到读写车辆硬件」的完整架构链路。
一句话架构心智模型
外部入口(语音/深链接/桌面)
│ Intent + carsettings:// URI
▼
BaseCarSettingsActivity (双面板: 左菜单 + 右内容)
│ Preference XML 驱动 + @RouterProvider 路由
▼
Fragment (继承 BaseXmlParserSettingsFragment 体系, 基于 micarx.preference)
│ 反射装配 N 个 PreferenceController
▼
PreferenceController (生命周期感知, 绑定车辆时继承 CarPropertyMgrPreferenceController)
│
▼
SettingsCarPropertyManager (每页一个, 缓存+超时监控+生命周期)
│
▼
VehicleControlManager → LocalCarManager(单例) → android.car.CarPropertyManager
│ Binder IPC
▼
Car Service (系统进程) → Vehicle HAL → 车辆硬件
文档导航
| 文档 | 主题 | 适合谁读 |
|---|---|---|
| 01-模块全景与分层 | 35 个模块清单 + 四层分层 + 每模块职责 | 所有人(先读这篇) |
| 02-应用启动与首页架构 | Application 启动链路、双面板首页、菜单渲染 | 想理解启动/首页的人 |
| 03-PreferenceController 范式 | Fragment+Controller 解耦、基类体系、生命周期、新增页步骤 | 新增设置页必读 |
| 04-车辆接口层与 IPC | CarPropertyManager 全链路、双订阅模式、超时机制、AIDL 真相 | 做车控功能的人 |
| 05-路由与语音搜索框架 | 三注解 APT、运行时分发、语音控件上报 | 做跳转/语音的人 |
| 06-多 Flavor 与海外适配 | dcd/xcd/global、sourceSet、五种差异化手段 | 做海外/多车型的人 |
| 07-功能页面模块架构 | 16 个 settingsPage 的统一约定、目录结构、数据流 | 新增功能模块必读 |
| 08-对抗验证记录 | Agent 转述偏差的修正、文档间矛盾澄清 | 追求准确性的读者 |
与项目现有 docs 的关系
项目根 docs/ 下已有一套成熟的专题文档(顶层 10 篇 + 启动初始化知识库 + SettingsCarPropertyManager 源码解析 + 座舱车门 + 后屏投影等),它们更深入专题细节。本「整体架构探索」目录的定位是:
- 全局视角:35 个模块一次看全,回答「整体长什么样」。
- 交叉验证:对现有 docs 之间的矛盾(如 URI scheme 前缀、Fragment 继承方向)做了源码级核对。
- 入口与导航:作为上手第一份读物,再按需深入现有专题 docs。
建议阅读路径:本目录 00 → 01 建立全局观 → 现有 docs/00-README-总览与学习路线.md 的 5 天路线深入专题。
关键事实速查(高频被问)
| 事实 | 值 |
|---|---|
| 包名 / applicationId | com.android.car.settings |
| 进程身份 | 系统特权应用(sharedUserId="android.uid.system" + coreApp="true" + 平台签名) |
| SDK | minSdk 32 / targetSdk 32 / compileSdk 33 |
| 构建工具 | AGP 7.2.0 + Kotlin 1.8.10 + Gradle wrapper 9.0-milestone-1 |
| Product Flavor | dcd / xcd / global(dimension = miPlatform) |
| 架构范式 | Fragment + PreferenceController(基于自定义 micarx.preference 库,非 AndroidX) |
| 车辆通信 | 完全走 Android Car API(Car.PROPERTY_SERVICE),车辆硬件不走自定义 AIDL |
| 路由 URI scheme | carsettings://homepage/?subPage=<alias> |
| 代码语言 | Kotlin(主)+ Java(辅)+ XML + 8 个 AIDL + Protobuf |