團(tuán)隊(duì)使用kotlin挺長時(shí)間了,一直以來都不太滿意kotlin的編譯速度,但是也能忍受。最近開了一個(gè)新項(xiàng)目,有不少同事從java過來的,他們就實(shí)在是受不了,優(yōu)化編譯速度就變得很重要了。
優(yōu)化之前和之后的對(duì)比
在優(yōu)化之前我們的一次完整編譯時(shí)間是2分21秒
具體的耗時(shí)任務(wù)在Run Tasks中:
可以看到具體的耗時(shí)任務(wù)如上,主要是kapt相關(guān)的編譯和編譯kotlin代碼,以及最后的transformClassedWithXXX。
優(yōu)化之后的完整編譯時(shí)間31s
優(yōu)化之后的增量編譯時(shí)間15s
看完這里大家是不是已經(jīng)開始直呼,**,這樣也可以!別著急,下面就帶大家一起來搞一搞,好東西一定要分享不是嗎?
優(yōu)化步驟
1.優(yōu)化gradle配置:
在項(xiàng)目根目錄創(chuàng)建一個(gè)gradle.properties文件
//開啟gradle并行編譯,開啟daemon,調(diào)整jvm內(nèi)存大小
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并行編譯
//優(yōu)化kapt
kapt.use.worker.api=true //并行運(yùn)行kapt1.2.60版本以上支持
kapt.incremental.apt=true //增量編譯 kapt1.3.30版本以上支持
//kapt avoiding 如果用kapt依賴的內(nèi)容沒有變化,會(huì)完全重用編譯內(nèi)容,省掉最上圖中的:app:kaptGenerateStubsDebugKotlin的時(shí)間
kapt.include.compile.classpath=false
在上面的配置中,我們首先調(diào)整了gradle的配置,然后開啟了緩存和kotlin和kapt的增量編譯。
如果項(xiàng)目中使用了kapt請(qǐng)使用最新版本的kapt,當(dāng)前寫該文章時(shí)kapt的最新版本為1.3.31
2.優(yōu)化app的build.gradle
1.在項(xiàng)目的app目錄中的build.gradle文件中修改:
//如果有用到kapt添加如下配置
kapt {
useBuildCache = true
javacOptions {
option("-Xmaxerrs", 500)
}
}
//在Android代碼塊中添加如下配置:(可優(yōu)化最上圖中transformClassDexBuilderForDebug的時(shí)間)
android {
dexOptions {
preDexLibraries true
maxProcessCount 8
}
}
2.其他不太重要的優(yōu)化,好像對(duì)時(shí)間影響不算特別大
優(yōu)化版本號(hào)的配置,如果是debug版本不要使用動(dòng)態(tài)版本號(hào)
//原配置
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的提交次數(shù)作為版本號(hào)的,在本地debug狀態(tài)的時(shí)候其實(shí)最好是寫死版本號(hào),如果版本號(hào)變化會(huì)導(dǎo)致需要重新生成Manifest文件以及完整的編譯應(yīng)用,導(dǎo)致InstantRun無法使用(PS其實(shí)我們一直沒用InstantRun)。所以修改為寫死版本號(hào),然后在applicationVariants中判斷如果是release才使用正常的版本號(hào)。然后還有一個(gè)就是使用依賴版本的時(shí)候,盡量不要使用+號(hào)的版本依賴,使用固定版本號(hào)速度會(huì)更快。
希望大家省下的編譯時(shí)間,能夠好好陪陪家人。?如果覺得不錯(cuò)的朋友也請(qǐng)幫我點(diǎn)個(gè)關(guān)注,你的喜歡是我大的動(dòng)力~
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:今天我把APP的編譯速度縮短了近5倍-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://chinadenli.net/article36/djghpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、商城網(wǎng)站、外貿(mào)建站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容