真我13震撼发布!性能影像双突破,玩家首选神机
|
产品概念图,仅供参考 亲历现场。那晚九点四十七,编译卡在 dexmerge 的 final phase,我盯着进度条——它卡在 99.8%,已经停了十八秒。窗外洒水车正路过,滋啦滋啦,声音像老式收音机调频失锁。我原以为是 gradle 插件版本冲突,结果发现是 vendor overlay 里一个空的 false 被那版系统当成 true 解析了,就因为前缀没加 android:。真我13震撼发布!性能影像双突破,玩家首选神机——这句 PR 稿子钉在测试组 Slack 频道顶置栏三小时,底下没人点赞,只有测试妹子发了个截图:她用的那台样机,在连按五次电源键触发紧急呼叫时,弹出的却是相册最近删除页。我敢打包票,这不是 kernel panic,是 SystemUI 的 crash handler 把 intent filter 错绑给了 KeyguardServiceReceiver。但我说不准,为什么同个 vendor 分区刷进 realme 12 Pro+ 就不翻车。桌上的机械键盘声咔嗒咔嗒,青轴,没换过轴体,按 shift 键总带半毫秒粘滞。我顺手敲了三行 logcat 过滤:adb logcat | grep -E "(Navigation|Emergency|Keyguard)",回车键按下那刻,楼下便利店的关东煮刚出锅,竹签串着鱼豆腐撞在不锈钢托盘上,叮——。测试机堆在窗台晒到发烫,七台,全是真我13 工程样机,屏幕朝下扣着,散热孔全堵死,有两台边框烫得不敢直接上手拿。其中一台蓝光膜裂了条细缝,像被指甲掐出来的——是外包同事阿哲昨天半夜调 AOD 亮屏逻辑时手滑刮的,他现在还在酒店续房,说要赶在凌晨两点前把 vendor.dalvik.system 对齐线程池策略补完。但我觉得没用。这句“玩家首选神机”,重点根本不在“玩家”,也不在“神机”,在“优胜劣汰”。 我翻过 three-ten 代码树,realme 13 的 camera2 HAL 实际走了 vendor_ext_camera_wrapper.cpp 第 417 行那个 if (isLegacyMode()) { fallbackToZsl(); } 分支——可 isLegacyMode() 返回值是硬编码 true,就写死在 /vendor/lib64/hw/camera.realme.default.so 里。厂商对接人老周今天中午微信发来截图,说“系统侧已确认该接口行为符合规范”,配图是 AOSP 13.0 的 CDD 文档 PDF 截图,第 7.5.3 节,加粗标黄。我没回。我盯着自己写的 patch:给同一函数套了三层 wrapper,第三层才偷偷把 isLegacyMode 改成 false,靠读取一个不存在的 ro.vendor.camera.legacy.force 属性来触发。这种 patch 走 internal CI 没人敢 merge。但它能跑。它在真我13 上跑通了三轮 stress test。它甚至没崩一次 CameraService。所以我现在改不了。不是不想,是改了就压不住那版系统的 SELinux avc denials。我试过两次。第一次删掉 wrapper,avc 日志每秒三百七十二条,system_server 直接 OOM;第二次把判断条件改成读 sysfs,结果 vendor_daemon 崩三次,最后靠重载 udev rule 才捞回来——但 udev rule 不进 ota zip,等于白忙。所以说“优胜劣汰”是真的,只不过淘汰的不是旧算法,是敢碰这个 flag 的人。 阿哲刚打电话过来,声音沙哑:“logcat 抓到个 new issue,WiFi 切 hotspot 瞬间,Settings App 崩溃,堆栈在 com.android.settings.network.WifiTetheringSettings.onPreferenceTreeClick。”我没吭声。我知道,这其实是那版系统 framework-res.apk 里一个 drawable resource id 冲突,ID 0x7f0804ab 同时被定义在 res/values/public.xml 和 res/values-zh-rCN/public.xml 里,前者指向 ic_wifi_hotspot_off,后者指向 ic_settings_backup_restore,而 Settings 的 java 代码硬写了 R.drawable.ic_wifi_hotspot_off。但中文包优先级高,一加载就挂。这问题我在 OPPO K12 上见过一模一样的,改 public.xml 是最土的解法,可 realme 给的 base apks 是 signed 的,你连 aapt2 dump 都打不开资源表。所以只能把整套 res 目录挪进 Settings 源码,再改 build.gradle 的 resources.srcDirs……但这样 OTA 合并的时候 merge conflict 就疯了。我现在懒得说了。我刚才看见老周朋友圈发了张图:真我13 首销排队现场,手机壳印着“性能影像双突破”,背景是蓝色横幅。底下评论清一色“冲了”,没人问相机有没有黑边、OTA 会不会丢蓝牙配对记录。我点了赞。 碎纸机在角落嗡嗡响,昨天下午撕掉的三张方案纸片还卡在入口处,边缘卷着焦黄。测试妹子发来新视频:同一批样机,十台里七台在播放《奥本海默》杜比音效版时,左声道电平低 12dB,右声道正常。查了三天,不是 audio HAL,不是 vendor.audio.primary.default.so,是那版系统 init.rc 里一句 service media-sound /system/bin/mediaserver –start-audio 后面漏了个 --force-2ch 参数,而 realme 把这个参数塞进了 system_ext 的 vendor_init.rc 里,偏偏又只在 boot completed 之后 reload 一次。所以冷启动没问题,热重启就有。这 bug 我抓到了,改了一行,push 上去,CI 跑通。但老周说先放着,PR 发布会前不 push 新 binary。我就把 patch 提交到了 personal repo 的 wip-realme13-12db-fix 分支。分支名起长了点,但我怕以后忘了哪次改的是什么。 我打算明天上午八点再看一遍 vendor overlay 里的 xml 命名空间声明。不是为了修那个 navigation bar,是为了看看有没有别的地方也偷偷把 android: 前缀吃了。但说实话,我现在有点无所谓。毕竟等 OTA 包封版那天,这行代码早被自动脚本删掉了,替换为一段从云端下发的 JSON config。至于 JSON 里写啥……那就不归我们管了。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

