真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

你的安卓項目編譯要花10分鐘,如何縮短到1分鐘?-創(chuàng)新互聯(lián)

痛點
如果項目的代碼庫較大,例如大型的安卓開發(fā)項目,在構建的時候耗時較長,達到數(shù)十分鐘甚至更長,分析其原因,其中一部分時間是花在構建上。在大規(guī)模開發(fā)團隊中,例如上百人的開發(fā)團隊,如果每個人構建一次需要花費數(shù)十分鐘,那么團隊每天浪費的時間是非常驚人的。
除了構建時間,執(zhí)行 Gradle Build 的時候很大一部分時間是花在單元測試用例的執(zhí)行上,這樣的問題也困擾著大規(guī)模 Gradle 的用戶。

雜多網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。

方案
為了讓構建提升速度,Gradle 4.0 以上版本提供了Build Cache 的功能,也就是構建緩存。注意,這里的構建指的不是構建產(chǎn)出物,例如 war,jar 文件,而是 Java 構建的字節(jié)碼 .class文件。通過緩存每次構建產(chǎn)生的.class 文件,實現(xiàn) Java 項目的增量編譯。Gradle 項目能夠在第一次構建之后,創(chuàng)建一個 Key-value 的鍵值對數(shù)據(jù),將每個.class 文件通過一個 key 索引起來。而這些鍵值對以及.class 文件會上傳到一個中央服務器(例如 Nginx 或者 JFrog Artifactory),當用戶再次構建,或者其他成員構建時,會先將中央服務器的緩存文件下載到本地,再進行打包,這樣就能大大減少編譯構建時間,實現(xiàn)增量編譯。

注意,這里不僅僅能夠緩存軟件程序的.class 文件,對應單元測試用例編譯產(chǎn)生的.class 文件同樣能夠緩存。

這里以開源版 Artifactory 為例,結合 Gradle 實現(xiàn)增量編譯:
你的安卓項目編譯要花 10 分鐘,如何縮短到 1 分鐘?

?創(chuàng)建一個示例項目“gradle-cache-example”
在這個 Java 工程里只需要創(chuàng)建一些普通的 Java 類即可,后面我們將驗證如何將這段代碼對應的 class 緩存起來,節(jié)約構建時間。
為設置構建緩存前執(zhí)行構建:./gradlew clean build
BUILD SUCCESSFUL in 11s
13 actionable tasks: 12 executed, 1 up-to-date

可以看到構建耗時 12 秒。

?在本地搭建開源版 Artifactory 作為構建緩存中央服務器。搭建開源版 Artifactory 最方便的方式是用容器啟動:

docker run --name artifactory -d -p 8081:8081 docker.bintray.io/jfrog/artifactory-oss:latest

?設置構建緩存
在開發(fā)本地的工程文件中的 gradle.properties中設置如下配置,將構建緩存指向 Artifactory。

gradle.properties
artifactory_user=admin
artifactory_password=password
artifactory_url=http://localhost:8081/artifactory
org.gradle.caching=true
gradle.cache.push=false

設置 CI 服務器上的settings.gradle,下面是 Jenkins 的腳本:
include "shared", "api", "services:webservice"
ext.isPush = getProperty('gradle.cache.push')
buildCache {
local {
enabled = false
}
remote(HttpBuildCache) {
url = "${artifactory_url}/gradle-cache-example/"
credentials {
username = "${artifactory_user}"
password = "${artifactory_password}"
}
push = isPush
}
}

在CI 服務器上執(zhí)行 ./gradlew clean build -Pgradle.cache.push=true。通過設置gradle.cache.push=true,實現(xiàn)本地構建緩存向中央服務器的推送。
BUILD SUCCESSFUL in 1s
13 actionable tasks: 7 executed, 5 from cache, 1 up-to-date
可以看到構建時間從 12 秒縮短到 1 秒,其中 5 個任務是來自緩存。

來確認下我們的構建加速并不是來自本地緩存,可以查看 Artifactory 的訪問日志:

20170526153341|3|REQUEST|127.0.0.1|admin|GET|/gradle-cache-example/6dc9bb4c16381e32ca1f600b3060616f|HTTP/1.1|200|1146
20170526153341|4|REQUEST|127.0.0.1|admin|GET|/gradle-cache-example/e5a67dca52dfaea60efd28654eb8ec97|HTTP/1.1|200|1296

可以看到本地緩存,均來自 Artifactory 的統(tǒng)一倉庫。

?跨部門,地域共享構建緩存

在大型分布式研發(fā)團隊里,構建環(huán)境往往分布在各個地域,例如北京,上海。在這種情況下,構建緩存上傳到本地的 Artifactory 之后,并不能夠被遠程的構建服務器使用。這是需要用到 Artifactory 企業(yè)版的文件實時復制功能實現(xiàn)。
你的安卓項目編譯要花 10 分鐘,如何縮短到 1 分鐘?

如上圖所示:當本地開發(fā)者或者 CI 服務器執(zhí)行第一次構建時,Artifactory 會通過 Push Replication(推送復制)的方式將本地的緩存推送到遠程的 Artifactory,當遠程的用戶在執(zhí)行 Gradle 構建時,能夠受益于已有的構建緩存,從而大大加速構建的速度。

總結
本文展示并說明了如何使用 Gradle和 Artifactory 開源版進行構建緩存的實現(xiàn),提升構建速度。使用 Artifactory 企業(yè)版,能夠實現(xiàn)跨地域的構建緩存共享,優(yōu)化公司級別的構建速度。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享名稱:你的安卓項目編譯要花10分鐘,如何縮短到1分鐘?-創(chuàng)新互聯(lián)
路徑分享:http://weahome.cn/article/decoii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部