04 - 实战升级与验收手册

维度:把 MiCarSettings 升级到新版本(如 1.0.0.194-dev-xcd)的完整操作 + 编译后验收 + 踩坑 本文基于 2026-07-15 真实研究(4 Agent 对抗 + 实际改配置验证)


一、升级四步法(标准操作)

STEP 1:确认目标版本已发布

# 在 MiCarSettings 项目验证版本已传到 maven
curl -sI --max-time 10 \
  https://pkgs.d.xiaomi.net/artifactory/releases/com/mi/car/MiCarSettings/1.0.0.194-dev-xcd/MiCarSettings-1.0.0.194-dev-xcd.apk \
  | grep -E "^HTTP|Content-Length"
# 期望:HTTP/1.1 200,Content-Length: 371603583

若 404 → 先在 MiCarSettings 项目发布(见 Artifactory发布知识库)。

STEP 2:改 manifest revision(YU7 只改一处)

cd /home/zbc/pangu/yu7/vendor/micar/prebuilts/packages
# 确认 YU7(suiren)是否在 cn/suiren.xml 覆盖 MiCarSettings
grep "MiCarSettings" cn/suiren.xml || echo "→ suiren 不覆盖,改通用 manifest.xml"
 
# 改通用 manifest.xml 的 MiCarSettings revision
# :131  revision="1.0.0.165-dev-xcd"  →  revision="1.0.0.194-dev-xcd"

为什么只改通用 manifest.xml:YU7=suiren=XCD,cn/suiren.xml 不覆盖 MiCarSettings → 落回通用 manifest.xml:131

若是 DCD 车型(watt/hertz),改 cn/watt.xml/cn/hertz.xml 的 revision(带 -dcd)。 若是 global,改 global/manifest.xml(带 -global)。

STEP 3:清 MD5 缓存(换版本必做)

cd /home/zbc/pangu/yu7/vendor/micar/prebuilts/packages
rm -f apps/manifest_md5          # 清缓存,否则 sync 不重拉
rm -f apps/MiCarSettings.apk     # 清旧 apk(若有)

首次编译 apps/ 不存在,跳过。

STEP 4:整机编译

cd /home/zbc/pangu/yu7
./mibuild.sh -l suiren-userdebug -t full -u cn

编译时 Android.mk:46 自动调 sync_maven_apk.py manifest 拉新版本 apk。


二、编译后验收清单(复制即用)

YU7=/home/zbc/pangu/yu7
OUT=$YU7/out/target/product
AAPT=$YU7/prebuilts/sdk/tools/linux/bin/aapt
 
# 1) apk 落盘 + 版本(必须 1.0.0.194-dev / 2026071501)
APK=$(find $OUT -path "*priv-app/MiCarSettings/MiCarSettings.apk" | head -1)
echo "APK: $APK"
$AAPT dump badging "$APK" | grep -E "package:|versionName"
# 期望: versionName='1.0.0.194-dev' versionCode='2026071501'
 
