應用Kotlin以後,涉及到註解的註解處理器依賴也會由annotationProcessor
替換成kapt
,和最初應用Kotlin同樣,總會讓人一種感受,一番應用Kotlin和Kapt以後,編譯耗時更長了,不過好在Kotlin和Google 在這一方面作了不少的優化和改進,本文將簡單介紹一些配置,來實現項目編譯關於kapt這方面的加速。java
默認狀況下,kapt註解處理任務並無利用開啓gradle的構建緩存,須要咱們手動增長配置開啓android
開啓方式:在項目的app module下的 build.gradle 文件增長以下代碼git
1
2 3 |
kapt { useBuildCache = true } |
注意:github
kapt
配置和android
配置同一層級。org.gradle.caching=true
)爲了加快構建速度,咱們能夠利用Gradle worker API
實現並行執行kapt任務。api
開啓方式,在gradle.properties
文件中增長緩存
1
|
kapt.use.worker.api=true |
注意:bash
Gradle worker API
需依賴Gradle
4.10.3及以上。除此以外,咱們能夠利用Gradle compile avoidance
(編譯規避)來避免執行註解處理。app
註解處理被略過的場景有ide
開啓方式:
kapt
顯式聲明gradle.properties
文件中增長kapt.include.compile.classpath=false
注意:
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