今天我把APP的编译速度缩短了近5倍-创新互联

团队使用kotlin挺长时间了,一直以来都不太满意kotlin的编译速度,但是也能忍受。最近开了一个新项目,有不少同事从java过来的,他们就实在是受不了,优化编译速度就变得很重要了。

“专业、务实、高效、创新、把客户的事当成自己的事”是我们每一个人一直以来坚持追求的企业文化。 创新互联建站是您可以信赖的网站建设服务商、专业的互联网服务提供商! 专注于网站设计、成都做网站、软件开发、设计服务业务。我们始终坚持以客户需求为导向,结合用户体验与视觉传达,提供有针对性的项目解决方案,提供专业性的建议,创新互联建站将不断地超越自我,追逐市场,引领市场!

优化之前和之后的对比

在优化之前我们的一次完整编译时间是2分21秒

今天我把APP的编译速度缩短了近5倍

具体的耗时任务在Run Tasks中:

今天我把APP的编译速度缩短了近5倍

可以看到具体的耗时任务如上,主要是kapt相关的编译和编译kotlin代码,以及最后的transformClassedWithXXX。

优化之后的完整编译时间31s

今天我把APP的编译速度缩短了近5倍

优化之后的增量编译时间15s

今天我把APP的编译速度缩短了近5倍今天我把APP的编译速度缩短了近5倍

看完这里大家是不是已经开始直呼,**,这样也可以!别着急,下面就带大家一起来搞一搞,好东西一定要分享不是吗?

优化步骤

1.优化gradle配置:

在项目根目录创建一个gradle.properties文件

//开启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 avoiding 如果用kapt依赖的内容没有变化,会完全重用编译内容,省掉最上图中的:app:kaptGenerateStubsDebugKotlin的时间
kapt.include.compile.classpath=false

在上面的配置中,我们首先调整了gradle的配置,然后开启了缓存和kotlin和kapt的增量编译。

如果项目中使用了kapt请使用最新版本的kapt,当前写该文章时kapt的最新版本为1.3.31

2.优化app的build.gradle

1.在项目的app目录中的build.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才使用正常的版本号。然后还有一个就是使用依赖版本的时候,尽量不要使用+号的版本依赖,使用固定版本号速度会更快。

希望大家省下的编译时间,能够好好陪陪家人。 如果觉得不错的朋友也请帮我点个关注,你的喜欢是我大的动力~

今天我把APP的编译速度缩短了近5倍

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

分享题目:今天我把APP的编译速度缩短了近5倍-创新互联
转载源于:https://www.cdcxhl.com/article36/djghpg.html

成都网站建设公司_创新互联,为您提供微信公众号做网站手机网站建设商城网站外贸建站网站策划

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营