如何通俗地理解Gradle?
我以前用Eclipse配合ADT開發Android項目,對它的基本原理沒有很深的掌握,所以沒有想太多就直接開始開發了。現在手頭有壹個新項目要用Android Studio。我早就聽說過AS,但因為我有點無知,所以這些天在學習AS的過程中無法理解Gradle。我找了很多資料但是都是專業描述的,所以想問問大家有沒有更形象易懂的解釋來描述Gradle,它是什麽,是用來做什麽的。相對於Eclipse中用ADT編譯Android程序的機制,他有。
ghui?
謝謝妳的邀請。
Gradle是壹個基於Apache Ant和Apache Maven概念的自動項目構建工具。它使用基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。目前其支持的語言僅限於Java、Groovy和Scala,未來計劃支持更多語言。
以上是Gradle在維基百科上的解釋。我相信壹個沒有接觸過施工的人是無法理解的。我也是,以下是我對格拉德的通俗理解:
軟件開發註重代碼重用,可以讓項目更容易維護,代碼更少...開發者可以通過繼承、組合、功能模塊等方式實現不同程度的代碼重用。但是不知道大家有沒有想過,軟件開發也是壹個工程化的操作,不僅僅是寫代碼,還涉及到項目的各種管理(依賴、打包、部署、發布、各種渠道的差異化管理...).
例如
我是壹名安卓開發者。妳知道中國有n個安卓市場,n個手機品牌,n個手機尺寸嗎...壹般公司會針對不同的市場單獨發包合同來統計不同渠道的下載量,可能需要針對不同的手機做壹些特殊處理(品牌、尺寸等硬件信息)。這個時候,妳可以針對不同的情況建立壹個單獨的項目,或者更好的是,妳可以通過壹些變量來控制它,就像這樣。
if(is moto){做某事} else if(is Huawei){做某事}...
差異管理
但是這兩種解決方案都有各自的缺點,尤其是前者有很大的代碼重復。後者略勝壹籌,但這種方式的區別是運行時,而不是靜態的,moto手機上的處理邏輯對華為手機完全沒有影響,但這種針對moto手機的處理邏輯也已經安裝在華為手機上。通過Gradle的productFlavor和buildtype,可以實現靜態級別的差異控制。可以參考如何通過gradle實現壹套代碼來開發不同特色的APK Byghui。
說到上面提到的多通道問題,不同的通道壹般對應不同的通道號。當然妳可以壹次修改壹個套餐生成妳的多渠道套餐,但是據說國內某團購網站的安卓App有100多個渠道。這裏發生了什麽事?反反復復的包裝,和之前的這些包裝差別很小(只是渠道號不同)。就像寫代碼壹樣,我們應該重用它們。壹個命令可以打印所有的通道包,壹個命令可以打印指定的通道包。更復雜的是,您可能需要不同的通道來對應不同的簽名文件、不同的圖標和不同的服務器地址...這可以通過Gradle方便地實現。
依賴性管理:
您可能需要依賴各種jar和庫來進行軟件開發。當然妳可以在本地下載jar,library項目然後復制到妳的項目裏,但是不知道妳有沒有聽說過國外有個叫中央倉庫的東西。在這個倉庫裏,妳可以找到所有的罐子,AAR...妳能想到的,沒聽說過的中央儲存庫搜索引擎?在這裏您可以找到您需要的所有依賴項,您所需要的就是指定壹個坐標,如下所示:
& ltimg src = "/8883 D4 b 758 b 288 a 74 eb4c 104 db 854 c5f _ b . jpg " data-raw width = " 330 " data-raw height = " 24 " class = " content _ image " width = " 330 " >中。您不需要關心查找、下載和添加其余的依賴關系到類路徑。以這種方式維護依賴關系的好處如下:
您不需要關心查找、下載和添加其余的依賴關系到類路徑。以這種方式維護依賴關系的好處如下:
依賴項不會進入您的版本控制庫(它們將緩存在~/下)。gradle/默認)。
卸載加載依賴很方便(只是壹個坐標依賴,不需要刪除)。
方便的版本管理。如上圖所示,2.3.3是畢加索的版本號。如果改成+,表示從中心倉庫下載最新版本。
不同項目的同壹個依賴項不會有重復的副本(在~/下只存在壹個副本)。gradle)。
項目部署
這個我不太了解,但據我所知,通過壹些插件,可以自動上傳妳的輸出(。罐子,。apk,。戰爭...)到指定倉庫,自動調配。...
李羅說了這麽多,不知道妳懂不懂。
總而言之:
Gradle是壹個構建工具,它可以幫助妳管理差異、依賴、編譯、打包、部署.................................................................................................................................................
Gradle不是編程語言,它不能幫妳實現軟件中的任何實用功能。
通俗的解釋肯定不嚴謹,不合適的歡迎討論。
###
同意白白的觀點,把之前分享的幻燈片放出來。
###
截至目前(1432311622353)* *已收到342條贊同和感謝。再次感謝大家的支持!如果妳覺得我的分享對妳有幫助,請關註我!以後會和大家分享更多更好的內容。
同意的幻燈片在這裏。
(是我在樂視的時候內部分享的壹張幻燈片,內容已刪除(涉及公司具體項目的部分)。這張幻燈片參考了許多其他材料,內部鏈接值得打開。)
編輯於2017-02-27?53條評論?謝了?
不成功
妳說要通俗的理解,不需要學什麽理論。按照通俗的理解就好了。
通俗地說:gradle是用來包裝的。
妳認為妳的問題已經解決了嗎?如果沒有解決,那是因為妳的問題問得不好。比如,我猜妳應該問:為什麽要打包發布,打包發布有多少種常用方法,為什麽在這些常用方法中選擇gradle等等。
鑒於我的猜測,流行的說法是這樣的:
以用eclipse寫java程序為例。
為什麽需要打包:
剛開始寫完的時候,右鍵點擊run即可。但畢竟程序是要發布在服務器上或者被別人使用的。壹是不能讓每個想運行的人都安裝eclipse,二是不能把源代碼公布給所有人。因此,您需要以二進制形式發布您的代碼,以便於其他環境運行。這就是包裝。
為什麽是螞蟻?
打包時有很多事情要做,比如配置文件中的用戶名和密碼。妳的本地開發和程序的實際運行肯定是不壹致的,所以妳需要有兩個文件,壹個用於開發,壹個用於實際運行。這樣每次打包都要反復做這些事情。ant可以讓妳把這些東西寫成xml形式的腳本,然後自動運行。
為什麽是maven?
您的項目需要很多jar包。例如,您應該為日誌使用log4j,為數據庫使用連接器。這幾天不用spring寫程序都不好意思出門。打開下載的spring包,幾十個罐子,不知道用哪個好,不用哪個好。而且,即使妳把這些jar包都放進去,也很有可能因為要依賴其他jar包而無法運行。如果有壹天妳要升級壹個小版本的spring,所有的jar包都要重復,妳也記不清哪些jar包是從spring導入的。
所以有了maven,妳要做的就是配置,說我要用spring 3,所有的jar包都給妳下載了,妳直接運行就行了。如果妳想升級版本,只需將3改為4,並為妳下載新的jar包。
然後呢。
用maven,jar打包方便,但是我打包的時候還有很多事情要做,然後妳會發現maven真的不知道怎麽做這些事情,於是妳開始懷念ant。
Gradle既能做maven的工作,又能做ant的工作,用groove語言寫腳本,表達能力更強。
我就是這個意思。
===
我只見過格雷爾兩天,不太了解。簡化版如下:
Ant可以自動打包邏輯。
Maven也可以自動打包。與ant相比,它在幫助您下載jar包方面做得更多。
但是maven的打包邏輯太死板,定制太麻煩,不如ant好用。Gradle是壹個可以自動下載jar包,自己寫腳本的東西,而且腳本比ant容易寫。