Android Studio中的Gradle是幹什麼的

做者:ghui
連接:https://www.zhihu.com/question/30432152/answer/48239946
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

Gradle是一個基於 Apache AntApache Maven概念的項目 自動化建構工具。它使用一種基於 Groovy特定領域語言來聲明項目設置,而不是傳統的 XML。當前其支持的語言限於 JavaGroovyScala,計劃將來將支持更多的語言。

上面是維基上對Gradle的解釋,相信一個沒有接觸過構建的人是不大能看明白的,當初我也是.下面是我對Gradle通俗的理解:php

軟件開發講究代碼複用,經過複用可使工程更易維護,代碼量更少..... 開發者能夠經過繼承,組合,函數模塊等實現不一樣程度上的代碼複用.但不知你有沒有想過,軟件開發也是一種工程做業,毫不僅僅是寫代碼,還涉及到工程的各類管理(依賴,打包,部署,發佈,各類渠道的差別管理.....),你天天都在build,clean,簽名,打包,發佈,有沒有想過這種過程,也能夠像代碼同樣被描述出來, 也能夠被複用.編程

舉個例子緩存

我是作Android開發的,你可知道國內有n個Android市場,n個手機品牌,n個手機尺寸......,通常公司都會針對不一樣的市場單獨發包用來統計不一樣渠道的下載量等狀況,可能須要針對不一樣(品牌,尺寸等各類硬件信息)的手機作一些特殊的處理,這個時候你能夠針對不一樣的狀況單獨建一個工程,或者更好一點你能夠經過一些變量來控制,像這樣:服務器

if(isMoto){do something} else if(isHuawei){do something} ... maven

差別管理編程語言

但這兩種解決方法都有本身的缺點,特別是前一種有極大的代碼重複.後一種稍微好一點,但這種方式的差別是運行時的,不是靜態的,對於moto手機上的處理邏輯對華爲手機來講一點做用也沒有,但這一段針對moto手機的處理邏輯也被裝到了華爲手機上了,經過gradle的productFlavor與buildtype能夠實現靜態級的差別控制能夠參考如何經過Gradle實現一套代碼開發不一樣特性的APK · ByGhui函數

說到前面的多渠道問題,不一樣的渠道通常會對應不一樣的渠道號,你固然能夠經過修改一次打一個包這種純手工的方式來生成你的多渠道包,但據據說國內某團購網站的Android App有100多個渠道.這裏出現了什麼?重複,反覆的去打包並且這些包以前的差別很小(只是渠道號不一樣),和寫代碼同樣咱們應該複用,經過Gradle能夠實現一個命令打出全部的渠道包,一個命令打出指定的渠道包.再複雜一點,你可能須要不一樣的渠道對應不一樣的簽名文件,不一樣的icon,不一樣的服務器地址...這些均可以經過Gradle來方便的實現.工具

依賴管理:post

作軟件開發你可能須要依賴各類不一樣的jar,library.你固然能夠經過將.jar/library工程下載到本地再copy到你的工程中,但不知你是否據說過國外有個叫中央倉庫的東西,在這個倉庫裏你能夠找到全部你能想到以及你歷來沒據說過的jar,aar...The Central Repository Search Engine 這裏能夠找到全部你須要的依賴,而你須要的只是指定一個座標,以下:gradle

<img src="" data-rawwidth="330" data-rawheight="24" class="content_image" width="330">剩下的依賴的尋找,下載,添加到classpath等你都不須要去關心,經過這種方式來維護依賴的好處有如下幾點:

剩下的依賴的尋找,下載,添加到classpath等你都不須要去關心,經過這種方式來維護依賴的好處有如下幾點:

  1. 依賴不會進入到你的版本控制倉庫中(默認會緩存到~/.gradle/下)
  2. 方便卸載裝載依賴(只是一條座標依賴,不須要刪除便可)
  3. 方便的版本管理,如上圖中的2.3.3既是picasso的版本號,若改成+就表示從中央倉庫中下載最新的版本
  4. 不一樣工程的相同依賴不會存在重複副本(只在~/.gradle下存在一份)

項目部署

這方面我沒怎麼接觸過,但據我所知經過一些插件,能夠實現自動將你的輸出(.jar,.apk,.war...)上傳到指定倉庫,自動部署...

羅哩羅嗦說了這麼多,不知你們有沒有理解

總結一下:

  1. Gradle是一種構建工具,它能夠幫你管理項目中的差別,依賴,編譯,打包,部署......,你能夠定義知足本身須要的構建邏輯,寫入到build.gradle中供往後複用.
  2. Gradle不是一種編程語言,它不能幫你實現軟件中的任何實際功能

通俗的解釋確定是不嚴謹的解釋,不妥之處歡迎討論.

相關文章
相關標籤/搜索