Gradle 簡介

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

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