2017年 Kotlin 被 Google 钦定为 Android 开发官方语言之一后,便如火如荼。很多团队开始应用了Kotlin,可谓是收益良多,可是也有一些问题,一个比较明显的就是Kotlin应用后编译速度会比较慢。这种感觉就像我们从Eclipse迁移到Android Studio变慢差不多。本文将尝试介绍一些方法来改善这一问题。

关于项目编译慢有很多原因,在Android项目中,通常会和Kotlin和Gradle有关系。首先我们通过一组图就能发现这其中的问题。其中红色代表Java,青色代表Kotlin

X轴代表编译次数数据,Y轴达标消耗的时间

Java的项目和Kotlin的项目实现功能一致,无其他额外差别

下图的测试为10次连续的未修改的编译,两个项目均没有启动Gradle daemon。可以看出Kotlin耗时确实要耗时多一些。

接下来我们尝试开启Gradle daemon,下图即为新的测试数据(连续10次开启gradle daemon编译)。

我们可以发现开启gradle daemon后,Java的编译耗时和Kotlin明显减少,但是总的来看,Kotlin还是要耗时一些。

Kotlin在1.0.2后,增加了增量编译,那么我们看一下开启增量编译后的效果呢,如下图(启用增量编译后,连续10次没有文件变化的编译)

我们可以发现,除了第一次编译差距大一些的情况外(因为增量编译对第一次编译不起作用),后续的Java和Kotlin编译时间几乎一样,甚至Kotlin耗时更少。

一个文件不修改的增量编译现实中很少,很多时候我们都会进行文件的修改。当我们尝试修改一个独立的文件,再次执行测试,看一看有什么效果,如下图。

真的不可思议,Kotlin耗时这下已经和Java拉开了更大的差距,表现的更加优秀。

然而项目中,我们的修改往往可能是针对一块核心的代码,很多的地方都调用它,当我们在尝试修改一个核心代码,连续10次进行测试(kotlin开启增量编译),数据又是如何呢?

如下图所示,Kotlin表现依然优秀于Java。

通过上面的图例说明,我们发现其实Kotlin在某些情况下编译并不慢。同样我们也发现了一些加速Kotlin编译的方法,即开启gradle daemon,即在~/.gradle/gradle.properties文件中,增加org.gradle.daemon=true

在项目的gradle.properties中增加kotlin.incremental=true 开启kotlin的增量编译。

尝试使用最新的kotlin版本,增加编译速度是Kotlin团队一直努力的目标

引用资料

kotlin编译失败_关于应用Kotlin后的编译速度问题相关推荐

  1. kotlin编译失败_聊两个 Kotlin 编译器的 bug

    欢迎大家支持原文. 最近在使用 Kotlin 开发一个 IDE 插件,遇到了一些 Kotlin 编译器的 bug ,就在博客里分享一下. Java 交互问题 首先, Kotlin 编译器在遇到接口自带 ...

  2. pdf 深入理解kotlin协程_深入理解Kotlin协程

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  3. ubuntu编译内核_鸿蒙源码下载并编译

    第一章 下载源码并编译 1.1 在Ubuntu中安装开发环境 如果你是从头看文档,并且按照文档操作,那么你已经按照<5.2 安装Ubuntu软件>下载并运行了这个脚本:Configurin ...

  4. vc2010解决方案项目编译顺序_科学网—VS2012 (2008,2010) 编译问题解决合集 - 冯博远的博文...

    问题一: VS2012 (包括从VS2008,VS2010) 出现编译错误:LINK : fatal error LNK1104: cannot open file 'LIBC.lib' 的解决办法: ...

  5. vue代码可以反编译吗_避免小程序被反编译获取源码(转载)

    原地址:https://www.cnblogs.com/taltao/p/10082084.html 众所周知,微信小程序的代码安全性很弱,很容易被别人反编译获取源码.我自己的小程序也被别人反编译拿到 ...

  6. Android Studio 编译时报文件不能删除,编译失败

    在使用android studio 进行android 开发学习的时候,报android studio 无法删除app\build\outputs模块下部分文件,导致编译失败. 出现这种情况后,自己进 ...

  7. 中达优控宏编译失败处理方法

    日常开发一些触摸屏开发项目时,难免会需要使用宏功能,扩充原触摸屏达不到功能.或定制功能.本主使用这款触摸屏有段时间,也遇到不少的问题.下面跟大家分享一下宏编译失败处理方法.如下图所示, 宏编译时没反应 ...

  8. zstd安装_在ARM架构服务器上编译Greenplum6并制作rpm安装包

    刘雪柏 诺基亚东软通信有限公司 高级软件工程师从事数据库相关工作aiden.liu@qq.com Greenplum 是一款开源MPP数据分析平台,提供包括数据分析.机器学习和人工智能等特色功能.目前 ...

  9. kotlin编译失败_Kotlin使用GraalVM开发原生命令行应用

    背景 之前用kotlin开发过一款根据建表DDL语句生成plantuml ER图的应用.被问如何使用,答曰"给你一个jar包,然后执行java -jar ddl2plantuml.jar . ...

最新文章

  1. Coin Slider
  2. XWiki 11.1 发布,协作式应用开发平台
  3. 论CSS样式的使用以及常用属性
  4. bzoj1086[SCOI2005]王室联邦
  5. 进程控制3--signal
  6. Linux系统(Centos)下安装nodejs并配置环境
  7. jupyter notebook如何选择conda环境
  8. 己所不欲,勿施于人的意思,这句话出自哪里?
  9. 北大cls_战报 | 第七届CLS“联合杯”篮球联赛
  10. 渗透测试专业人员使用的11种工具
  11. Wendy Shijia 的「 Escher‘s Gallery」可视化作品复现系列文章(三)
  12. 标准SPI、DUAL SPI、Quad SPI;NorFlash、NandFlash、eMMC闪存的比较与区别
  13. Android绘制圆形图片的3个方法
  14. Android实战 - 音心音乐播放器 (开启篇)
  15. 单片机模拟输出PPM信号
  16. STM32 PWM控制舵机
  17. 订阅内容解码失败(非base64码)_【每日礼包】超杀默示录 密文解码礼包大全
  18. 剪贴板增强工具CLCL
  19. 商品订购系统设计c语言有链表和指针,2014年计算机二级考试VF冲刺试卷及答案 2...
  20. 快充协议诱骗芯片大全:XSQ10支持9V12V15V20V

热门文章

  1. 火柴人小程序linux,火柴人手绘小程序
  2. mybatis 存储过程 tmp_count_mysql存储过程(一)-navicat与mybatis
  3. 有关计算机方面的知识竞赛,关于计算机知识竞赛试题
  4. as常用固定搭配_人民日报整理:英语常用介词固定搭配,太实用了!
  5. (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试
  6. iOS 状态栏 修改为白色字体的步骤
  7. Log4j 配置的webAppRootKey参数问题
  8. 耳机热插拔检测(五)
  9. 八大排序算法总结以及python实现
  10. Android Studio报错:This Gradle plugin requires a newer IDE able to request IDE model level 3