当前位置: 首页>后端>正文

编译速度实战

前言

编译速度太慢了,只是切换代码不同的分支,不做修改,都长达8分钟,修改代码更慢。因此进行了调研与优化。希望大家能给一些建议与意见,帮助提高优化速度。感谢~

现状

切换分支,通过AS BUILD窗口可见,现状时长7分34秒

调研

  1. 根据调查开启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分钟半,去除。

  1. 根据提示开启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
  1. 剩下一个jetifier,apng在使用不可去除。

  2. 再尝试kotlin 增量编译, 提示不应设置dexOptions,新版本会自动选择合适大小,使用如下代码,逐步变更,时长减少20s。

kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kapt.incremental.apt=false
  1. kapt.incremental.apt改为true,时长稍微增加,约没变化不做变更,保持和项目一致为false

  2. 添加kotlin.caching.enabled=true,时间再少20s

  3. 添加kotlin.parallel.tasks.in.project=true,时间稍微减少,保留。

  4. kapt compiler plugin | Kotlin ,打开kapt并行运行kapt.use.worker.api=true ,时间增加,去除

  5. kapt.include.compile.classpath=false 若是用kapt依赖的内容没有变化,会彻底重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间,经检验未减反增。

  6. kapt优化全开启后,时间变得更多,去除

#优化kapt
kapt.use.worker.api=true
kapt.include.compile.classpath=false
kapt.classloaders.cache.size=5
  1. 为kapt worker进程提供额外的JVM参数,并开启kapt优化,变长,去除
tasks.withType(KaptWithoutKotlincTask.class)
        .configureEach {
            kaptProcessJvmArgs.add('-Xmx512m')
        }
  1. 提示
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提供的最大值。

  1. 开启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: 也会在有时间优化期间,不断更新调研结果。


https://www.xamrdz.com/backend/3ve1936677.html

相关文章: