真我GT8发布:性能颜值双爆,你Pick哪面?
|
亲历现场。那天凌晨三点十七分,我盯着编译窗口卡在 dexmerger 的最后一行,光标一动不动,而窗外洒水车正拐进园区,滋啦——滋啦——像块砂纸来回磨我太阳穴。真我GT8那条预热文案弹出来的时候,我刚把咖啡泼在机械键盘F12键上,黑褐色的渍一圈圈漫开,嗒、嗒、嗒,每滴落声都跟键盘背光灯的频闪对得上拍子。
产品概念图,仅供参考 厂商对接人老陈发来语音:“张工,文案过一遍就行,重点是别漏字。”他声音里带着刚醒的鼻音,背景里有小孩哭,估计是半夜被娃踹醒了还惦记着上线率。我点开链接,页面加载出“真我GT8发布:性能颜值双爆,你Pick哪面?”——就这句。没配图,没参数,没渲染图,就一行字浮在纯白背景上。我盯着它看了十八秒,手悬在键盘上没动。我原以为是运营填错了占位符,结果点开源码,发现是系统级文案资源表里真就硬编码了这一句。没占位符,没string-array,没@plurals,就一个raw_string。我敢打包票,那个res/values-zh-rCN/strings.xml文件里,第473行,就是它。测试妹子小雨在钉钉甩过来三张截图:AOSP那版系统下字体撑开两像素、ColorOS那版系统下TextView getLineCount()返回-1、还有个我到现在没复现出来的——她在OPPO某内测机上点了五次“Pick”,第三次点完UI直接黑屏一秒,再亮起来时文案变成“真我GT8发布:性能颜值双爆,你Pick哪面?”。不是乱码,不是空白,就是原样复读。她没写logcat,只打了句“又来了”,后面跟着个疲惫的猫猫头表情包。我回她“你清不清SharedPrefs”,她隔了四分钟回“清了,重启三次,还那样”。我没继续问,因为我知道问了也没用——那种黑屏后原样复读的事,八成是SurfaceFlinger线程卡死导致BufferQueue里塞了旧帧,但谁会为一行文案去扒GraphicBuffer的refcount? 楼下便利店关东煮的蒸气糊在玻璃上,像一层薄雾。我蹲那儿买了串鱼豆腐,老板娘递过来时塑料盒边角有点烫手,我捏着没松,就那么站着剥竹签。她说今天新进了昆布高汤,我点头嗯了一声,脑子里还在跑那个ResourceDecoder的缓存穿透逻辑:为什么第一次loadString()走AssetManager能拿到,第二次走ResourcesImpl就null?后来发现是他们把resources.arsc里的string pool entry指针手动挪偏了三位——为了适配某定制ROM的压缩表结构。这种事,写了七年,见得太多。可这次是文案啊,不是launcher icon尺寸,不是NotificationChannelGroup名,是一行纯文本。你说它不重要?但它在开机向导第二步就弹出来,用户点错一次,后续埋点全乱。 我改完那一行,加了fallback、加了maxLines=1、加了setTextIsSelectable(false),编译完推到六台测试机。三台正常,一台跳到设置页报ANR(就那台用了两年的老测试机,电池鼓包顶得后盖翘起两毫米),还有一台……它根本没显示那句文案。不是空,不是崩溃,是彻底没了。Activity onResume()都走完了,view hierarchy里TextView节点都在,text属性也非空,就是屏幕漆黑一片。我蹲着看Logcat,翻到三百七十二行,发现是SystemUIService里一个兜底Handler.postDelayed()把整个mDecorView.setAlpha(0)了,就因为检测到“文案长度>12字符且含中文标点”——他们管这叫“防误触降权机制”。我说不准这是哪个模块加的,老陈说可能是UI中台新来的实习生套了个开源库。我信,但没问名字。 桌上的机械键盘青轴声越来越脆,嗒、嗒、嗒,像敲在钢板上。我把键盘推远一点,左手无名指抵着桌沿,指甲缝里还沾着早上拆机留下的硅脂灰。真我GT8那句“优胜劣汰”……其实他们自己没写错。我昨天翻OTA差分包,发现系统分区里realme_res_ext.zip里有三套字体:默认、轻量、高压缩。而那句文案,在轻量字体下“Pick”俩字直接被font fallback吞掉,系统顺手用DroidSansFallback渲染,结果“P”和“i”间距大到像是两个词。这不是bug,是策略。他们真就把“不兼容的设备”和“兼容的设备”切开了——不是靠API level,不是靠hardware spec,就靠一句文案能不能完整显示。这算不算优胜劣汰?算。但谁定的淘汰线?是那个写XML的人?还是改了六遍dexmerger脚本却没动过resource compiler的构建组?我说不准。 测试机堆在窗台晒到发烫,金属边框烫得没法直接上手摸。我拿张湿纸巾垫着,一台台拔USB线。拔到第四台,发现Type-C口有点歪,插进去要斜着按两下才识别。这台是上个月摔过的,摄像头模组换了两次,但主板一直没换。它现在跑着真我GT8的OTA包,UI流畅,动画丝滑,唯独那句文案,每次唤醒都要迟滞三百毫秒才浮现。我把它放回窗台最边上,让阳光直晒摄像头玻璃盖板。反正明天上午十点前,所有机型都要过终验。至于那台迟滞的……我截图发给老陈,备注:“建议标为‘非主力适配机型’”。他秒回一个OK手势。我没说它其实是厂内自用测试机,编号T6398B。这事儿没必要讲圆。 我现在打开Android Studio,新建一个empty activity,就为了验证一件事:如果我把strings.xml里那行改成“真我GT8发布:性能颜值双爆”,删掉“你Pick哪面?”,会不会触发同一个黑屏逻辑。编译进度条走到87%,还没出dex,我先去楼下再买份关东煮。这次要萝卜块,多放海带结。要是回来还没好,我就把resource table里那行手动patch成base64再decode——至少能让它不依赖那该死的font fallback链。反正deadline是明早九点,我还有五小时十七分。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

