应用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