为 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() 方法可以在构建结尾执行而不需要聚合所有类,适合当前场景。

  • 增加内存缓存以确保构建结果的可靠性,避免不一致性问题。

🔎

延伸解读

AGP8 的变更影响

AGP8 移除了 Transform API,导致许多插件需要重构。这一变更对大型项目的编译速度影响显著,尤其是在代码量庞大的情况下,开发者需关注如何优化插件以适应新 API。

编译速度优化策略

TheRouter 通过结合 AsmClassVisitorFactory 和 toTransform() 方法的优缺点,提出了新的编译策略。开发者可以借鉴这种按需插桩的方式,减少不必要的类聚合,从而提升编译效率。

内存缓存的重要性

为确保构建结果的可靠性,TheRouter 引入了内存缓存机制。这一做法可以有效避免因构建不一致而导致的潜在问题,开发者在使用 SDK 时应关注构建结果的稳定性。

延伸问答

AGP8 移除了 Transform API 会有什么影响?

AGP8 移除 Transform API 导致许多插件代码需要修改,编译速度变慢,尤其在代码量大时。

TheRouter 如何提高编译速度?

TheRouter 通过使用 AsmClassVisitorFactory 进行按需插桩,并使用 toGet() 方法避免聚合,从而提高编译速度。

toTransform() 方法的主要问题是什么?

toTransform() 方法聚合所有类,导致编译速度慢,并且无法使用增量编译。

如何解决 toTransform() 方法导致的编译速度慢的问题?

可以使用 AsmClassVisitorFactory 进行按需插桩,避免将所有类聚合成一个 jar,从而减少编译时间。

TheRouter 目前的方案是怎样的?

TheRouter 结合了 AsmClassVisitorFactory 和 toTransform() 的优缺点,使用内存缓存确保构建结果的可靠性。

toGet() 方法有什么优势?

toGet() 方法在构建结尾执行,不需要聚合所有类,适合当前场景,能够提高编译效率。

🏷️

标签

➡️

继续阅读