kotlin 编译速度优化,省下时间不再996

2019-05-1105:59:15APP与小程序开发Comments3,374 views字数 1869阅读模式

一直以来都不太满意 kotlin 的编译速度,但是也能忍受。最近开了一个新项目,有不少同事从 java 过来的,他们就实在是受不了,优化编译速度就变得很重要了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

优化之前和之后的对比

在优化之前我们的一次完整编译时间是 2 分 21 秒文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

kotlin 编译速度优化,省下时间不再996文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

具体的耗时任务在 Run Tasks 中:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

kotlin 编译速度优化,省下时间不再996文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

可以看到具体的耗时任务如上,主要是 kapt 相关的编译和编译 kotlin 代码,以及最后的 transformClassedWithXXX。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

优化之后的完整编译时间 31s文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

kotlin 编译速度优化,省下时间不再996文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

优化之后的增量编译时间 15s文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

kotlin 编译速度优化,省下时间不再996文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

kotlin 编译速度优化,省下时间不再996文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

优化步骤:

1.优化 gradle 配置:

在项目根目录创建一个 文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

  1. //开启gradle并行编译,开启daemon,调整jvm内存大小
  2. org.gradle.daemon=true
  3. org.gradle.configureondemand=true
  4. org.gradle.parallel=true
  5. org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
  6. //开启gradle缓存
  7. org.gradle.caching=true
  8. android.enableBuildCache=true
  9. //开启kotlin的增量和并行编译
  10. kotlin.incremental=true
  11. kotlin.incremental.java=true
  12. kotlin.incremental.js=true
  13. kotlin.caching.enabled=true
  14. kotlin.parallel.tasks.in.project=true //开启kotlin并行编译
  15. //优化kapt
  16. kapt.use.worker.api=true //并行运行版本以上支持
  17. kapt.incremental.apt=true //增量编译 版本以上支持
  18. kapt.include.compile.classpath=false //kapt avoiding 如果用kapt依赖的内容没有变化,会完全重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间

在上面的配置中,我们首先调整了 gradle 的配置,然后开启了缓存和 kotlin 和 kapt 的增量编译。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

如果项目中使用了 kapt 请使用最新版本的 kapt,当前写该文章时 kapt 的最新版本为 1.3.31文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

2.优化 app 的

1.在项目的 app 目录中的 文件中修改:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

  1. //如果有用到kapt添加如下配置
  2. kapt {
  3. useBuildCache = true
  4. javacOptions {
  5. option("-Xmaxerrs", 500)
  6. }
  7. }
  8. //在Android代码块中添加如下配置:(可优化最上图中transformClassDexBuilderForDebug的时间)
  9. android {
  10. dexOptions {
  11. preDexLibraries true
  12. maxProcessCount 8
  13. }
  14. }

2.其他不太重要的优化,好像对时间影响不算特别大文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

优化版本号的配置,如果是 debug 版本不要使用动态版本号文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

  1. //原配置
  2. defaultConfig {
  3. ...
  4. minSdkVersion 19
  5. targetSdkVersion 28
  6. versionCode gitVersionCode()
  7. versionName currentName()
  8. ...
  9. }
  10. //修改为
  11. defaultConfig {
  12. ...
  13. minSdkVersion 19
  14. targetSdkVersion 28
  15. versionCode 1
  16. versionName ""
  17. ...
  18. }
  19. applicationVariants.all { variant ->
  20. ...
  21. if (variant.buildType.name == "release") {
  22. versionName = currentName()
  23. versionCode = gitVersionCode()
  24. }
  25. ...
  26. }

以前我们的配置上 versionCode 是使用的 git 的提交次数作为版本号的,在本地 debug 状态的时候其实最好是写死版本号,如果版本号变化会导致需要重新生成 Manifest 文件以及完整的编译应用,导致 InstantRun 无法使用(PS 其实我们一直没用InstantRun)。所以修改为写死版本号,然后在 applicationVariants 中判断如果是 release 才使用正常的版本号。然后还有一个就是使用依赖版本的时候,尽量不要使用+号的版本依赖,使用固定版本号速度会更快。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

希望大家省下的编译时间,能够好好陪陪家人。 enjoy~文章源自菜鸟学院-https://www.cainiaoxueyuan.com/xcx/12065.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/xcx/12065.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定