App启动优化:Android 17.7秒压到4.5秒,双工具交叉验证法

0 阅读3分钟

篇我用 AI + perfetto 把 Android 启动从 17.7 秒压到 6.9 秒。

图1 · Perfetto 界面,记录了一次启动过程的完整 trace

但这只是第一步——trace 能说明哪里慢,却解释不了为什么慢。同样一份代码、同样的场景,在 iOS 和鸿蒙上一点都不慢,到了 Android 就慢。

问题不在业务代码里。

这一篇我补上了第二层验证:启动日志(Logcat)。把两套工具交叉起来看,Android 启动又降到了 4.5 秒。

数据口径(已按原文报告逐项核对):

  • Android:17.7s → 6.9s → 4.5s(True Total 4504.00ms)

  • iOS 参照:2.6s(True Total 2576.38ms)

  • 还差约 1.9 秒,未追平

一、上一轮的成绩:6.9 秒之后卡住了

上篇的结论是:启动总耗时约 6.48 秒,其中系统黑屏期 3717ms,AI 给的建议是**「优化场景」**。

我让 AI 继续按这个方向深入分析。

图2 · AI 读 trace 后给出的分析数据

AI 给的建议很明确:优化场景。

图3 · AI 给出的建议:优化场景

图4 · 用 Android Studio 抓取到的启动日志

通常这是标准的思考路径——既然 trace 显示场景加载占大头,那就优化场景。

但这次,感觉得不对劲。

二、疑点:同样的代码,iOS 不慢

应用有同样的场景、同样的代码,只是平台不同。

就像不同的瓶子装酒——酒没有变,但是换了一个叫 Android 的瓶子,酒的味道变了。这时候 AI 反倒让我去找「酒」的问题。

这不对劲,不是吗?

三、第二层验证:把启动日志接进来

感觉 trace 的结论说不通,就换了工具看。

追踪过程除了 trace,还有日志。可以让 AI 帮配好抓日志的环境(手机连上电脑),启动应用时开始抓 Logcat,启动结束再停。

AI 拿到日志后,分析出了 trace 看不到的东西。

图5 · AI 拿到日志后的分析结果

四、日志里的真相:3 秒静默

AI分析出了关键证据,在日志里非常清晰:

  • 01:14:03.587 打出 Tuanjie ApplicationInfo

  • 06.641 才打出下一条 License hash

  • 中间 3 秒,一行日志都没有

这 3 秒不是「没干活」,而是 libtuanjie.so + libil2cpp.so 在做 mmap、重定位、IL2CPP 元数据注册——日志里不体现,但时间是实打实的。

图6 · 打包配置:il2cppCompilerConfiguration 被设成了 Debug

五、锅找到了:打包配置留在了 Debug

根因是这行配置:

il2cppCompilerConfiguration: Android: 0  =  Debug

libil2cpp.so 在 Debug 下体积通常是 Release 的 2–3 倍,页错误和加载时间自然跟着涨。那 3 秒的静默,直接指向它。

调整后结果就出来了。

图7 · 启动时间报告(Android):True Total 4504ms

六、结果,以及还差的 1.9 秒

改完这一项,Android 启动 True Total 4504.00ms,也就是 4.5 秒。

图8 · 启动时间报告(iOS 对照):True Total 2576ms

iOS 那边是 2576.38ms,约 2.6 秒。

4.5 秒 vs 2.6 秒,还差约 1.9 秒,没有追平,更没有超越。 场景本身还有优化空间,另外,Android 的硬件也还没追上苹果。

七、双工具交叉验证法

  • trace 定模块:用 AI + Perfetto 查 trace,得到「时间花在哪个模块」。

  • 日志定操作:用 AI + 启动 Log,得到「到底卡在哪一步操作」。

后续思路:在4.5秒基础上,再来一次trace定模块+日志,重新来一遍····Hhhhhh


觉得有用就 点赞 + 在看 + 关注,点赞超过 100,我们继续把那 1.9 秒挖到底。

你的启动优化,最后是抓到了根因,还是让AI开盲盒?评论区聊聊。