前言
编译速度太慢了,只是切换代码不同的分支,不做修改,都长达8分钟,修改代码更慢。因此进行了调研与优化。希望大家能给一些建议与意见,帮助提高优化速度。感谢~
现状
切换分支,通过AS BUILD窗口可见,现状时长7分34秒
调研
- 根据调查开启kotlin并行编译
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kotlin.caching.enabled=true
kapt.incremental.apt=true
kotlin.parallel.tasks.in.project=true
#build.gradle
dexOptions{
javaMaxHeapSize "4g"
preDexLibraries true
maxProcessCount 8
}
加入上述kotlin并行编译配置,发现时间变为了8分钟半,去除。
- 根据提示开启configuration缓存并增加jvm堆大小,编译时长7分半,减去了1.7s.
#打开Configuration cache
org.gradle.configuration-cache=true
org.gradle.configuration-cache.problems=warn
org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
剩下一个jetifier,apng在使用不可去除。
再尝试kotlin 增量编译, 提示不应设置dexOptions,新版本会自动选择合适大小,使用如下代码,逐步变更,时长减少20s。
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kapt.incremental.apt=false
kapt.incremental.apt改为true,时长稍微增加,约没变化不做变更,保持和项目一致为false
添加kotlin.caching.enabled=true,时间再少20s
添加kotlin.parallel.tasks.in.project=true,时间稍微减少,保留。
kapt compiler plugin | Kotlin ,打开kapt并行运行kapt.use.worker.api=true ,时间增加,去除
kapt.include.compile.classpath=false 若是用kapt依赖的内容没有变化,会彻底重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间,经检验未减反增。
kapt优化全开启后,时间变得更多,去除
#优化kapt
kapt.use.worker.api=true
kapt.include.compile.classpath=false
kapt.classloaders.cache.size=5
- 为kapt worker进程提供额外的JVM参数,并开启kapt优化,变长,去除
tasks.withType(KaptWithoutKotlincTask.class)
.configureEach {
kaptProcessJvmArgs.add('-Xmx512m')
}
- 提示
2.4% (10.7s) of your build’s time was dedicated to garbage collection during this build. You can change the Gradle daemon heap size on the memory settings page
因此更改内存androidstudio大小为最大值,减少至10s, 仍有提示,内存不足,除了换电脑没其他方式了。可以各自更改配置将配置改为自己电脑AS提供的最大值。
- 开启gradle缓存,可参考这里Use cases for the build cache
gradle.properties
buildCache {
local{
directory =new File(rootDir,'build-cache')
removeUnusedEntriesAfterDays = 30
}
}
#打开gradle cache
org.gradle.caching=true
#开启gradle并行编译,开启daemon,调整jvm内存大小
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
gitignore
#gradle 缓存
build-cache
编译成功后,第一次要存缓存速度微变慢,但后续再切换分支,效果显著,切换分支编译时长减少348s
最终配置
gradle.properties
# kotlin 增量编译
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kapt.incremental.apt=false
kotlin.caching.enabled=true
kotlin.parallel.tasks.in.project=true
#打开Configuration cache
org.gradle.configuration-cache=true
org.gradle.configuration-cache.problems=warn
org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g
#打开gradle cache
org.gradle.caching=true
#开启gradle并行编译,开启daemon,调整jvm内存大小
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
settings.gradle
buildCache {
local{
directory =new File(rootDir,'build-cache')
removeUnusedEntriesAfterDays = 30
}
}
总结
通过上述配置总减少390秒,但是远远不够,请问还有什么办法那?欢迎留言评论交流,感谢?(?ω?)?
ps: 也会在有时间优化期间,不断更新调研结果。