听说 Kotlin 编译慢?
文章目录
大家有没有感觉,在开发过程中,如果是纯 java 项目,等项目越来越大之后,编译的时间也越来越长!
如果添加了 kotlin ,编译会变的更慢!
kotlin配置
在跟 gradle 中添加配置
|
|
在 build.gradle中添加配置
|
|
这样我们就可以使用 kotlin 进行开发了。
优化
其实 google 为了让 kotlin 编译更快,做了很多优化措施!在 kotlin 版本的升级过程中一直在优化~
Kotlin 1.2.20
缓存kapt任务
目前默认情况下,对于kapt的缓存是禁用的,即使是使用-build-cache
,因为Gradle没法为注解处理器映射输入和输出。
通过在kapt配置中设置useBuildCache,您可以显式地启用Kotlin注解处理任务的构建缓存。
|
|
Kotlin 1.2.60
使用 Gradle workers:
对 worker 进行了优化,使编译更快!
|
|
Kotlin 1.3.20
支持的 Gradle 最低版本是 4.1,相应的 Android Graldle Plugin 则是 3.0。
通过并行任务来构建更快的Gradle
Kotlin Gradle插件现在可以在项目中并行执行任务。而Gradle Worker API支持并行执行。将以下配置添加到gradle.properties
或local.properties
文件中以启动该功能:
|
|
这个功能对于自定义了源文件路径的项目非常有用,原本独立的源路径都支持并行编译了。 对于多平台项目,也可以对不同目标平台并行构建。 而Android,debug和release的编译任务可以并行执行。
性能
除了减少内存占用并提高运行时性能之外,此版本还为范围遍历带来了编译器优化,使迭代速度更快。
跳过Kapt编译
在Gradle中为kapt Kotlin
任务增加了对Compile Avoidance的支持,从而提高了构建速度。 当kapt缓存没有发生更改并且只有方法体在依赖关系中发生变动时,它会跳过其编译。如下设置
|
|
在gradle.properties
中启用。但请注意,该设置还会关闭编译类路径中的AP发现,但如果将AP添加到kapt *
配置,则不会对你有任何影响。
在后续版本中会默认开启这个配置。
Kotlin 1.3.30
KAPT 支持注解处理器增量编译
KAPT 已经支持注解处理器增量编译,该特性仍处灰度实验阶段,你可以通过在gradle.properties
中添加以下配置来启用它:
|
|
需要指出的是,在现有版本中引入任何非增量编译的注解处理器或者依赖的变化(截止目前,包括内部声明的修改)都会导致该模块的注解处理过程退化为非增量模式。
后续会持续跟进该项功能的完善。
调试功能的提升
当你在调试协程代码时,你可以看到有一个单独的异步堆栈 “Async stack trace” 显示挂起时的变量。看一个例子:
当程序在 suspend 函数或者 Lambda(例子的第 13行)中的断点停止时, “Async stack trace” 显示了变量在上一次挂起时的状态(12行)。你可以浏览 suspend 函数在当前协程中从上一个挂起点的全部的堆栈 (第12、4行)并确认变量的值:
这会帮助你更方便的理解当前协程的运行状态。
在调试 Kotlin 代码时,你可以选择 “Kotlin” 模式来查看变量。点击 Kotlin icon,你就可以看到变量的 Kotlin 名字,而不是底层的 Jvm 名字:
指定 JVM 字节码版本为 9 – 12
如果你的程序运行在 JVM 9, 10, 11, 或者 12 等版本下,你可以设置 jvmTarget
到对应的版本了。这个设置会影响生产的 class 文件的字节码版本,它们不是后向兼容的,这一点请注意。相比之下,新目标版本不会有任何字节码优化也不会有任何新特性,不过这种情况不会长久的。
|
|
Java 编译器选项
Kapt 使用 Java 编译器来运行注解处理器。 以下是将任意选项传给 javac 的方式:
|
|
非存在类型校正
一些注解处理器(如 AutoFactory
)依赖于声明签名中的精确类型。默认情况下,Kapt 将每个未知类型(包括生成的类的类型)替换为 NonExistentClass
,但你可以更改此行为。将额外标志添加到 build.gradle
文件以启用在存根(stub)中推断出的错误类型:
|
|
Kotlin 1.3.40
Kotlin/Native
在内存管理器中包含了一些改进以提高Kotlin/Native应用程序的性能。从基准测试中观察到性能提升了将近两倍。
Kotlin 1.3.50
改进的Java到Kotlin转换器
新的Java-to-Kotlin转换器改进版本尝试根据代码中的Java类型用法更正确地推断可空性。请注意,没有目标可以产生100%无错误的代码。目的是减少编译错误的数量,并使生成的Kotlin代码更易于使用。新的转换器也修复了许多其他已知的错误。例如,它现在可以正确处理隐式Java类型转换。
注意点
在 kotlin 开发中,会碰到各种问题,尤其是下面文件在打包的时候或者编译的时候会报错,如果遇到问题,请添加如下代码:
|
|
总结
把上面的配置都加上, kotlin 的编译会快的起飞~
快到自己的项目中配置起来~
如果你喜欢我的文章,可以关注我的掘金、公众号、博客、简书或者Github!
简书: https://www.jianshu.com/u/a2591ab8eed2
GitHub: https://github.com/bugyun
Blog: https://ruoyun.vip
欢迎关注微信公众号
文章作者 若云
上次更新 2019-09-20