Gradle 簡介

大家好,今天我們開始一個新專題 — Gradle。關于 Gradle 我們開發中用的非常多,它的知識點完全可以寫一本書,這個專題我們重點針對 Gradle 在 Android 日常開發中的應用進行講解。本文我們主要先介紹一下 Gradle 是什么?有哪些特性?優點在哪?為什么我們構建要用 Gradle?
作者簡介:
Android 高級開發工程師,多年一線互聯網企業開發經驗。擅長 Android、Flutter。熟悉 Android Framework層源碼,對 Android 性能調優,UI 繪制,RxJava , OKHTTP 等三方主流框架源碼有較深研究。
1. 什么是 Gradle?

什么是 Gradle 呢?在 Gradle 官網中是這么介紹的:
Gradle is an open-source build automation tool focused on flexibility and performance. Gradle build scripts are written using a Groovy or Kotlin DSL. —官網
翻譯成中文就是,Gradle 是專注于靈活性和性能的開源構建自動化工具。Gradle 構建腳本是使用 Groovy 或 Kotlin DSL 編寫的。
我們看到了這里有個 DSL,下面我們看下什么是 DSL:
DSL
的全稱是 Domain Specific Language,即領域特定語言,或者我們可以翻譯成“特定領域的語言”。
它的特性就是 “ A specialized computer language designed for a specific task.”
翻譯為:為解決某一類任務而專門設計的語言。 再通俗點來說,其實就是這個語言不通用,只能用于特定的某個領域,俗稱“小語言”。因此 DSL 也是語言。
通過上面的介紹,說白了,Gradle 就是一個自動化的項目構建工具,用來幫助我們自動構建項目。
2. 為什么要使用 Gradle?
那么我們為什么要使用 Gradle 呢?
2.1 自動化構建
我們在寫 Java 的時候,如果沒有構建工具,我們需要在控制臺,通過javac
先將 Java 文件編譯為 class 文件,然后再用jar
命令將 class 文件打包為 jar 包。有了自動化構建工具只需要一個命令或是點一個按鈕就可以打出 jar包。試想下如果 Android 我們不用 Gradle 命令或是按運行按鈕打包。那么我們得執行多少命令才能最終打出一個 apk 包。所以自動化構建幫我們做了很多事。
2.2 Gradle 的集各家之所長
前面說到 Gradle 是一個自動化構建工具,那么我們下面對比一同類構建工具和 Gradle 相比的優缺點。
1. Apache Ant
Ant 全稱是Another Neat Tool
,它是由 James Duncan Davidson 開發的,最初是用來構建 Tomcat 的。發布于 2000 年,它的核心代碼是由 Java 編寫的因此具有平臺無關性。構建腳本是 XML(build.xml)。在早期用 Eclipse 開發的 Android 的時候,構建工具就是 Ant。它的構建腳本有三個節點 project、target、task。
但是它有以下缺點:
- 無法實時獲取運行信息;
- 在項目規范上規范性不足,靈活性太高,對 build.xml 沒有約定規范;
- XML 作為構建腳本,如果項目構建較為復雜,build.xml 就會很長,難以維護。
2. Apache Maven
為了解決開發人員在使用 Ant 時面臨的問題,Apache 在 2004 年發布了 Maven。Maven 除了項目構建功能外,還提供了高級項目管理工具。最初在 Jakata Turbine 項目中用來簡化構建過程。Maven 和 Ant 針對項目構建的兩個不同方面解決問題,Ant 是為 Java 項目提供平臺構建任務,而 Maven 本身描述項目的高級方面。
Maven 同樣有以下缺點:
- XML 還是會很長: 它還是以 XML 作為構建腳本,如果項目復雜,XML 還是會很長,但是較 Ant 比較好維護;
- 缺乏靈活性: 規范性太強,缺乏靈活性,會寫很多冗余配置;
- 鏈接倉庫不方便: 鏈接國外 Maven 倉庫不方便,要切換至國內阿里云的 Maven 倉庫。
總而言之,我們來總結一下:
Gradle 它是一個構建工具,采用 Groovy 或是 Kotlin 語言編寫,汲取了 Ant 和 Maven 的優點,但是相比較于 Ant 和 Maven,Gradle 更加強大,高度可定制,構建更加快速。
目前我們開發中,Java 項目一般都用 IntelliJ IDEA,它自帶的構建工具是 Maven,也可以使用 Ant。Android 項目默認構建工具一般都是使用 Gradle 的,也是 Google 推薦的 Android 構建工具。我覺得后期 Java 也有可能會使用 Gradle 構建工具。因為 Gradle 它集各家之所長,既吸收了 Maven 的規范化和倉庫概念,又吸收了 Ant 的 task 思想。
3. Grade 的版本說明
Gradle 從發布到現在已經有好多個版本了,現在最新的版本是 v6.1.1。下面主要介紹一下主版本和新版本的特性。
- V2.2.1 - 4.10.1 : 基本已經很少使用了;
- V4.10.1: AndroidStudio 3.3.0 支持的最低 Gradle 版本;
- V5.0 : Gradle 的一個比較里程碑的版本,這個版本支持了 Kotlin DSL;
- V6.0.1: 目前使用較多的版本,也是我們這個課程使用的版本;
- V6.1.1: 目前最新的版本,2020 年 1 月 15 日發布的。主要是改進了依賴關系管理中的功能集。
4. Gradle 的優點
在 Gradle 官網首頁,是這么介紹的:
Accelerate developer productivity
翻譯過來就是:加快開發人員生產力
From mobile apps to microservices, from small startups to big enterprises, Gradle helps teams build, automate and deliver better software, faster.
翻譯過來就是:從移動應用程序到微服務,從小型初創公司到大型企業,Gradle 可以幫助團隊更快地構建,自動化和交付更好的軟件。
Gradle 它汲取了 Ant 和 Maven 的優點,吸收了 Ant 的 task 思想,和 Maven 的規范化和倉庫概念。采用 Groovy 或是 Kotlin 語言編寫,但是它的代碼量更少,可讀性更強。
Gradle 具有以下 3 大特性:
- 高度可定制: 它的高度可定制化體現在,它以最基本的方式可定制和可擴展的方式建模;
- 快速 : Gradle 通過重新使用以前執行的輸出,僅處理已更改的輸入以及并行執行任務來快速完成任務。通俗點就是說,第二次構建,只構建我們修改代碼相關的類,不會耗費時間來構建整個項目;
- 強大 : Gradle 是 Android 的官方構建工具,并支持許多流行的語言和技術。
5. 學習基礎
- 學習這門課程之前,首先要會至少一種編程語言;
- 有一定的 Android 開發經驗,可以使用 AndroidStudio 獨立開發 Android 項目。
有上面的兩點知識基礎,學起這門課來相信大家會比較輕松。