熟悉Android studio(安卓死丟丟)或者idea的哥們都能深刻體會到gradle構建的優秀。
同時我們又難以接受的是gradle初始化的緩慢--,老鐵,扎心了。
如果你每天是開著VPN不斷線,那麼可以不用看了 --
其實我們有的時候走心一點可以看到idea(Android studio基於idea社群開源版製作的,所以統稱idea)上面任務進度欄那裡有提示正在下載gradle,地址如下:
https://services.gradle.org/distributions/gradle-3.3-all.zip複製程式碼
沒錯,上面的地址就是gradle環境依賴的壓縮包,同時在idea的gradle專案build完成後,我們可以在專案目錄下面找到一個gradle目錄,結構示意如下:
- gradle
- wrapper
- gradle-wapper.jar
- gradle-wapper.properties
- wrapper
我們直接開啟gradle-wapper.properties檢視到資訊如下:
#Thu Mar 23 21:03:17 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip複製程式碼
我們在上面的properties裡面也能看到有我們專案需要的gradle的構建版本資訊。重點來了,我們在上面可以看到:
distributionBase=GRADLE_USER_HOME複製程式碼
上面的東西可能一樣望去不知所以,但是我們大膽猜測GRADLE_USER_HOME這個東西應該是使用者的gradle目錄,xxxPath可能描述的是某一個路徑,這個時候機靈的我們應該百度搜尋gradle構建快取目錄,直接點開Android Studio 和 gradle 修改快取資料夾路徑就能看到對gradle快取目錄的描述:
根據老司機經驗總結如下:
win:
C:\Users\你的使用者名稱\.gradle
mac:
/Users/你的使用者名稱/.gradle複製程式碼
直接進入.gradle快取目錄,我們一般可以看到如下結構:
- .gradle
- daemon
- native
- caches
- wrapper
我們開啟wrapper目錄就能印證上面的 wrapper/dists 果然存在,進一步開啟,我們能看到內容如下:
驚喜,突然發現我上面的gradle-3.3-all在裡面,開啟gradle-3.3-all剛剛好檢視到gradle-3.3-all.zip也在裡面,這恰恰說明這個就是我們gradle專案的構建環境依賴就在這裡。
所以聰明一點的老司機們都可以把這個wrapper目錄備份下來了,兄弟莫慌,完全不必這個樣子。我們只需要把我們下載的gradle壓縮包留住就行了。
所以,構建速度加快的思路之檔案替換出爐了。在我們新專案第一次構建很久的時候:
- 我們直接到.gradle/wrapper下面查詢idea正在下載的gradle資源
- 然後強行退出idea,
- 接著下載對應的gradle包放到對應目錄
- 重新開啟idea的專案
上面這樣我們就能把第一次gradle構建環境依賴快速載入完成。
葵花寶典,加快gradle專案資源構建、獲取速度
Android studio:
- 修改gradle.properties,加入以下程式碼
#Gradle守護程式
org.gradle.daemon=true
#並行專案執行
org.gradle.parallel=true
#取消檢查lint輸出的增量構建
gradle=build -x lint複製程式碼
- 配置專案的build.gradle
buildscript {
repositories {
// maven庫
// 先從阿里雲maven下載jar若沒有找到,則在後面的倉庫中尋找
//倉庫優先順序從上到下順序排列
maven {
url "http://maven.aliyun.com/nexus/content/repositories/central"
}
jcenter()
mavenCentral()
}
dependencies {
···
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
// maven庫
maven { url "http://maven.aliyun.com/nexus/content/repositories/central" }
maven { url "https://jitpack.io" }
jcenter()
mavenCentral()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
//關閉專案變更後的lint檢查
tasks.whenTaskAdded { task ->
if (task.name == "lint") {
task.enabled = false
}
}複製程式碼
可能一些朋友不明白為什麼是專案的build.gradle。按照idea的構建來相對eclipse解釋,一個專案就是一個對應的工作空間,每個工作空間下面的專案都是不同的module,也就是專案有build.gradle,module也有對應的build.gradle。
- 刪除其他module中的repositories
我們既然已經設定了所有專案的repositories,那麼其他module中repositories就沒必要設定了
idea的gradle專案處理
在專案的build中加入如下設定
```
allprojects {
repositories {// maven庫 // 先從阿里雲maven下載jar若沒有找到,則在後面的倉庫中尋找 //倉庫優先順序從上到下順序排列 maven { url "http://maven.aliyun.com/nexus/content/repositories/central" } maven { url "https://jitpack.io" } jcenter() mavenCentral()複製程式碼
}
}
tasks.whenTaskAdded { task ->
if (task.name == "lint") {
task.enabled = false
}
}
```
- 刪除其他module中的repositories
我們既然已經設定了所有專案的repositories,那麼其他module中repositories就沒必要設定了。
修改idea專案生成程式碼模板,加入以上設定
···未完待續,且聽下回分解。