Gradle之Wrapper詳解

介紹

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的版本作為生成的Wrappergradle version。例如,你當(dāng)前安裝的Gradle3.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'
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 說明 本文主要介紹和Gradle關(guān)系密切、相對(duì)不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,157評(píng)論 1 62
  • http://www.itdecent.cn/p/7c288a17cda8 總的來說,Android的系統(tǒng)體系結(jié)...
    燕京博士閱讀 1,415評(píng)論 0 6
  • 是什么? 在語法上是基于Groovy語言的(Groovy 是一種基于JVM的敏捷開發(fā)語言,可以簡單的理解為強(qiáng)類型語...
    千山萬水迷了鹿閱讀 99,980評(píng)論 4 122
  • Gradle對(duì)于很多開發(fā)者來說有一種既熟悉又陌生的感覺,他是離我們那么近,以至于我每天做項(xiàng)目都需要他,但是他又是離...
    阿_希爸閱讀 9,702評(píng)論 10 199
  • 《念念許朝暮》文/郭乙朗 【文案】 十年相守,八年別離。 再見面時(shí),她捧出一顆柔石般拳拳的心,她想將一生的念想都留...
    郭乙朗閱讀 942評(píng)論 1 1

友情鏈接更多精彩內(nèi)容