1 基本概念java
gradle是一個基於Apache ant 和apache maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的xml。當前其支持的語言限於java、groovy和scala。android
我對gradle的解釋:軟件開發講究代碼複用,經過複用可使工程更易維護,代碼量更少….. 開發者能夠經過繼承,組合,函數模塊等實現不一樣程度上的代碼複用.但不知你有沒有想過,軟件開發也是一種工程做業,毫不僅僅是寫代碼,還涉及到工程的各類管理(依賴,打包,部署,發佈,各類渠道的差別管理...),你天天都在build、clean,簽名,打包,發佈,有沒有想過這種過程,也能夠像代碼同樣被描述出來,也能夠被複用。ios
舉個例子我是作Android開發的,你可知道國內有n個Android市場,n個手機品牌,n個手機尺寸……,通常公司都會針對不一樣的市場單獨發包用來統計不一樣渠道的下載量等狀況,可能須要針對不一樣(品牌,尺寸等各類硬件信息)的手機作一些特殊的處理,這個時候你能夠針對不一樣的狀況單獨建一個工程,或者更好一點你能夠經過一些變量來控制,像這樣:if(isMoto){do something}
else if(isHuawei){do something}
…apache
差別管理這兩種解決方法都有本身的缺點,特別是前一種有極大的代碼重複,後一種稍微好一點,但這種方式的差別是運行時的,不是靜態的。對於moto手機上的處理邏輯對華爲手機來講一點做用也沒有,但這一段針對moto手機的處理邏輯也被裝到了華爲手機上了,經過gradle的product Flavor與build type能夠實現靜態級的差別控制能夠參考如何經過gradle實現一套代碼開發不一樣特性的APK。緩存
依賴管理:作軟件開發你可能須要依賴不一樣的jar library,你固然能夠經過將.jar/library工程下載到本地再copy到你工程中,但不知道你是否據說過國外有個中央倉庫的東西,在這個倉庫中你能夠找到全部你須要的以及你歷來沒據說過的jar aar...The Central Repository search engine 這裏能夠找到你須要的依賴,而你須要的只指定一個座標,以下:剩下的依賴的尋找,下載,添加到classpath等你都不須要去關心,經過這種方式來維護依賴的好處有如下幾點:剩下的依賴的尋找,下載,添加到classpath等你都不須要去關心,經過這種方式來維護依賴的好處有如下幾點:依賴不會進入到你的版本控制倉庫中(默認會緩存到~/.gradle/下)方便卸載裝載依賴(只是一條座標依賴,不須要刪除便可)方便的版本管理app
。maven
總結:gradle是一種構建工具,它能夠幫你管理項目中的差別、依賴、編譯、打包盒部署。函數
gradle經過編寫一個名爲build.gradle的腳本文件對項目進行設置,再根據這個腳本進行構建,Gradle腳本本質上就是Groovy腳本,工具
gradle裏有兩個基本概念:項目和任務。項目有多個任何組成,一個項目能夠理解爲提供給不一樣設備的構建版本,如桌面版、網頁版 安卓版和ios版等。能夠理解爲一種行爲,例如部署應用到生產環境。任務至關於ant中的target。能夠理解爲一種構建中原子性的工做,例如 編譯、打包、執行等。須要注意的是,ant中他本身的命令例如javac copy等也叫作task,但Ant的task遠沒有Gradle的task那麼自由。gradle
gradle的構建分兩個階段,第一階段是設置階段,分析構建腳本,處理依賴關係和執行順序等,腳本自己也須要依賴來完成自身的分析,第二階段是執行階段,此階段正真構建項目並執行項目下的各個任務。Ant與Maven對於Gradle,前者編寫容易,但功能有限,須要人工操做的過程也多;後者依託於龐大的依賴倉庫,所以有着強大的外部依賴管理,但添加本地依賴並不方便,且項目不能靈活修改。而Gradle能很好地結合Ant與Maven各自的優勢,能夠隨意的編寫任務並組合成項目,直接利用Maven倉庫,而且能很好的支持傳遞依賴和內部依賴。(本部分爲我的主觀意見,可能與大多數人的意見並不相同)(其實也都是別人的我的主觀意見,來源於我當初搜索的Gradle相關文章內容)通俗一點類比成吃飯的話,大體就是:Ant是本身買菜洗菜燒水作飯,Maven是去飯店點餐,Gradle是3D打印食物。
2 關於項目導入androidstudio時注意事項
當須要把別的項目導入Android studio中的時候,須要注意三處地方的修改
1 整個project中的build.gradle中的 buildscript的倉庫路勁 ,也就是dependencies中的classpath路勁
2 整個項目中的gradle的wrapper/gradle-warpper.properties中的distributionUrl值
3 module中的build.gradle中的compileSdkVersion和buildToolsVersion值,以及dependencies中的compile中的值