Android Studio中的Gradle是幹什麼的

來源:互聯網
上載者:User

標籤:簽名   相同   line   androi   target   style   arch   err   多個   

ghui
連結:https://www.zhihu.com/question/30432152/answer/48239946
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

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

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

軟體開發講究代碼複用,通過複用可以使工程更易維護,代碼量更少..... 開發人員可以通過繼承,組合,函數模組等實現不同程度上的代碼複用.但不知你有沒有想過,軟體開發也是一種工程作業,絕不僅僅是寫代碼,還涉及到工程的各種管理(依賴,打包,部署,發布,各種渠道的差異管理.....),你每天都在build,clean,簽名,打包,發布,有沒有想過這種過程,也可以像代碼一樣被描述出來, 也可以被複用.

舉個例子

我是做Android開發的,你可知道國內有n個Android市場,n個手機品牌,n個手機尺寸......,一般公司都會針對不同的市場單獨發包用來統計不同渠道的下載量等情況,可能需要針對不同(品牌,尺寸等各種硬體資訊)的手機做一些特殊的處理,這個時候你可以針對不同的情況單獨建一個工程,或者更好一點你可以通過一些變數來控制,像這樣:

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

差異管理

但這兩種解決方案都有自己的缺點,特別是前一種有極大的代碼重複.後一種稍微好一點,但這種方式的差異是運行時的,不是靜態,對於moto手機上的處理邏輯對華為手機來說一點作用也沒有,但這一段針對moto手機的處理邏輯也被裝到了華為手機上了,通過gradle的productFlavor與buildtype可以實現靜態級的差異控制可以參考如何通過Gradle實現一套代碼開發不同特性的APK · ByGhui

說到前面的多渠道問題,不同的渠道一般會對應不同的渠道號,你當然可以通過修改一次打一個包這種純手工的方式來產生你的多渠道包,但據聽說國內某團購網站的Android App有100多個渠道.這裡出現了什麼?重複,反覆的去打包而且這些包之前的差異很小(只是渠道號不同),和寫代碼一樣我們應該複用,通過Gradle可以實現一個命令打出所有的渠道包,一個命令打出指定的渠道包.再複雜一點,你可能需要不同的渠道對應不同的簽名檔案,不同的icon,不同的伺服器位址...這些都可以通過Gradle來方便的實現.

依賴管理:

做軟體開發你可能需要依賴各種不同的jar,library.你當然可以通過將.jar/library工程下載到本地再copy到你的工程中,但不知你是否聽說過國外有個叫中央倉庫的東西,在這個倉庫裡你可以找到所有你能想到以及你從來沒聽說過的jar,aar...The Central Repository Search Engine 這裡可以找到所有你需要的依賴,而你需要的只是指定一個座標,如下:

<img src="https://pic4.zhimg.com/8883d4b758b288a74eb4c104db854c5f_b.jpg" 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不是一種程式設計語言,它不能幫你實現軟體中的任何實際功能

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

Android Studio中的Gradle是幹什麼的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.