介紹
Wrapper,看到這個(gè)單詞大家應(yīng)該都不陌生,它就是位于Android項(xiàng)目根目錄下的gradle文件夾中的gradle-wrapper.properties腳本文件。其實(shí)它就是對(duì)Gradle的一層包裝,我們都知道一個(gè)Android的項(xiàng)目需要使用Gradle來構(gòu)建,但是不同版本的項(xiàng)目需要不同版本的Gradle,而Wrapper簡化了Gradle的部署,手動(dòng)去部署的話就比較麻煩了,這里說得項(xiàng)目的版本指的是開發(fā)此項(xiàng)目所使用的Android Studio Gradle插件的版本,也就是我們通常所說的編譯器的版本,而Android Studio Gradle插件和Gradle的版本對(duì)應(yīng)關(guān)系如下:

所以,我們?cè)趯?dǎo)入別人的項(xiàng)目之前,要先根據(jù)自己的編譯器版本去修改Gradle的版本,如果版本不對(duì)應(yīng)會(huì)出現(xiàn)以下錯(cuò)誤:

我的編譯器版本為2.3.3,它所對(duì)應(yīng)的Gradle版本最低為3.3,而當(dāng)前我的項(xiàng)目的Gradle版本為2.14.1,那么顯而易見項(xiàng)目就會(huì)構(gòu)建失敗,解決它很簡單,只需要修改gradle-wrapper.properties文件中的distributionUrl字段即可,將2.14.1改為3.3,如圖:

最后再重新build,這樣Wrapper就會(huì)檢查Gradle有沒有被下載關(guān)聯(lián),如果沒有就會(huì)從配置的地址(Gradle的官方地址)進(jìn)行下載并運(yùn)行構(gòu)建。
生成Wrapper
我們創(chuàng)建一個(gè)新的項(xiàng)目,Gradle會(huì)自動(dòng)為我們生成Wrapper所需的目錄文件,其實(shí)在Gradle中內(nèi)置了一個(gè)Wrapper task,如果我們要手動(dòng)去生成Wrapper,只需要在項(xiàng)目的根目錄下輸入gradle wrapper即可,

生成的文件如下:

Wrapper 配置
我們?cè)诮K端執(zhí)行gradle wrapper生成相關(guān)文件時(shí),可以為其指定一些參數(shù),來控制Wrapper的生成,比如依賴的版本等,如下:
| 參數(shù)名 | 說明 |
|---|---|
| --gradle-version | 用于指定使用的Gradle版本 |
| --gradle-distribution-url | 用于指定下載Gradle發(fā)行版的url地址 |
使用方法為gradle wrapper --gradle-version 3.3,這樣我們所配置的Wrapper就會(huì)使用3.3版本的Gradle,它會(huì)影響gradle-wrapper.properties中的distributionUrl的值,該值的規(guī)則是http\://services.gradle.org/distributions/gradle-${gradleVersion}-bin.zip
如果我們?cè)趫?zhí)行gradle wrapper的時(shí)候不添加任何參數(shù),那么就會(huì)使用你當(dāng)前Gradle的版本作為生成的Wrapper的gradle version。例如,你當(dāng)前安裝的Gradle是3.3版本的,那么生成的Wrapper也是3.3版本的。
gradle-wrapper.properties
該文件是wrapper的配置文件,我們上面執(zhí)行任務(wù)的配置都會(huì)被寫進(jìn)此文件中。該文件的配置字段如下:
| 字段名 | 說明 |
|---|---|
| distributionBase | 下載的Gradle壓縮包解壓后存儲(chǔ)的主目錄 |
| distributionPath | 相對(duì)于distributionBase的解壓后的Gradle壓縮包的路徑 |
| zipStoreBase | 同distributionBase,只不過是存放zip壓縮包的 |
| zipStorePath | 同distributionPath,只不過是存放zip壓縮包的 |
| distributionUrl | Gradle發(fā)行版壓縮包的下載地址 |
而distributionUrl就是我們gradle wrapper所依賴的Gradle版本。一般生成的都是這樣的https://services.gradle.org/distributions/gradle-3.3-bin.zip,通常都會(huì)把bin改成all,這樣在開發(fā)過程中,就可以看到Gradle的源代碼了。
自定義Wrapper Task
gradle-wrapper.properties是由Wrapper Task生成的,那么我們當(dāng)然也可以自己來配置該Wrapper Task來達(dá)到我們配置gradle-wrapper.properties的目的,在build.gradle構(gòu)建文件中錄入如下腳本:
//構(gòu)建wrapper
task wrapper(type: Wrapper){
gradleVersion = '3.3'
}
然后我們執(zhí)行gradle wrapper的時(shí)候,就會(huì)默認(rèn)生成3.3版本的wrapper了,而不用使用--gradle-version 3.3進(jìn)行了指定了。同樣的你也可以配置其它參數(shù),例如:
//構(gòu)建wrapper
task wrapper(type: Wrapper){
gradleVersion = '3.3'
archiveBase = 'GRADLE_USER_HOME'
archivePath = 'wrapper/dists'
distributionBase = 'GRADLE_USER_HOME'
distributionPath = 'wrapper/dists'
distributionUrl = 'http://services.gradle.org/distributions/gradle-3.3-all.zip'
}