Gradle 簡(jiǎn)介

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