[Android、Java]加快gradle構建

pc859107393發表於2017-03-24

熟悉Android studio(安卓死丟丟)或者idea的哥們都能深刻體會到gradle構建的優秀。

同時我們又難以接受的是gradle初始化的緩慢--,老鐵,扎心了。

如果你每天是開著VPN不斷線,那麼可以不用看了 --

[Android、Java]加快gradle構建
行走的java全棧

其實我們有的時候走心一點可以看到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

我們直接開啟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 果然存在,進一步開啟,我們能看到內容如下:

[Android、Java]加快gradle構建
gradle.wrapper快取目錄

驚喜,突然發現我上面的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:

  1. 修改gradle.properties,加入以下程式碼
#Gradle守護程式
org.gradle.daemon=true

#並行專案執行
org.gradle.parallel=true

#取消檢查lint輸出的增量構建
gradle=build -x lint複製程式碼
  1. 配置專案的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。

  1. 刪除其他module中的repositories

我們既然已經設定了所有專案的repositories,那麼其他module中repositories就沒必要設定了

idea的gradle專案處理

  1. 在專案的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
}
}

```

  1. 刪除其他module中的repositories

我們既然已經設定了所有專案的repositories,那麼其他module中repositories就沒必要設定了。

修改idea專案生成程式碼模板,加入以上設定

···未完待續,且聽下回分解。

相關文章