💡
原文中文,约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() 方法可以在构建结尾执行而不需要聚合所有类,适合当前场景。
- 增加内存缓存以确保构建结果的可靠性,避免不一致性问题。
➡️