简单几招提速 Kotlin Kapt编译

https://droidyue.com/blog/2019/08/18/faster-kapt/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.iohtml

应用Kotlin以后,涉及到注解的注解处理器依赖也会由annotationProcessor替换成kapt,和最初应用Kotlin同样,总会让人一种感受,一番应用Kotlin和Kapt以后,编译耗时更长了,不过好在Kotlin和Google 在这一方面作了不少的优化和改进,本文将简单介绍一些配置,来实现项目编译关于kapt这方面的加速。java

开启Gradle 构建缓存支持(Gradle build cache support)

默认状况下,kapt注解处理任务并无利用开启gradle的构建缓存,须要咱们手动增长配置开启android

开启方式:在项目的app module下的 build.gradle 文件增长以下代码git

1
2 3 
kapt {  useBuildCache = true } 

 

注意:github

  • kapt配置和android配置同一层级。
  • 该特性支持从Kotlin 1.2.20开始。
  • 上述配置生效需Gradle为4.3及以上,且开启build-cache。(增长—build-cache 选项或在gradle.properties文件添加org.gradle.caching=true

并行执行kapt任务

为了加快构建速度,咱们能够利用Gradle worker API实现并行执行kapt任务。api

开启方式,在gradle.properties文件中增长缓存

1
kapt.use.worker.api=true 

注意:bash

  • Gradle worker API需依赖Gradle4.10.3及以上。
  • 该特性支持自Kotlin 1.2.60
  • 启用并行执行,会引起更高的内存占用

启用kapt编译规避

除此以外,咱们能够利用Gradle compile avoidance(编译规避)来避免执行注解处理。app

注解处理被略过的场景有ide

  • 项目的源文件没有改变
  • 依赖的改变是ABI(Application Binary Interface)兼容的,好比仅仅修改某个方法的方法体。

开启方式:

  • 对于注解依赖须要使用kapt显式声明
  • gradle.properties文件中增长kapt.include.compile.classpath=false

注意:

  • 该特性需 Kotlin 1.3.20 及以上

增量注解处理

Kotlin 自1.3.30引入了一个实验功能,即支持注解增量处理。

开启须要很简单,在gradle.properties中加入

1
kapt.incremental.apt=true 

可是还须要有一个前提,就是开启Gradle的增量编译(Kotlin 1.1.1已默认开启)。

除此以外,关键的因素仍是须要开依赖的注解处理器是否支持增量处理。

如何查看注解处理器是否支持增量编译

1
2 3 4 5 6 7 8 9 10 11 12 13 
./gradlew aDeb -Pkapt.verbose=true | grep KAPT  [INFO] Incremental KAPT support is disabled. Processors that are not incremental:  com.bumptech.glide.annotation.compiler.GlideAnnotationProcessor,  dagger.internal.codegen.ComponentProcessor,  android.arch.lifecycle.LifecycleProcessor. [INFO] Incremental KAPT support is disabled. Processors that are not incremental:  butterknife.compiler.ButterKnifeProcessor,  com.alibaba.android.arouter.compiler.processor.AutowiredProcessor,  com.alibaba.android.arouter.compiler.processor.InterceptorProcessor,  com.alibaba.android.arouter.compiler.processor.RouteProcessor,  dagger.internal.codegen.ComponentProcessor,  com.google.auto.service.processor.AutoServiceProcessor. 

更新依赖至最新版

上面咱们看到了glide,butterknife等依赖,咱们均可以经过将这些依赖更新到最新版来解决

更新加手动配置

以Dagger为例,除了更新到最新版以外,还须要增长以下的配置

1
2 3 4 5 6 7 8 9 
android {  defaultConfig {  javaCompileOptions {  annotationProcessorOptions {  arguments << ["dagger.gradle.incremental": "true"]  }  }  } ] 

参考连接https://github.com/google/dagger/issues/1120

Troubleshooting

  • 若是启用上面的方案致使问题,能够找到对应的配置,关闭该特性。

最后的建议

  • 积极保持依赖为最新(稳定)版,不然时间越长升级成本越大。

References

相关内容

相关文章
相关标签/搜索