第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Gradle Wrapper 詳解

前面一小節(jié)《Android項目Gradle配置詳解》中我們介紹了 Android 項目的目錄及 Gradle 配置,我們提到有個目錄是/gradle/wrapper。今天這篇文章我們來學習 Gradle Wrapper。通過這篇文章我們將了解什么是 Gradle Wrapper?為什么需要用 Gradle Wrapper?以及 Gradle Wrapper 的重要性。

1. 什么是 Gradle Wrapper?

關于“什么是 Gradle Wrapper?”這個問題在官網是這么定義的:

The recommended way to execute any Gradle build is with the help of the Gradle Wrapper (in short just “Wrapper”). The Wrapper is a script that invokes a declared version of Gradle, downloading it beforehand if necessary. As a result, developers can get up and running with a Gradle project quickly without having to follow manual installation processes saving your company time and money.—官方

我們翻譯過來大致意思就是:官方建議任何 Gradle 構建方法在 Gradle Wrapper 幫助下運行。Gradle Wrapper 它是一個腳本,調用了已經聲明的 Gradle 版本,并且我們編譯時需要事先下載它。所以,開發(fā)者能夠快速的啟動并且運行 Gradle 項目,不用再手動安裝,從而節(jié)省了時間成本。

我們可以稱 Gradle Wrapper 為 Gradle 包裝器,是將 Gradle 再次包裝。讓所有的 Gradle 構建方法在 Gradle 包裝器的幫助下運行。

2. 為什么需要 Gradle Wrapper?

其實關于這個問題在介紹 Gradle Wrapper 的時候已經回答了。下面我們通過一個開發(fā)生活中的案例來形象的介紹一下。我們日常開發(fā)中肯定都是一個團隊在開發(fā),如果沒有 Gradle Wrapper 的話,那么團隊中每來一個新同事,就需要在電腦中安裝 Gradle 環(huán)境。但是有時候我們不同項目 Gradle 的版本又是不一樣的,這就為我們的開發(fā)工作帶來了不便。

于是乎 Gradle 就提供了 Gradle Wrapper,可以讓我們的電腦中不安裝 Gradle 環(huán)境也可以運行 Gradle 項目。這就是上面官方介紹中所說的 Gradle 是一個腳本,調用事先聲明的 Gradle 版本,編譯前去下載它,這樣我們的電腦中就不用再去手動安裝 Gradle 環(huán)境了,從而間接的提高了我們的開發(fā)效率。

從前面一節(jié)課我們可以看到 AndroidStudio 創(chuàng)建項目時默認會創(chuàng)建 Gradle Wrapper 目錄,這也就是我們不用去手動安裝 Gradle 環(huán)境的原因。Gradle Wrapper 的工作流程圖如下:

圖片描述
它的流程主要分為 3 步走:

首先當我們剛創(chuàng)建的時候,如果指定的版本沒有被下載,就先會去 Gradle 的服務器中下載對應版本的壓縮包,下載完成后需要先進行解壓縮并且執(zhí)行批處理文件,后續(xù)項目每次構建都會重用這個解壓過的 Gradle 版本。

3. 如何構建 Gradle Wrapper?

要想構建 Gradle Wrapper 就必須本地先配置了 Gradle 環(huán)境變量,具體的配置方法可以參考《構建自己的 Gradle 工程》中關于 Gradle 環(huán)境變量的配置。Gradle 的命令中已經內置了 wrapper 命令,其實就是執(zhí)行 warpper 任務。該任務就是生成我們前面說的 gradle 文件夾及它的子目錄 wrapper 文件夾。在根目錄下我們先刪掉 gradle 文件夾,然后在項目根目錄執(zhí)行gradle wrapper命令。

C:\Users\LeiQi PC\Documents\MyApplication>gradle wrapper

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

我們會看到會重新生成 Gradle 文件夾,目錄結構如我們上節(jié)中的一樣如下。

圖片描述
這兩個文件的含義如下:

  • gradle-wrapper.jar: 既然是 jar 包,那么它肯定是包含了 Gradle 運行時的邏輯代碼;
  • gradle-wrapper.properties: 這個文件主要負責配置 Gradle wrapper 運行時的屬性文件,聲明具體使用哪個版本的 Gradle。

4. 配置 Gradle Wrapper

我們上面說gradle-wrapper.properties文件指明了 Gradle 的版本號,和 Gradle 運行時的行為屬性文件。下面我們具體看下這個文件的內容:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

