简单几招提速 Kotlin Kapt编译
应用Kotlin之后,涉及到注解的注解处理器依赖也会由annotationProcessor替换成kapt,和最初应用Kotlin一样,总会让人一种感觉,一番应用Kotlin和Kapt之后,编译耗时更长了,不过好在Kotlin和Google 在这一方面做了很多的优化和改进,本文将简单介绍一些配置,来实现项目编译关于kapt这方面的加速。
开启Gradle 构建缓存支持(Gradle build cache support)
默认情况下,kapt注解处理任务并没有利用开启gradle的构建缓存,需要我们手动增加配置开启
开启方式:在项目的app module下的 build.gradle 文件增加如下代码
1 |
|
注意:
kapt配置和android配置同一层级。- 该特性支持从Kotlin 1.2.20开始。
- 上述配置生效需Gradle为4.3及以上,且开启build-cache。(增加—build-cache 选项或在gradle.properties文件添加
org.gradle.caching=true)
并行执行kapt任务
为了加快构建速度,我们可以利用Gradle worker API实现并行执行kapt任务。
开启方式,在gradle.properties文件中增加
1 |
|
注意:
Gradle worker API需依赖Gradle4.10.3及以上。- 该特性支持自Kotlin 1.2.60
- 启用并行执行,会引发更高的内存占用
启用kapt编译规避
除此之外,我们可以利用Gradle compile avoidance(编译规避)来避免执行注解处理。
注解处理被略过的场景有
- 项目的源文件没有改变
- 依赖的改变是ABI(Application Binary Interface)兼容的,比如仅仅修改某个方法的方法体。
开启方式:
- 对于注解依赖需要使用
kapt显式声明 - 在
gradle.properties文件中增加kapt.include.compile.classpath=false
注意:
- 该特性需 Kotlin 1.3.20 及以上
增量注解处理
Kotlin 自1.3.30引入了一个实验功能,即支持注解增量处理。
开启需要很简单,在gradle.properties中加入
1 |
|
但是还需要有一个前提,就是开启Gradle的增量编译(Kotlin 1.1.1已默认开启)。
除此之外,关键的因素还是需要开依赖的注解处理器是否支持增量处理。
如何查看注解处理器是否支持增量编译
1 |
|
更新依赖至最新版
上面我们看到了glide,butterknife等依赖,我们都可以通过将这些依赖更新到最新版来解决
- Glide在v4.9.0版本增加了增量处理支持,对应的github commit为 https://github.com/bumptech/glide/commit/a16a1baa140c9b87b9a68a2a3b91047fd60ba5d8
- google/auto 也在较早的时候进行了支持,对应的github commit为 https://github.com/google/auto/commit/a5673d06f687e1354f1f069cce36136538cf532c
更新加手动配置
以Dagger为例,除了更新到最新版之外,还需要增加如下的配置
1 |
|
参考链接https://github.com/google/dagger/issues/1120
Troubleshooting
- 如果启用上面的方案导致问题,可以找到对应的配置,关闭该特性。
最后的建议
- 积极保持依赖为最新(稳定)版,否则时间越长升级成本越大。
References
- https://kotlinlang.org/docs/reference/kapt.html
- https://medium.com/avast-engineering/making-incremental-kapt-work-speed-up-your-kotlin-projects-539db1a771cf
相关内容
简单几招提速 Kotlin Kapt编译的更多相关文章
- DedeCMS数据负载性能优化方案简单几招让你提速N倍
前文介绍了DedeCMS栏目列表页实现完美分页的方法,避免了大部分重复栏目标题对搜索引擎的影响,对SEO更有利.今天,分享一下DedeCMS数据负载性能优化的方法. 接触织梦也有三年多时间了,对它可谓 ...
- android开发(0):android studio的下载安装与简单使用 | sdk的安装与编译运行
android studio,简称AS,是集成开发环境,所谓集成,就是集编辑.编译.调试.打包等于一体.简单来说,通过AS,就可以开发出在android系统上运行的APP. 我使用的是macos系统. ...
- Android系统篇之—-编写简单的驱动程序并且将其编译到内核源码中【转】
本文转载自:大神 通过之前的一篇文章,我们了解了 Android中的Binder机制和远程服务调用 在这篇文章中主要介绍了Android中的应用在调用一些系统服务的时候的原理,那么接下来就继续来介绍一 ...
- kotlin查看编译后的Java代码
java学一下kotlin,由于用的是同样的jvm,那就说明他们的字节码文件应该是一样的,那么,如果我们能看到编译后的文件,那么学的更快了. 操作 1.打开一个.kt文件 2.在Android Stu ...
- 简单一招实现json数据可视化
开发一个内部功能时碰到的需求,要把json数据在页面上展示出来,平时浏览器会安装jsonView这样的扩展来看json数据,但是程序要用到的话该怎么办呢?今天在网上搜索的时候,发现了这个小技巧,分享一 ...
- Win10系统出问题?简单一招即可修复win10!
时至今日,win10系统的普及率越来越高,在微软多种策略的强推下,10月份win10系统的市场份额已达22.59%,但win10系统也不是完美的,总有些还是会出现一些诸如打开应用程序出现闪退.乱码.总 ...
- 简单三招,设计复杂ERP报表
报表无疑是ERP系统中用到的最频繁的单据之一.比如每天采购要打印采购明细帐:仓库每天要导出收货或者出货明细:销售每天要打印订单明细等.故报表的设计在ERP系统开发中占据大半江山. 不过笔者在实际工作中 ...
- 简单几招助您加速 ARM 容器应用开发和测试流程
随着5G时代的临近,低延迟网络.AI硬件算力提升.和智能化应用快速发展,一个万物智联的时代必将到来.我们需要将智能决策.实时处理能力从云延展到边缘和IoT设备端.阿里云容器服务推出了边缘容器,支持云- ...
- 简单几招,解决jQuery.getJSON的缓存问题
今天做测试工作,发现了一个令我费解的问题,jquery的getJson方法在firefox上运行可以得到返回的结果,但是在ie8上测试,竟发现没有发送请求,故不能取到任何返回的结果,经历了一翻周折,找 ...
随机推荐
- 201871010134-周英杰《面向对象程序设计(java)》第十三周学习总结
201871010134-周英杰<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- Pytorch 使用不同版本的 cuda
由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验.在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 c ...
- flask如何返回真正意义上的json字符串?以及中文如何正常显示?
flask中,不能直接return字典,需要把字典转换为json字符串方式有三种:1. return str(字典)2.return json.dumps(字典)3.return jsonify(字典 ...
- 题解 P3620 【[APIO/CTSC 2007]数据备份】
直接贪心(每次选最小)的话显然不对...样例都过不了... 选两个办公楼的时候,显然不能跨越另一个楼,这样不优... 于是 先把原数列处理成n-1个的数(每一个办公楼和上一个的距离),存在a[]中 题 ...
- CF1151F Sonya and Informatics(概率期望,DP,矩阵快速幂)
明明是水题结果没切掉……降智了…… 首先令 $c$ 为序列中 $0$ 的个数,那么排序后序列肯定是前面 $c$ 个 $0$,后面 $n-c$ 个 $1$. 那么就能上 DP 了.(居然卡在这里……) ...
- 编译安装php-fpm5.6 (centos 7)
一.安装php-fpm依赖包 yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zl ...
- thinkphp5.1 - twig模板-全局变量
thinkphp5.1 - twig模板-全局变量我们在定义 ccs 之类的静态文件的时候,经常会使用<link rel="stylesheet" href="__ ...
- CSP-S 2019 简要题解
从这里开始 又考炸了,sad.....明年应该在准备高考了,考完把坑填了好了. 一半题都被卡常,qswl.[我汤姆要报警.jpg] dfs 怎么这么慢呀,sad..... i7 牛逼! 写的比较混乱, ...
- oracle--错误笔记(二)--ORA-16014
ORA-16014错误解决办法 01.问题以及解决过程 SQL> select status from v$instance; STATUS ------------ MOUNTED SQL&g ...
- webpack系列--浅析webpack的原理
一.前言 现在随着前端开发的复杂度和规模越来越大,鹰不能抛开工程化来独立开发,比如:react的jsx代码必须编译后才能在浏览器中使用,比如sass和less代码浏览器是不支持的.如果摒弃这些开发框架 ...