MiCarSettings 整体架构探索

本文档由 8 个 Explore Agent 并行调研 + 源码对抗交叉验证产出,时间为 2026-07-12。 所有关键结论均经过源码核对,发现的 Agent 转述偏差已在《08-对抗验证记录》中列明修正。

这份文档解决什么问题

回答两个核心问题:

  1. 项目有多少个模块? —— 共 35 个 Gradle 子模块(app 1 + base 11 + settingsCommon 7 + settingsPage 16)。
  2. 每个模块都是做什么的? —— 见《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-车辆接口层与 IPCCarPropertyManager 全链路、双订阅模式、超时机制、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 天路线深入专题。

关键事实速查(高频被问)

事实
包名 / applicationIdcom.android.car.settings
进程身份系统特权应用(sharedUserId="android.uid.system" + coreApp="true" + 平台签名)
SDKminSdk 32 / targetSdk 32 / compileSdk 33
构建工具AGP 7.2.0 + Kotlin 1.8.10 + Gradle wrapper 9.0-milestone-1
Product Flavordcd / xcd / global(dimension = miPlatform
架构范式Fragment + PreferenceController(基于自定义 micarx.preference 库,非 AndroidX)
车辆通信完全走 Android Car API(Car.PROPERTY_SERVICE),车辆硬件不走自定义 AIDL
路由 URI schemecarsettings://homepage/?subPage=<alias>
代码语言Kotlin(主)+ Java(辅)+ XML + 8 个 AIDL + Protobuf