Gradle相關(guān)點(diǎn)

1. Wrapper

資料1,資料2,資料3

看完直接說結(jié)論:

結(jié)論一:WrapperGralde間是解耦的

Wrapper可以理解為一個(gè)Gradle的代理:代理Gradle的安裝和調(diào)用。

沒有Wrapper你照樣可以在系統(tǒng)上安裝Gradle,但你需要自己去維護(hù)和管理Gradle升級(jí)等操作。當(dāng)然這不是重點(diǎn),重點(diǎn)是你需要維護(hù)整套Gradle的環(huán)境:比如配置環(huán)境變量等,裝上并不代表就能用了。還有麻煩的地方,當(dāng)你把Gradle加入到自己的項(xiàng)目工程中時(shí),你同樣要?jiǎng)谏褓M(fèi)力的配置一翻。

使用Wrapper后,你可以安心的托管了。比如以后升級(jí),你無需自己去下載,而是直接修改下配置文件,交給Wrapper去打理就好了。Wrapper會(huì)維護(hù)自己的一套機(jī)制,你之前在安裝的所有版本的Gradle,Wrapper都會(huì)完全無視,即使你要的版本已經(jīng)被你之前手動(dòng)安裝過了,一旦使用Wrapper后,還是會(huì)下載那個(gè)版本到它指定的目錄中。

之前說過,WrapperGralde的代理,執(zhí)行Gradletask時(shí):
對于每一個(gè)/gradle <task>指令,都可以使用/gradlew <task>指令去替代。

所以說了這么多,Wrapper到底是什么?
Wrapper其實(shí)就是一定文件的集合。包含:一個(gè)核心JAR,1個(gè)配置文件和2個(gè)腳本文件。

配置文件(gradle/wrapper/gradle-wrapper.properties):配置Gradle的下載、解壓的路徑,下載的地址等信息。

JAR(gradle/wrapper/gradle-wrapper.jar):Wrapper自身的代碼,Wrapper能做什么,發(fā)揮什么樣的作用完全來自這個(gè)JAR。

腳本文件(gradlew.batgradlew,分別對應(yīng)兩種操作系統(tǒng)):用于執(zhí)行Gradletask注意是調(diào)用Gradle的,不是Wrapper)。操作方式:/gradlew <task>。
如果:刪除Windows下某個(gè)項(xiàng)目中的gradlew.bat文件,然后執(zhí)行gradlew指令時(shí),會(huì)提示:gradlew 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。 恢復(fù)后就正常了。

什么是Gradle distributions?
這個(gè)詞在開頭的三篇文章中經(jīng)常出現(xiàn),它表示的很簡單:就是Gradle自己的版本/們(注意,還是與Wrapper無關(guān))。

如果使用Wrapper,Gralde distribution就會(huì)被下載到gradle/wrapper/gradle-wrapper.properties所配置的路徑下,下載完畢后會(huì)自動(dòng)解壓。

Gralde distributions下載地址

wrapper.properties里的distributionUrl的值就是具體distribution的下載地址。wrapper/dists目錄指的就是distribution的目錄。

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

distributionbinall兩種版本,all等于bin+src
all包含:

bin
docs
init.d
lib
media
samples
src

bin包含:

bin
init.d
lib
media

lib下面是組成Gralde的各種JAR。

bin下面就2個(gè)文件gradlegradle.bat兩個(gè)。是不是如Wrappergradlewgradlew.bat似曾相識(shí)?
沒錯(cuò),這兩個(gè)就是分別在兩種系統(tǒng)下執(zhí)行Gradle task的腳本文件~。

結(jié)論二:Gradle / WrapperAndroid Studio間是解耦的

經(jīng)過上面的講解,基本上可以推出這個(gè)結(jié)論了。
AS在創(chuàng)建Android工程時(shí)會(huì)自動(dòng)創(chuàng)建Wrapper,并且指定Android Plugin for Gradle插件進(jìn)行支持。
這樣的話,我們連 Wrapper配置到項(xiàng)目工程中的 這個(gè)動(dòng)作都可以省略了。很顯然AS這么做是為了給廣大開發(fā)者節(jié)省時(shí)間。
當(dāng)然,你也可以不這么做,正如官方文檔所言:

