02 - 版本配置与拉取链路
维度:MiCarSettings 版本号在哪里配、apk 怎么从 maven 拉下来 核心文件:
manifest.xml(版本配置)、sync_maven_apk.py(拉取脚本)
一、版本配置:manifest 三级覆盖
版本号存在 vendor/micar/prebuilts/packages/ 下的 manifest XML 的 revision 属性里,三级覆盖(优先级低→高):
manifest.xml (通用默认,所有车型)
└── cn|global/manifest.xml (区域覆盖,cn 或 global)
└── cn/{车型}.xml (车型覆盖,如 cn/watt.xml)
MiCarSettings 各 manifest 的版本(研究时实测)
| 文件 | 行号 | revision | 适用 |
|---|---|---|---|
manifest.xml | 131 | 1.0.0.165-dev-xcd | XCD 通用默认(YU7 走这条) |
global/manifest.xml | 6 | 1.0.0.165-dev-global | Global 区域 |
cn/watt.xml | 18 | 1.0.0.165-dev-dcd | Watt(DCD) |
cn/hertz.xml | 20 | 1.0.0.165-dev-dcd | Hertz(DCD) |
cn/newton.xml 等 | - | 1.0.0.137-dev-a17 | 老车型(a17) |
cn/suiren.xml | - | 不覆盖 MiCarSettings | YU7 → 落回通用 manifest.xml |
⚠️ 关键:
cn/suiren.xml存在但不覆盖 MiCarSettings(它只覆盖 VoiceAssistant/PHud 等)。所以 YU7 的 MiCarSettings 版本由通用manifest.xml:131决定。
覆盖规则示例
<project type="apk" group="com.mi.car" name="MiCarSettings" revision="1.0.0.194-dev-xcd" />group="com.mi.car"+name="MiCarSettings"= maven 坐标com.mi.car:MiCarSettingsrevision= 版本号(含 flavor 后缀)
二、拉取脚本 sync_maven_apk.py
文件:vendor/micar/prebuilts/packages/sync_maven_apk.py
调用:Android.mk:46/64/72 在编译配置阶段用 $(shell ...) 调用
调用顺序(XCD 平台,YU7)
# Android.mk:46 步骤1:通用 manifest
sync_maven_apk.py manifest
# Android.mk:64 步骤2:区域 manifest(cn 或 global)
sync_maven_apk.py $(CONFIG_DIR)/manifest
# Android.mk:72 步骤3:车型 manifest(仅 miproduct 组件)
sync_maven_apk.py $(CONFIG_DIR)/$(车型) $(阶段码)YU7 编译时:sync_maven_apk.py manifest → 读通用 manifest.xml → 拉到 MiCarSettings:1.0.0.194-dev-xcd。后续 cn/manifest、cn/suiren 不覆盖,保持。
内部拉取命令(mvn CLI)
# 1. 从 maven 仓库获取
mvn dependency:get \
-DremoteRepositories=https://pkgs.d.xiaomi.net:443/artifactory/maven-release-virtual \
-Dartifact=com.mi.car:MiCarSettings:1.0.0.194-dev-xcd:apk \
-Dtransitive=false
# 2. 复制到 apps 目录
mvn dependency:copy \
-Dmaven.legacyLocalRepo=true \
-Dartifact=com.mi.car:MiCarSettings:1.0.0.194-dev-xcd:apk \
-DoutputDirectory=<prebuilts/packages>/apps
# 3. 重命名(去掉版本号)
mv apps/MiCarSettings-1.0.0.194-dev-xcd.apk apps/MiCarSettings.apk最终落到 vendor/micar/prebuilts/packages/apps/MiCarSettings.apk,供 Android.mk:1445 LOCAL_SRC_FILES 引用。
MD5 缓存机制
sync_maven_apk.py 用 manifest 的 MD5 判断是否需要重新下载,缓存在 apps/manifest_md5。
换版本后必须清缓存,否则脚本认为 manifest 没变、不重拉:
rm -f vendor/micar/prebuilts/packages/apps/manifest_md5(首次编译 apps/ 不存在,无需清。)
三、拉取认证:内网白名单(免账号)
整机编译从 maven 拉 apk 走内网 IP 白名单,不需要 artifactory 账号密码。这与 MiCarSettings 独立发布(要 artifactory_user/password)是两套独立场景:
| 场景 | 认证 | 触发 |
|---|---|---|
独立发布 apk 到 maven(updateApkAssembleXcdRelease) | artifactory 账号(env/project.properties) | 开发者主动 |
整机编译从 maven 拉 apk(sync_maven_apk.py) | 内网 IP 白名单(免账号) | mibuild.sh 自动 |
前提:编译机在内网(或 VPN),能访问
pkgs.d.xiaomi.net。
四、拉取流程图
flowchart TD A["编译触发<br/>mibuild.sh"] --> B["Android.mk 配置阶段"] B --> C["sync_maven_apk.py manifest"] C --> D["解析 project 节点<br/>group+name+revision"] D --> E["mvn dependency:get<br/>内网白名单"] E --> F{"apps/manifest_md5<br/>变化?"} F -->|是| G["下载 apk 到 apps/"] F -->|否| H["跳过(用缓存)"] G --> I["重命名 apps/MiCarSettings.apk"] H --> I I --> J["Android.mk BUILD_PREBUILT 引用"] style E fill:#e1f5e1 style F fill:#fff3e0 style I fill:#e1e1ff
五、官方升级 SOP(.micode/commands/app_upgrade.toml)
文件:vendor/micar/prebuilts/packages/.micode/commands/app_upgrade.toml(27KB)
小米已内置 CarSettings 升级标准操作指南:
- 智能识别平台后缀(
-xcd/-dcd) -xcd→ 仅更新通用manifest.xml-dcd→ 更新 dcd 相关 manifest(watt/hertz 等)- 升级后在该文件记录变更信息
- 版本号格式遵循 CarSettings 团队规范
这说明”改 manifest.xml revision”是官方认可的标准升级方式。本知识库的方案与该 SOP 一致。
六、两种解耦拉取机制对比
整机源码里有两套”从 maven 拉”的机制,别混淆:
| 机制 | 脚本 | 配置 | 用途 | 代表 |
|---|---|---|---|---|
| APK 拉取 | sync_maven_apk.py | XML(manifest) | 车载 APK 安装包 | MiCarSettings, CarMap |
| 依赖库拉取 | prebuilts_build3.py | JSON | AAR/JAR 依赖库 | PowerKeeper, MiuiBluetooth |
MiCarSettings 用前者(sync_maven_apk.py + manifest.xml),不是 prebuilts_build3.py。
七、关键源码行号索引
| 内容 | 文件:行号 |
|---|---|
| MiCarSettings 通用版本 | vendor/micar/prebuilts/packages/manifest.xml:131 |
| sync 调用(通用) | vendor/micar/prebuilts/packages/Android.mk:46 |
| sync 调用(区域) | 同上 :64 |
| sync 调用(车型) | 同上 :72 |
| mvn 拉取命令 | vendor/micar/prebuilts/packages/sync_maven_apk.py:40-48 |
| 官方 SOP | vendor/micar/prebuilts/packages/.micode/commands/app_upgrade.toml |