簡單幾招提速 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

相關內容

相關文章
相關標籤/搜索