# 2) target_files 里有(路径 PRODUCT/product/priv-app/)
unzip -l $OUT/suiren/*-target_files-*.zip | grep "MiCarSettings"
 
# 3) 签名 = platform
$YU7/prebuilts/sdk/tools/linux/bin/apksigner verify --print-certs "$APK" 2>/dev/null | grep -i "SHA-256\|Subject"
 
# 4) super.img 里(挂载验证)
mkdir -p /tmp/super_mount && sudo mount -o loop $OUT/suiren/super.img /tmp/super_mount
find /tmp/super_mount -name "MiCarSettings.apk"
$AAPT dump badging /tmp/super_mount/product/priv-app/MiCarSettings/MiCarSettings.apk | grep versionName
sudo umount /tmp/super_mount
 
# 5) 拉取日志确认版本
grep -i "MiCarSettings" $YU7/vendor/micar/prebuilts/packages/sync_maven_apk.log

验收标准

检查项期望值
apk 路径PRODUCT/product/priv-app/MiCarSettings/MiCarSettings.apk
versionName1.0.0.194-dev
versionCode2026071501
签名platform
sync 日志MiCarSettings revision:1.0.0.194-dev

三、实战时序

sequenceDiagram
    participant Dev as 开发者
    participant Manifest as manifest.xml
    participant Sync as sync_maven_apk.py
    participant Maven as pkgs.d.xiaomi.net
    participant Build as mibuild/make
    participant Img as product.img

    Dev->>Manifest: STEP2 改 revision 1.0.0.194-dev-xcd
    Dev->>Dev: STEP3 清 manifest_md5
    Dev->>Build: STEP4 mibuild.sh -l suiren-userdebug -t full -u cn
    Build->>Sync: Android.mk:46 调 sync_maven_apk.py manifest
    Sync->>Manifest: 读 MiCarSettings revision
    Sync->>Maven: mvn dependency:get ...1.0.0.194-dev-xcd:apk
    Maven-->>Sync: apk(内网白名单免认证)
    Sync->>Sync: 落 apps/MiCarSettings.apk
    Build->>Img: BUILD_PREBUILT → /product/priv-app/MiCarSettings/
    Build-->>Dev: BUILD SUCCESSFUL
    Dev->>Img: 验收(aapt dump badging → 1.0.0.194-dev)

四、踩坑表

#症状解法
1改错 manifest改了 cn/suiren.xml 但 YU7 版本没变YU7 的 MiCarSettings 走通用 manifest.xml:131(suiren.xml 不覆盖)→ 改通用
2没清 MD5 缓存改了 revision 但 sync 不重拉旧版本rm apps/manifest_md5
3global 版本未发布编译 -u global 拉 1.0.0.165-dev-global(旧)global 要先在 MiCarSettings 发布 1.0.0.194-dev-global 再改 global/manifest.xml
4分区路径误判以为是 /product/app/实为 /product/priv-app/(LOCAL_PRIVILEGED_MODULE:=true)
5找 “yu7” 目录找不到 yu7 车型YU7 车型代号是 suiren,目录 device/xiaomi/suiren/
6以为要 artifactory 账号编译拉 apk 报认证?整机编译走内网白名单免账号(编译机在内网即可);账号是独立发布才要
7apk 不在源码树find 不到 MiCarSettings.apk正常,编译时 sync_maven_apk.py 才拉到 apps/
8混淆两套拉取机制以为 MiCarSettings 用 prebuilts_build3.pyMiCarSettings 用 sync_maven_apk.py + manifest XML;prebuilts_build3.py 是依赖库(AAR/JAR)用

五、对抗裁决(资深工程师视角)

本研究用 4 Agent 对抗,以下分歧由源码核对裁定:

分歧说法裁定(源码为准)
cn/suiren.xml 存在?Agent4 称不存在存在(但不覆盖 MiCarSettings,结论仍改通用 manifest)
MiCarSettings 分区Agent3 称 /product/app/product/priv-app/(Android.mk:1435 LOCAL_PRIVILEGED_MODULE:=true)
拉取认证Agent2 称免账号✅ 整机走内网白名单;独立发布才要账号

教训:Agent 可能误报事实(如 Agent4 的 suiren.xml),关键决策点必须自己用源码核对(grep/ls/读 Android.mk)。


六、本次实战记录(2026-07-15)

步骤状态
4 Agent 对抗研究✅ 完成(prebuilt/拉取/编译/验收)
核对 suiren.xml 不覆盖 MiCarSettings✅(纠正 Agent4)
改 manifest.xml:131 → 1.0.0.194-dev-xcd✅ 已改
拉取可达验证✅(curl HTTP 200,apk 371603583 字节)
整机编译产物验收⏳ 待编译(用户选择先不编译)

当前状态:manifest.xml:131 已配置为 1.0.0.194-dev-xcd,等待用户触发 ./mibuild.sh -l suiren-userdebug -t full -u cn 后用上述清单验收。


七、快速升级速查(复制即用)

# === 升级 MiCarSettings 到 1.0.0.194-dev-xcd(YU7/suiren/XCD) ===
cd /home/zbc/pangu/yu7/vendor/micar/prebuilts/packages
 
# 1. 改版本(YU7 走通用 manifest.xml)
sed -i 's|name="MiCarSettings" revision="1.0.0.165-dev-xcd"|name="MiCarSettings" revision="1.0.0.194-dev-xcd"|' manifest.xml
grep MiCarSettings manifest.xml   # 确认
 
# 2. 清缓存
rm -f apps/manifest_md5 apps/MiCarSettings.apk
 
# 3. 编译
cd /home/zbc/pangu/yu7
./mibuild.sh -l suiren-userdebug -t full -u cn
 
# 4. 验收
APK=$(find out/target/product -path "*priv-app/MiCarSettings/MiCarSettings.apk" | head -1)
prebuilts/sdk/tools/linux/bin/aapt dump badging "$APK" | grep versionName
# 期望: versionName='1.0.0.194-dev'