团队使用kotlin挺长时间了,一直以来都不太满意kotlin的编译速度,可是也能忍受。最近开了一个新项目,有很多同事从java过来的,他们就实在是受不了,优化编译速度就变得很重要了。html
在优化以前咱们的一次完整编译时间是2分21秒java
具体的耗时任务在Run Tasks中:android
能够看到具体的耗时任务如上,主要是kapt相关的编译和编译kotlin代码,以及最后的transformClassedWithXXX。git
优化以后的完整编译时间31sapi
优化以后的增量编译时间15s缓存
在项目根目录建立一个gradle.properties文件bash
//开启gradle并行编译,开启daemon,调整jvm内存大小
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
//开启gradle缓存
org.gradle.caching=true
android.enableBuildCache=true
//开启kotlin的增量和并行编译
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kotlin.caching.enabled=true
kotlin.parallel.tasks.in.project=true //开启kotlin并行编译
//优化kapt
kapt.use.worker.api=true //并行运行kapt1.2.60版本以上支持
kapt.incremental.apt=true //增量编译 kapt1.3.30版本以上支持
kapt.include.compile.classpath=false //kapt avoiding 若是用kapt依赖的内容没有变化,会彻底重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间
复制代码
在上面的配置中,咱们首先调整了gradle的配置,而后开启了缓存和kotlin和kapt的增量编译。app
若是项目中使用了kapt请使用最新版本的kapt,当前写该文章时kapt的最新版本为1.3.31
jvm
1.在项目的app目录中的build.gradle文件中修改:gradle
//若是有用到kapt添加以下配置
kapt {
useBuildCache = true
javacOptions {
option("-Xmaxerrs", 500)
}
}
//在Android代码块中添加以下配置:(可优化最上图中transformClassDexBuilderForDebug的时间)
android {
dexOptions {
preDexLibraries true
maxProcessCount 8
}
}
复制代码
2.其余不过重要的优化,好像对时间影响不算特别大
优化版本号的配置,若是是debug版本不要使用动态版本号
//原配置
defaultConfig {
...
minSdkVersion 19
targetSdkVersion 28
versionCode gitVersionCode()
versionName currentName()
...
}
//修改成
defaultConfig {
...
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0.0"
...
}
applicationVariants.all { variant ->
...
if (variant.buildType.name == "release") {
versionName = currentName()
versionCode = gitVersionCode()
}
...
}
复制代码
之前咱们的配置上versionCode是使用的git的提交次数做为版本号的,在本地debug状态的时候其实最好是写死版本号,若是版本号变化会致使须要从新生成Manifest文件以及完整的编译应用,致使InstantRun没法使用(PS其实咱们一直没用InstantRun)。因此修改成写死版本号,而后在applicationVariants中判断若是是release才使用正常的版本号。而后还有一个就是使用依赖版本的时候,尽可能不要使用+号的版本依赖,使用固定版本号速度会更快。
但愿你们省下的编译时间,可以好好陪陪家人。 enjoy~
参考资料:
developer.android.com/studio/buil…
blog.jetbrains.com/kotlin/2019…
Everything 把记帐本日记本,行程,待办等等都装进一个App里。