結(jié)合Kotlin使用Gradle build cache

在2017年4月,Gradle發(fā)布了build cache的beta版本。構(gòu)建緩存與不斷增長的構(gòu)建特性相互補(bǔ)充。Gradle 4.0版本中,構(gòu)建緩存已經(jīng)準(zhǔn)備好。

build cache 允許Gradle復(fù)用之前任務(wù)調(diào)度的輸出,其中包括其它機(jī)器上的輸出。Kotlin 1.2.21 允許Kotlin工程使用build caching。

構(gòu)建緩存(build cache)的工作原理是:在緩存中存儲已編譯的類、測試輸出和其他構(gòu)建構(gòu)件,同時考慮所有的任務(wù)輸入,包括輸入文件內(nèi)容、相關(guān)類路徑和任務(wù)配置。


這樣的話android studio構(gòu)建會更快。下面的圖表分別顯示了Gradle持續(xù)集成時使用構(gòu)建緩存和不使用構(gòu)建緩存兩種情況下的聚合的構(gòu)建時間:

在本文我們將會討論如何使用build cache來避免不必要的Kotlin編譯來提高構(gòu)建速度。

Spek的快速demo

按照下面的步驟,你現(xiàn)在就可以使用build cache了:

Clone Spek

git clone https://github.com/spekframework/spek.git
cd spek

分支2.x(默認(rèn)分支)已經(jīng)有了所有的prerequisites for build caching,這些我們后面再討論。

構(gòu)建和填入緩存(Build and populate cache)

下面的代碼將會構(gòu)建Spek并且填入本地的build cache。

? ./gradlew assemble --build-cache
 
BUILD SUCCESSFUL in 10s
21 actionable tasks: 21 executed

使用--build-cache標(biāo)記是告訴Gradle將輸出保存到一個隔離的輸出棧緩存中的其中一種方式。

移除/更改構(gòu)建輸出

這模擬在另一臺機(jī)器上,或者可能做出改變并將其stash。最快捷的演示方法是使用clean task。

? ./gradlew clean

從構(gòu)建緩存中重新構(gòu)建和解析

這一次,當(dāng)我們重新構(gòu)建時,所有Kotlin編譯的資源都是從構(gòu)建緩存中提取出來的。

? ./gradlew assemble --build-cache
 
BUILD SUCCESSFUL in 2s
21 actionable tasks: 11 executed, 10 from cache

瞧!您只是使用了Gradle的構(gòu)建緩存來重用Kotlin編譯的類,而不是重新編譯!建造速度大約是5倍快!

從這個構(gòu)建掃描中可以看到,Kotlin編譯任務(wù)是從構(gòu)建緩存中提取出來的;:jar:processResources任務(wù)不是從緩存中獲取因?yàn)樵诒镜厣蒵ar和復(fù)制文件比從緩存中提取更快。注意,:test緩存也是支持的。

當(dāng)一個CI實(shí)例填充共享的構(gòu)建緩存(開發(fā)人員可以從中提取)時,Gradle構(gòu)建緩存尤其高效。這里有實(shí)現(xiàn)這一目標(biāo)的更多資源的鏈接。

在項目中開啟構(gòu)建緩存(build cache)

我希望你在項目中試下構(gòu)建緩存,可以遵循下面的步驟來開啟構(gòu)建緩存。

第一,保證Gradle版本是4.3或者以上,這樣的話Kotlin Gradle插件能選擇使用新的APIs。使用Gradle wrapper可以輕松更新Gradle。

第二,保證Kotlin版本是1.2.20或者以上。在根目錄下的build.gradle文件的buildscript {}模塊中加上這樣的代碼:

dependencies {
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.21"
}

第三,我們要告訴Gradle我們要使用build cache,這有三種方法:

  1. 只對當(dāng)前的構(gòu)建開啟,構(gòu)建命令加上參數(shù)--build-cache即可。
  2. 只對當(dāng)前工程開啟,在文件$PROJECT_ROOT/gradle.properties中添加org.gradle.caching=true
  3. 對當(dāng)前用戶的所有構(gòu)建都開啟,在文件$GRADLE_HOME/gradle.properties中添加org.gradle.caching=true

注意: 即使設(shè)置了android.enableBuildCache=true,開發(fā)者仍然需要做上面的事情,因?yàn)镚radle的構(gòu)建緩存和Android的構(gòu)建緩存是相互獨(dú)立的。

我們可以選擇性地利用IDE的構(gòu)建緩存,將運(yùn)行和測試操作委托給Gradle。

在IntelliJ中開啟構(gòu)建緩存

如果你要IntelliJ執(zhí)行Gradle任務(wù)的話,那么要將IED設(shè)置中的的“Delegate IDE build/run actions to Gradle”開啟來發(fā)揮構(gòu)建緩存的優(yōu)勢。

注意: Android Studio默認(rèn)做了這個東西。

緩存kapt任務(wù)

目前默認(rèn)情況下,對于kapt的緩存是禁用的,即使是使用-build-cache,因?yàn)镚radle沒法為注解處理器映射輸入和輸出。通過在kapt配置中設(shè)置useBuildCache,您可以顯式地啟用Kotlin注解處理任務(wù)的構(gòu)建緩存。

kapt {
  useBuildCache = true
}

深入閱讀

您可以通過這些資源了解更多關(guān)于利用Gradle構(gòu)建緩存的知識:

結(jié)論

使用1.2.20版本及以上的kotlin-gradle-plugin編譯Kotlin代碼的話我們可以發(fā)揮Gradle的構(gòu)建緩存的優(yōu)勢來加速項目的開發(fā)周期。關(guān)于擴(kuò)展支持構(gòu)建緩存任務(wù)的工作會持續(xù)進(jìn)行。

繼續(xù)前進(jìn)!



翻譯自原文: Using Gradle build cache with Kotlin,感覺翻譯的很不好,請批評指正??。

參考文獻(xiàn):
1. Speed up your Build with Gradle Remote Build Cache

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • 小城市真的安靜的特別早。 晚上一個人騎自行車總是習(xí)慣音量開到很大,大到根本聽不到外界的聲音。就這樣一直騎著騎著。 ...
    城市花大姐閱讀 605評論 0 49
  • 1. apply() apply()調(diào)用一個方法,其具有一個指定的this值,以及作為一個數(shù)組(或類似于數(shù)組的參數(shù)...
    賀賀v5閱讀 2,269評論 0 3

友情鏈接更多精彩內(nèi)容