我之前一直都把Gradle理解為一個(gè)android studio工程的依賴管理和打包工具。 這么理解其實(shí)也沒什么問題。但是這么理解不夠全面和系統(tǒng),會(huì)給我之后系統(tǒng)的使用gradle造成一定的限制。所以是時(shí)候來全面的認(rèn)識(shí)一下gradle了。 啊啊啊 !
那應(yīng)該怎么理解gradle呢?
gradle 是目前非常流行的一個(gè)項(xiàng)目構(gòu)建工具。 它并不局限于一種平臺(tái)。 那什么是項(xiàng)目構(gòu)建工具呢,我們又為什么要用項(xiàng)目構(gòu)建工具呢?
答:隨著軟件工程的項(xiàng)目的日益復(fù)雜,對(duì)于軟件項(xiàng)目的編譯,打包就成為了一大痛點(diǎn)。 以android項(xiàng)目為例,如果要手動(dòng)配置那么多依賴的第三方庫和jar包,自己需要一個(gè)一個(gè)去網(wǎng)上找資源,然后下載,配置。如果依賴包的版本變更的話,又要重新找資源,下載,配置。 想想都頭大。 還有需要把java源碼,res等資源編譯打包成apk.也是一個(gè)巨大的工作量。 這個(gè)時(shí)候就需要一個(gè)工具幫我們完成這些工作了。在軟件項(xiàng)目中完成以上類似工作的工具,稱之為項(xiàng)目構(gòu)建工具。當(dāng)然gralde的功能遠(yuǎn)遠(yuǎn)不止這些,這需要我們不停的探索。
在Gradle之前,android的項(xiàng)目構(gòu)建工具是ant, 用過eclipse的同學(xué)應(yīng)該都用過。 我們知道ant是不支持自動(dòng)去下載配置依賴jar的,這個(gè)坑就不提了。 還有ant的編譯規(guī)則是基于xml的,用xml你是很難描述類似if(如果條件成立,編譯某文件)else{如果條件不成立,編譯某文件}這樣不同條件的任務(wù)的。 這點(diǎn),用ant做過android多渠道打包的同學(xué),應(yīng)該深有體會(huì)。
那Gradle呢, 首先Gradle是支持自動(dòng)下載的依賴包的,
然后呢,Gradle腳本不是像傳統(tǒng)的xml文件那樣,而是一種基于Groovy的動(dòng)態(tài)DSL,而Groovy語言是一種基于jvm的動(dòng)態(tài)語言。 基于這種設(shè)計(jì)呢, gradle是支持我們像寫腳本一樣的去寫項(xiàng)目的構(gòu)建規(guī)則。 想想就很激動(dòng)啊 。
前面我說過 Gradle是一個(gè)構(gòu)建工具,但不局限于一種開發(fā)平臺(tái)。它類似于一個(gè)開發(fā)框架,也有自己的語言”Groovy語言“,有一些自己的基礎(chǔ)功能。然后根據(jù)各平臺(tái)基于它的框架去開發(fā)定制自己編譯和打包規(guī)則。 像我們自動(dòng)下載依賴包的這個(gè)功能就是Gradle自己帶的,而Gradle之所以能夠編譯和打包android項(xiàng)目,是因?yàn)镚oogle團(tuán)隊(duì)在Gradle的基礎(chǔ)上擴(kuò)展了一個(gè)Android的gradle插件。 當(dāng)然還有很多流行的Gradle插件,類似于java 插件等等。這點(diǎn)需要重點(diǎn)理解。 Gradle是Gradle ,android gradle插件是android gradl插件,不能混為一談。這個(gè)我們?cè)谙乱徽碌?Gradle 系列第二講-android studio中的四個(gè)Gradle文件功能講解“”中具體說明。
小結(jié)一下:
這章其實(shí)重點(diǎn)要理解這兩點(diǎn):
- Gradle 是一個(gè)構(gòu)建工具,也是一個(gè)開發(fā)框架,基于Groovy語言。 我們可以通過Groovy語言去寫自己的Gradle插件,也可以去編寫指定的腳本去改變構(gòu)建規(guī)則。
- android studio中g(shù)radle之所以能夠構(gòu)建android工程,是因?yàn)橛谢赼ndroid的gradle插件。