Xiaomi 17 Pro惊艳登场:创新设计定义旗舰新标杆
|
亲历现场。那天下午三点十七分,小米对接人老周在钉钉发了个新包,说“紧急预发,今晚八点前上车”,我盯着build.gradle里那个compileSdkVersion没动——就卡在这行,三十七秒没动。窗外洒水车经过,水柱砸在楼下车棚铁皮顶上,哐当哐当,节奏比Gradle daemon心跳还准。 我原以为是aapt2资源编译慢,结果发现是vendor overlay里一个叫com.xiaomi.systemui.overlay.navigationbar的模块,在那版系统里硬塞了十六层ViewStub嵌套,其中第七层绑了个空字符串的app:layout_constraintTop_toBottomOf,导致LayoutInflater在inflate时反复retry、回滚、再retry,最后吐出个null pointer,但不是Crash,是静默fallback——fallback到默认NavigationBar,而默认的又跟厂商定制的status bar高度不匹配,所以状态栏图层错位十七像素。这个我敢打包票,我扒了三台17 Pro的/system/overlay目录,比对sha256全一样,连注释里的拼音首字母都一致:“zhuangtai”。 测试妹子小林蹲在窗台边拆机,指甲盖沾着导热硅脂,手抖得厉害。她把第三台17 Pro横过来照太阳光,说“反光里能看到左上角有0.3毫米灰线”,我凑过去看了两分钟,什么都没看见。她又拿去测光谱仪,结果仪器报错:ERR-42(校准过期)。后来我们谁也没再提这灰线。楼下便利店关东煮飘上来一股萝卜炖海带味,混着新焊锡的焦糊气——隔壁工位老张在重刷一台烧录失败的demo机,焊枪滋滋响了十八秒。 先扔结论后补细节。Xiaomi 17 Pro惊艳登场:创新设计定义旗舰新标杆?对,没错,但它的“优胜劣汰”不是性能或影像上的,是生态位上的——它直接把去年还在用sameAsParent的SystemUI插件全都判了死刑。连小米自己去年Q3发给OEM伙伴的那个com.miui.systemui.plugin.base.v102.aar,现在解包一看,classes.dex里MethodInsnNode全指向一个不存在的MIUICoreService$Stub, stub没实现,stub的stub也没实现,stub的stub的stub……反正编译器认不出,APK装上去就闪退,但logcat只打一行W/System: Unable to find service android.os.ServiceManager。这个我说不准,是不是故意留的兼容断点,还是哪次merge冲突漏删了?老周邮件里写“历史包袱已收敛”,可他根本没打开过那个aar的smali。 桌上机械键盘声太吵了。青轴,右下角Ctrl键弹起来时卡顿半拍,嗒——咔,像主板电容老化。我把BuildConfig.DEBUG改成false试了七遍,每遍都等四百一十三秒,直到第八遍发现是vendor/lib64/libmiuisystemui.so的init_array里调了个__libc_init,而那版系统把__libc_init的PLT表项挪到了.rodata末尾,导致dlopen时跳转地址偏移错四位。不是bug,是ABI微调——官方文档压根没提,只有内部Wiki某页角落标了“仅限内测项目”,连超链接都是broken的。 测试机堆在窗台晒到发烫。六台,编号贴纸翘边,最上面那台屏幕残留指纹印,是我昨天午休摸的。它们亮着同一帧:状态栏右半边显示电池图标,左半边却卡在动画中间帧,帧率固定在11.3fps——不是掉帧,是刻意锁的。小林说这是为了省电,我信;可为什么只锁左半边?因为右半边被第三方天气小部件劫持了onTimeTick,左半边没人碰,就交给系统原生handler,而那个handler在那版系统里被注入了一个叫MiuiAsyncHandlerWrapper的东西,包装之后死循环检测mQueue.mMessages==null,一旦为真,就sleep(87)毫秒再check,但mMessages永远不为null——它被另一个线程提前set成了一段空Message链表,链表头Message.next指向自己,形成环。你查log?没有异常,没有warn,只有一行debug:[MiuiAsyncHandler] msg chain confirmed circular。我敢打包票,我grep了三遍system_server的full dump。 跟人吵架是在凌晨一点半。外包同事阿杰语音说“能不能加个白名单绕过vendor检查”,我回他“你试试在/vendor/app/MiuiSystemUI/oat/arm64里直接改odex header的magic field”。他沉默十二秒,说“算了,我改方案”。其实我不确定odex magic改完会不会触发selinux avc denail,毕竟那版系统里vendor_file:open权限策略是动态加载的,从/data/vendor/miui/sepolicy/override/下的二进制blob读——那个blob上周刚被签名密钥轮换过一次,新密钥指纹没同步到测试机证书库,所以我们今天所有手动push的vendor patch,只要涉及openat(AT_FDCWD, "/vendor/...", ...),统统被denied,但denied日志被redirect到/dev/null,连logcat -b events都抓不到。这个我说不准,没root进去看avc.log,因为root脚本本身又被selinux block了两次。
产品概念图,仅供参考 再说回那个状态栏灰线。后来小林用紫外灯照了一遍,发现不是屏幕问题,是前置摄像头开孔边缘的镀膜应力纹。她截图发到群里,配字:“优胜劣汰,连光线都要选边站队”。我没回。桌上的泡面汤凉透了,面坨成一团,叉子插在上面,斜着,影子投在build日志滚动的屏幕上,晃了一下。 先不说了。我得去重新签一遍vendor overlay的apk——这次用v2+3双签名,不然明天上午十点自动化流水线又挂。对了,洒水车又来了,这次停在楼下,喇叭播“爱护环境,人人有责”,音量调太高,破音了。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

