经验 | 向AOSP贡献虚拟机的优化
💡
原文中文,约9700字,阅读约需24分钟。
📝
内容提要
这篇文章介绍了作者向AOSP贡献的一项优化改动,用于改进JNI调用的功能。作者详细记录了整个开发过程中遇到的问题和经验,并对改动的影响进行了测算。最后,作者提到了一些与国内App生态相关的注意事项。
🎯
关键要点
- 作者向ART主线提交了一项改动,改进JNI调用功能,预计使85%~90%的Java native方法受益。
- 开发和提交过程耗时几个月,经历了许多困难,记录了错误和经验以供参考。
- 改动已合入,将在Android 15正式版中发布,涉及20个文件和1155行代码。
- 作者在去年发现JNI跳板函数生成的相同性,提出共用JNI stub的想法,并与Google工程师讨论可行性。
- 确认计划时需考虑Boot images加载、数据结构设计、架构差异等多个方面。
- 开发过程中使用APEX机制简化了ART模块的下载和更新流程。
- 作者在开发环境中使用VIM,经过配置提高了开发效率。
- 开发过程中遇到许多bug,强调了早期编写测试代码的重要性。
- ART的测试框架分为GTest和run-tests,作者主要关注GTest类型的测试。
- 通过对国内top10应用的测试,发现绝大多数native方法能够从boot images中找到可用的JNI stub。
- 优化后JNI调用的时长显著减少,微观和宏观的性能提升有所不同。
- 最终提交代码时,Google工程师提出了关于性能和代码整洁的建议,强调代码质量的重要性。
- 合入后需经过LUCI持续集成系统的测试,确保没有问题后才能正式发布。
- 作者提到国内App生态中hook计划可能受到影响,特别是对Java方法生成的机器码的修改。
- Android 15中隐藏了许多符号,可能影响某些App的行为,Google对此表示不介意,但担心版本更新带来的问题。
🏷️
标签
➡️