GradleAndroid Plugin for Gradle 插件獨(dú)立于 Android Studio 運(yùn)行。這意味著,您可以在 Android Studio 內(nèi)、使用計(jì)算機(jī)上的命令行工具或在未安裝 Android Studio 的計(jì)算機(jī)(例如持續(xù)性集成服務(wù)器)上構(gòu)建 Android 應(yīng)用。如果您不使用 Android Studio,可以學(xué)習(xí)如何從命令行構(gòu)建和運(yùn)行您的應(yīng)用(資料3)。無論您是從命令行、在遠(yuǎn)程計(jì)算機(jī)上還是使用 Android Studio 構(gòu)建項(xiàng)目,構(gòu)建的輸出都相同。

最后,還有一個(gè)很小的或者無關(guān)緊要的點(diǎn),在AS根目錄下會(huì)有一個(gè).gradle的文件夾,當(dāng)執(zhí)行任何gradlew,/gradlew <task>指令時(shí)就會(huì)生成該文件夾(如果沒有)。據(jù)說是Gradle(不是Wrapper)的編譯系統(tǒng),版本由Wrapper指定。

.gradle文件夾是否似曾相識(shí)? 沒錯(cuò),wrapper.properties里的GRADLE_USER_HOME也就是Gralde distributionspath路徑,默認(rèn)就是以.gradle文件夾結(jié)尾的(見資料2)。
但這跟上面所說的工程根目錄下的.gradle文件夾沒有一毛錢關(guān)系。

2. 什么是DSL

DSL(Domain Specified Language)領(lǐng)域?qū)S谜Z言:DSL說明。

3. Groovy

Groovy是一種基于JVM(Java虛擬機(jī))的敏捷開發(fā)語言,它結(jié)合了Python、Ruby和Smalltalk的許多強(qiáng)大的特性,Groovy 代碼能夠與 Java 代碼很好地結(jié)合,也能用于擴(kuò)展現(xiàn)有代碼。由于其運(yùn)行在 JVM 上的特性,Groovy 可以使用其他 Java 語言編寫的庫。

Groovy 是用于Java虛擬機(jī)的一種敏捷的動(dòng)態(tài)語言,它是一種成熟的面向?qū)ο?/strong>編程語言,既可以用于面向?qū)ο缶幊蹋?strong>又可以用作純粹的腳本語言。使用該種語言不必編寫過多的代碼,同時(shí)又具有閉包和動(dòng)態(tài)語言中的其他特性。

Groovy是JVM的一個(gè)替代語言(替代是指可以用 Groovy 在Java平臺(tái)上進(jìn)行 Java 編程),使用方式基本與使用 Java代碼的方式相同,該語言特別適合與Spring的動(dòng)態(tài)語言支持一起使用,設(shè)計(jì)時(shí)充分考慮了Java集成,這使 Groovy 與 Java 代碼的互操作很容易。(注意:不是指Groovy替代Java,而是指Groovy和Java很好的結(jié)合編程。

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,174評(píng)論 25 708
  • 前言 為什么需要學(xué)Gradle? Gradle 是 Android 現(xiàn)在主流的編譯工具,雖然在Gradle 出現(xiàn)之...
    真笨笨魚閱讀 1,594評(píng)論 0 0
  • Gradle對于很多開發(fā)者來說有一種既熟悉又陌生的感覺,他是離我們那么近,以至于我每天做項(xiàng)目都需要他,但是他又是離...
    阿_希爸閱讀 9,716評(píng)論 10 199
  • Google引入Gradle和Android Studio時(shí),希望更容易的去重用代碼、創(chuàng)建構(gòu)造變體和配置、自定義構(gòu)...
    sollian閱讀 3,464評(píng)論 0 10
  • 最近寫不出什么東西,只是偶爾和朋友聊天想寫點(diǎn)什么。 L同學(xué)是我的多年好朋友,最近聽說他分手了,我這個(gè)在其他地方的朋...
    呼吸的鯨魚閱讀 117評(píng)論 0 0

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