我想使用新的kotlin gradle插件功能并缓存我的构建结果,有关更多信息,请阅读this.
增强构建的另一种方法是缓存kapt任务,但默认情况下不启用它
because Gradle does not yet have a way to map inputs and outputs for
annotation processors
我拥有的唯一kapt依赖是匕首2,根据你的经验,缓存它是否安全?
解决方法:
缓存Kapt任务的输出不被认为是安全的原因是注释处理器包含可能不符合确保正确缓存的一个或多个要求的任意代码:
>转换应该只使用任务输入,不应该考虑任何其他因素.默认情况下,任务输入包括源,编译类路径,Android布局,编译器和注释处理器选项和实现以及其他一些内容,但您可以根据需要注册其他输入.
当注释处理器使用的某些输入未被跟踪时,违反此规则会导致错误的高速缓存命中,并且这些输入的更改不会反映在Gradle计算的高速缓存键中,从而导致在运行任务时出现命中实际上会产生不同的产出.
>应该跟踪注释处理器生成的所有输出作为任务输出,默认情况下生成Java& Kotlin来源,并生成二进制类.如果任务生成其他任何内容,您可以手动将其注册为构建脚本中的任务输出.
不遵循此规则会将一些生成的输出保留在缓存之外,而不是保存它们,因此不会加载它们.
>注释处理器应该是纯粹的,也就是说,给定相同的输入,它应该产生相同的outpupts.它不应显示随机行为或使用系统时间.
不遵循此规则的注释处理器的高速缓存输出是徒劳的,因为它通常会导致高速缓存未命中或错误的高速缓存命中.
据我所知,Dagger 2遵循这些规则,缓存其输出应该可以正常工作,但我无法提供相应的保证.无论如何,请随意尝试并查看缓存如何适用于您的构建.
如果您遇到任何特定注释处理器的问题,据说应根据上述规则进行缓存,请将其报告给Kotlin issue tracker.
标签:android,gradle,android-gradle,kotlin,dagger-2
来源: https://codeday.me/bug/20190701/1347504.html