「全部应用全空+SystemUI下拉框异常」排查实录
2026-09-02 | fermi(A17,xring o3)| 报告现象:安装某 Settings 包后桌面「全部应用」全空、SystemUI 下拉框展示异常;换其他包就好。最终定案:与 Settings 包无关,ROM 的平台 CarService 构建缺陷导致崩溃风暴。
一句话教训
“装了 A 就出故障”≠“A 导致故障”——时间共现是最大的归因陷阱。 本案用户操作(蓝牙配对测试)与装包共现,真正的根因是 ROM 级崩溃环。
关键认知:车机「全部应用」不归 launcher 管
fermi 的「全部应用」抽屉是 MiCarSystemUI(com.android.systemui 进程)挂的 TYPE_SYSTEM_DIALOG 系统窗,不是 com.mi.car.launcher(Unity 桌面,uiautomator 只能看到 unity_container 一个壳)。launcher 全空类问题第一现场在 SystemUI 进程,不是 launcher。
根因链(每层实锤)
ROM 的 CarService(com.android.car)dex 缺 R8 合成 lambda 类:
BluetoothDeviceManager$$ExternalSyntheticLambda2
↓ 蓝牙服务连接即触发(蓝牙开着就崩)
BluetoothDeviceManager.start() → NoClassDefFoundError → CarService FATAL
↓ ActivityManager: "Process com.android.car has crashed too many times,
killing! Reason: crashed quickly"
CarService 崩溃重启风暴(ps 实测两个 com.android.car 进程并存,重启间隔分钟级)
↓ SystemUI CarServiceProvider 每次重连都撞上车服务未就绪窗口
AppDrawerDataManager.onConnected 里
getCarManager(CAR_UX_RESTRICTION_SERVICE) 返回 null
→ getCurrentCarUxRestrictions() 空指针(:140)
↓ 而 mBgExecutor.execute(updateAppsLists) 排在同一 try 块尾部(:165)
应用列表加载永远轮不到调度 → mIsAllAppsInitialized 停 false
↓ 且后续包变更广播被 if(!mIsAllAppsInitialized) return 丢弃(不自愈)
「全部应用」全空;下拉框(SystemUI 同进程)被同一风暴拖累
关键日志指纹
FATAL EXCEPTION: CarPerUserServiceHelper
Process: com.android.car, PID: xxxx
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/car/bluetooth/BluetoothDeviceManager$$ExternalSyntheticLambda2;
at com.android.car.bluetooth.BluetoothDeviceManager.start(BluetoothDeviceManager.java:298)
at com.android.car.bluetooth.CarBluetoothService.createBluetoothDeviceManagerLocked(CarBluetoothService.java:309)
at com.android.car.bluetooth.CarBluetoothService.initializeUserLocked(CarBluetoothService.java:225)
# SystemUI 侧配套指纹:
AppDrawerDataManager: onCarServiceConnected, gen=N ← gen 分钟级狂涨=连接在闪断
AppDrawerDataManager: Car not connected in CarConnectionListener + NPE 栈
AppDrawerDataManager: onPackageChanged allApps in not initialized! ← 卡死实锤
代码级缺陷(SystemUI AppDrawer,结构性)
AppDrawerDataManager.java onConnected:updateAppsLists 调度在 try 块尾部,前面任何一步(CarUxRestrictionsManager 获取、CarPackageManager、CarMediaManager、MiCarManager)异常都会跳过它。加上:
AppLauncherUtils.getLauncherApps(:447-475)逐条loadLabel(pm)/loadIcon(pm)裸奔无 try/catch——一个坏包(资源加载失败)整批作废- 失败后
mIsAllAppsInitialized永 false,后续 PACKAGE 广播全丢弃 → 不自愈 - 装包瞬间的单包路径
onPackageAddedOrReplaced(:704-710)连 catch 都没有,异常可直接崩 SystemUI 进程
若修 SystemUI:getLauncherApps 逐条加 per-item try/catch;onConnected 里 updateAppsLists 调度挪出 try 尾部或加兜底重试。
排除「Settings 包致因」的三重证据(取证模板)
- APK 结构 diff:问题包 vs 上一版 CI 提测包 manifest 字节级一致、图标/label 完好、签名同证书;vs ROM 基线仅多业务组件。zip 5735 条目仅 4 个有差异(全是要改的功能 dex)。
- 回滚反证:
pm uninstall -k <pkg>回滚到 ROM 自带版 + 重启,SystemUI 异常依然在。 - 崩溃归属:崩溃栈全程在
com.android.car(平台 CarService),与被怀疑包零交集。
取证命令备查
# 包列表完好性(排除包管理器)
adb shell cmd package query-activities --user 10 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER | wc -l
# AppDrawer 状态(SystemUI 进程)
adb logcat -d | grep -E "AppDrawerDataManager|AppLauncherUtils"
# CarService 健康度(崩溃环=罪魁祸首)
adb logcat -d | grep -E "Process com.android.car|crashed too many"
adb shell ps -A -o PID,ETIME,NAME | grep "com.android.car$" # ETIME 很小=刚崩过重拉
# 触发抽屉重载(验证用)
adb shell cmd uimode night yes && adb shell cmd uimode night no关联
- ROM 层面另有既有伤:smarthome_car 的
MCBManager$mMiCarBluetoothServiceListener$1NoClassDefFoundError 崩溃环(每几秒一次)——同一台半残 dev ROM,勿混淆 - 处置:崩溃栈转平台/ROM 团队(CarService 构建缺陷);测试换正常 ROM