真我GT8 Pro惊艳亮相:创新设计开启手机新纪元
|
亲历现场。那会儿真我GT8 Pro的首发ROM包凌晨三点压进测试机阵列,我盯着adb log里反复刷出的vendor.qcom.hardware.display.mapper@4.0-service挂起——不是crash,是挂起,像被掐住脖子还喘气。窗外洒水车正路过楼下,滋啦滋啦喷水声混着安卓编译时那个该死的、永远不响第二遍的“叮”提示音。我伸手去够桌上那杯冷掉的关东煮汤,筷子头卡在萝卜块缝里,没捞上来。
产品概念图,仅供参考 测试妹子小满蹲在窗台边清灰,六台GT8 Pro全堆那儿,玻璃反光烫得她后颈冒汗。她说“这代屏下摄像头区发黄得像隔夜茶”,我说“你把sRGB校准表调出来我看看”,结果她点开Settings → Display → Color Mode → Advanced,进去就卡在Loading…不动弹。我原以为是ColorService没起来,结果adb shell dumpsys SurfaceFlinger | grep -i "color" 一查,好家伙,根本没注册binder service。这个我敢打包票——因为昨天通宵改了三遍hal层的vendor接口注册顺序,最后一次commit message还写了“fix: color HAL not bind in vendor domain”。可它就是没bind。 楼下便利店的灯还亮着,蒸锅雾气顶着玻璃往上爬。我切回终端看build日志,发现编译过程里有段十六秒的静默期:aapt2 link阶段结束后,gradle居然等了十八秒才拉起dexmerger。不是慢,是停。就像有人按了暂停键。我截图发给厂商对接人老陈,他秒回:“你clean过没?”我回:“clean -PskipTests”;他再回:“clean -PskipTests && make clean”。我没回。他不知道make clean在那版系统里根本不会清理out/target/product//system/vendor/lib64/hw/graphics.——那个目录下的.so文件是用prebuilt覆盖的,clean命令根本不碰。这个我说不准,但我知道老陈上周刚换的华为Mate60 Pro,在调试机上连adb over network都连不上三次以上。 桌上的机械键盘还在响,同事阿哲噼里啪啦敲着修复overlay的xml,一边敲一边骂“谁把bootanimation.zip塞进system_ext了?”。我顺手切过去看,果然是——bootanimation.zip的meta.xml里写着,但那版系统的system_ext分区根本没有对应的OverlayManagerService入口。不是没加载,是根本没入口函数声明。我删掉那行,repack,push,adb reboot —— 开机动画还是黑屏。阿哲说“那你加个fallback”,我说“fallback哪来的资源路径?overlay机制都绕过去了”。他说“那就硬塞进product分区”。我说“product分区在bootloader验证链里不参与签名校验,你放了等于白放”。他说“那放odm?”我摇头。他最后真把zip扔进了odm/etc/boot-animation/,结果机器直接进fastboot,因为odm分区里不允许出现非vendor signature签名的资源文件夹。失败案例三个:bootanimation黑屏、color mode loading卡死、systemui状态栏icon随机缩放1.3x——这个缩放值是我拿Pixel 7对比测出来的,但缩放触发条件到现在没复现成功。 我其实挺烦“惊艳亮相”这四个字的。去年做Redmi某Pro,发布会前一周系统还报SurfaceFlinger deadloop,我们改了四版surface flinger native层超时判定逻辑,最后发现是GPU driver里一个未公开的power gating bug,只要屏幕旋转时触发光感采样,就概率性锁死HAL线程。厂商只说“已协调高通跟进”,跟进到啥程度?发布会当天,我们六个外包在现场蹲守,手里攥着临时patch的Magisk模块,每台演示机都手动注入——结果主舞台机忘了插USB调试线,patch根本没生效。那天下午我把所有临时patch的md5发给测试妹子小满,让她一条条grep进logcat。她回复:“第十七台机子的log里没有magiskd进程启动记录”。我回:“哦”。然后点了根烟。烟快烧完时,想起她昨天说过一句:“这个机型前置摄像头的HDR合成延迟比上代多两帧”,我当时随口应了句“可能ISP firmware版本对不上”,但后来才发现——是camera hal的buffer pool配置写错了,size配成256×192,而实际sensor输出是320×240,差的那一截buffer全靠memset填黑,填黑耗时刚好卡住YUV→NV12的pipeline。这种细节,没人写spec,没人提CR,更没人验收。 所以现在看到“创新设计开启手机新纪元”,我就想笑。优胜劣汰?对。真优的留下,假优的——比如那个连color mode菜单都打不开的feature,它连进入淘汰池的资格都没有,直接被kernel panic甩出赛道。但问题是,谁来判它死?不是我们,是我们提交PR之后,那个永远不在线的CI服务器。它跑完testsuite,返回PASS,但根本没跑真实case——因为它没连真机,只跑emulator,而emulator根本不加载vendor.qcom.hardware.display.mapper的那个so。我昨天跟阿哲说“要不要把emulator改成强制加载vendor模块”,他敲了两行bash脚本就去吃饭了,回来跟我说“跑了,结果是segfault at libdisplaymapper.so + 0x1a2c”,我看了一眼地址偏移,是某个未初始化的struct member指针解引用——这个struct在那版系统里压根没被vendor driver fill过值。所以我现在盯着真我GT8 Pro的那句宣传语,心里只有一件事:今晚必须把vendor display mapper的init sequence抓个完整的trace,哪怕得重编kernel debug symbols,哪怕得借老陈那台Mate60 Pro当ADB relay(虽然它连不上三次)。 对了,刚才小满端着关东煮路过工位,说“第七台机子的指纹识别区域发热特别明显”,我看了眼thermal_zone,没动。先干完trace再说。热不热,等trace跑完再看。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