關于每個字段的意思如下:

  1. distributionBase: Gradle 解包后存儲的父目錄;
  2. distributionPath: distributionBase指定目錄的子目錄。distributionBase+distributionPath就是 Gradle 解包后的存放的具體目錄;
  3. distributionUrl: Gradle 指定版本的壓縮包下載地址;
  4. zipStoreBase: Gradle 壓縮包下載后存儲父目錄;
  5. zipStorePath: zipStoreBase指定目錄的子目錄。zipStoreBase+zipStorePath就是 Gradle 壓縮包的存放位置。

Tips: 這里我們需要關注 distributionUrl 這個字段,我們經常會遇到升級 AndroidStudio 后項目初始化編譯緩慢的問題。這個問題就是升級后 AndroidStudio 會自定改掉gradle-wrapper.properties里面 distributionUrl 字段 Gradle 的版本號。遇到這個問題我們不慌,可以將該字段改為我們本地已經下載好的版本號。修改完成后重啟 AndroidStudio 就可以很快編譯通過了。

5. 使用 Gradle Wrapper 下載 Gradle

使用 Gradle wrapper 下載 Gradle 我們可以點擊 AS 界面上的同步按鈕,也可以使用 gradlew 命令來執(zhí)行 gradle 命令來下載,下面以 Windows 系統(tǒng)為例,我本地distributionUrl配置的 Gradle 版本是gradle-6.0.1-bin.zip,我們現在改為gradle-5.0-all.zip版本,執(zhí)行clean命令,看看有沒有下載 5.0 版本下載:

C:\Users\LeiQi PC\Documents\MyApplication>gradlew clean
Downloading https://services.gradle.org/distributions/gradle-5.0-all.zip
............10%............20%.............30%............40%............50%.............60%............70%.............80%............90%............100%

Welcome to Gradle 5.0!

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 up-to-date

我們看到這里已經下載了 gradle 5.0 版本,那么按照前面所說,再次執(zhí)行命令,直接調用本地的 Gradle,不會去下載我們來看下:

C:\Users\LeiQi PC\Documents\MyApplication>gradlew clean

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 up-to-date

我們看到這里沒有再去下載 Gradle 版本了而是直接使用上次下載的緩存下來的。

6. 升級Gradle Wrapper

升級 Gradle Wrapper 有 2 種方式:

  1. 一種是我們前面演示的,直接修改distributionUrl字段,然后執(zhí)行Gradle 命令或是點擊同步按鈕同步。
  2. 還有一種就是執(zhí)行 gradlew 命令gradlew wrapper –-gradle-version [version]這里我們將 5.0 升級為最新版 6.0.1.
C:\Users\LeiQi PC\Documents\MyApplication>gradlew wrapper --gradle-version 6.0.1

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
1 actionable task: 1 up-to-date

然后我們使用gradlew -v查看當前的 Gradle 版本號:

C:\Users\LeiQi PC\Documents\MyApplication>gradlew -v

------------------------------------------------------------
Gradle 6.0.1
------------------------------------------------------------

Build time:   2019-11-18 20:25:01 UTC
Revision:     fad121066a68c4701acd362daf4287a7c309a0f5

Kotlin:       1.3.50
Groovy:       2.5.8
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_221 (Oracle Corporation 25.221-b11)
OS:           Windows 10 10.0 amd64

我們看到此時版本號已經升級為 6.0.1了。

7. 自定義 Gradle Wrapper

AndroidStudio 中 Gradle 內置了 Wrapper 任務,因此我們可以直接執(zhí)行 Gradle wrapper。既然他是一個任務,那么我們其實也可以自定義這個任務,定義該任務我們可以指定上面gradle-wrapper.properties文件中的字段,如下所示:

task wrapper(type: Wrapper) {
    gradleVersion = '6.0.1'
    distributionUrl = '../../gradle-6.0.1-bin.zip'
    distributionPath=wrapper/dists
}

Tips: 這里自定義 wrapper 時,我們可以將distributionUrl字段指定為本地的目錄。

8. 小結

這篇文章我們學習了 Gradle Wrapper,已經它的重要性和一些基本的操作。關于這個平時我們基本上用不到,所以只需要理解其原理就行了,唯一要注意的就是我們升級 AndroidStudio 后,項目第一次打開初始化編譯換慢,這時候是因為系統(tǒng)更改了 gradle wrapper 中的 Gradle 版本,由于 Gradle 服務器在國外國內訪問受限,所以我們可以將 Gradle 版本修改為之前本地下載過的版本號,然后重啟 APP 就好了。