为 TheRouter 的 AGP8 编译加个速

为 TheRouter 的 AGP8 编译加个速

💡 原文中文,约5900字,阅读约需14分钟。
📝

内容提要

AGP8 移除了 Transform API,导致许多插件代码需修改。新方法 toTransform() 聚合所有类,影响编译速度。为提高效率,TheRouter 采用 AsmClassVisitorFactory 进行按需插桩,并使用 toGet() 方法避免聚合,从而提升编译速度,并通过内存缓存确保构建结果的可靠性。

🎯

关键要点

  • AGP8 移除了 Transform API,导致许多插件代码需修改。
  • TheRouter 支持 AGP8,使用 Gradle 提供的标准 API。
  • toTransform() 方法聚合所有类,导致编译速度变慢,尤其在代码量大时。
  • 新方法的输出类型为 RegularFileProperty,只能返回一个文件,无法使用增量编译。
  • 老版本的 Transform API 允许直接复制不需要操作的类,效率更高。
  • 解决思路1:使用 AsmClassVisitorFactory 进行按需插桩,减少编译时间。
  • 解决思路2:利用 KSP/KAPT 生成的类记录文件,但在独立模块中可能会丢失。
  • TheRouter 目前的方案结合了 AsmClassVisitorFactory 和 toTransform() 的优缺点。
  • toGet() 方法可以在构建结尾执行而不需要聚合所有类,适合当前场景。
  • 增加内存缓存以确保构建结果的可靠性,避免不一致性问题。
➡️

继续阅读