我之前一直都把Gradle理解為一個android studio工程的依賴管理和打包工具粥谬。 這么理解其實也沒什么問題。但是這么理解不夠全面和系統(tǒng)辫塌,會給我之后系統(tǒng)的使用gradle造成一定的限制漏策。所以是時候來全面的認識一下gradle了。 啊啊啊 臼氨!
那應該怎么理解gradle呢掺喻?
gradle 是目前非常流行的一個項目構建工具。 它并不局限于一種平臺储矩。 那什么是項目構建工具呢感耙,我們又為什么要用項目構建工具呢?
答:隨著軟件工程的項目的日益復雜持隧,對于軟件項目的編譯即硼,打包就成為了一大痛點。 以android項目為例屡拨,如果要手動配置那么多依賴的第三方庫和jar包只酥,自己需要一個一個去網上找資源褥实,然后下載,配置层皱。如果依賴包的版本變更的話性锭,又要重新找資源,下載叫胖,配置草冈。 想想都頭大。 還有需要把java源碼瓮增,res等資源編譯打包成apk.也是一個巨大的工作量怎棱。 這個時候就需要一個工具幫我們完成這些工作了。在軟件項目中完成以上類似工作的工具绷跑,稱之為項目構建工具拳恋。當然gralde的功能遠遠不止這些,這需要我們不停的探索砸捏。
在Gradle之前谬运,android的項目構建工具是ant, 用過eclipse的同學應該都用過。 我們知道ant是不支持自動去下載配置依賴jar的垦藏,這個坑就不提了梆暖。 還有ant的編譯規(guī)則是基于xml的,用xml你是很難描述類似if(如果條件成立掂骏,編譯某文件)else{如果條件不成立轰驳,編譯某文件}這樣不同條件的任務的。 這點弟灼,用ant做過android多渠道打包的同學级解,應該深有體會。
那Gradle呢田绑, 首先Gradle是支持自動下載的依賴包的勤哗,
然后呢,Gradle腳本不是像傳統(tǒng)的xml文件那樣辛馆,而是一種基于Groovy的動態(tài)DSL俺陋,而Groovy語言是一種基于jvm的動態(tài)語言。 基于這種設計呢昙篙, gradle是支持我們像寫腳本一樣的去寫項目的構建規(guī)則。 想想就很激動啊 诱咏。
前面我說過 Gradle是一個構建工具苔可,但不局限于一種開發(fā)平臺。它類似于一個開發(fā)框架袋狞,也有自己的語言”Groovy語言“焚辅,有一些自己的基礎功能映屋。然后根據各平臺基于它的框架去開發(fā)定制自己編譯和打包規(guī)則。 像我們自動下載依賴包的這個功能就是Gradle自己帶的同蜻,而Gradle之所以能夠編譯和打包android項目棚点,是因為Google團隊在Gradle的基礎上擴展了一個Android的gradle插件。 當然還有很多流行的Gradle插件湾蔓,類似于java 插件等等瘫析。這點需要重點理解。 Gradle是Gradle ,android gradle插件是android gradl插件,不能混為一談默责。這個我們在下一章的"Gradle 系列第二講-android studio中的四個Gradle文件功能講解“”中具體說明贬循。
小結一下:
這章其實重點要理解這兩點:
- Gradle 是一個構建工具,也是一個開發(fā)框架桃序,基于Groovy語言杖虾。 我們可以通過Groovy語言去寫自己的Gradle插件,也可以去編寫指定的腳本去改變構建規(guī)則媒熊。
- android studio中gradle之所以能夠構建android工程奇适,是因為有基于android的gradle插件。