如何從零開發一個 gradle 插件(一)

相信開發過 Android 應用的人都明白 gradle 的重要性,做爲 Android 官方默認的構建工具,Android 開發者在平常開發中免不了和 gradle 打交道。而 gradle 的大部分功能都是經過插件擴展的,像咱們最經常使用的插件就是 Android 官方插件 com.android.application,用來作一些和 Android 相關的配置。java

那若是咱們想本身開發一個 gradle 插件該怎麼作呢?這裏我打算用兩篇文章給你們分享下,這篇文章主要介紹下 gradle 插件的相關概念,下一片文章結合一個例子展現如何一步步寫一個 gradle 插件。android

要知道 gradle 插件是作什麼的,先要搞清楚 gradle 是什麼。git

gradle

簡單說 gradle 是一種構建工具,用來控制代碼的編譯、構建、打包等過程,有點像 C/C++ 項目中的 Make 工具。gradle 執行一次 build 總共能夠分爲三個步驟:github

  • 「initialization 初始化」 執行 settings.gradle 腳本文件,肯定當前項目中包含哪些子項目,Android 項目在這個階段肯定項目中有哪些 module。
  • 「configure 配置」 執行項目中的 build.gradle 腳本文件,建立全部須要建立的 Task。
  • 「execute 執行」 執行指定的 Task。

看來 gradle 要作的事情最終都轉嫁給了 Task 來執行,讓咱們來看看 Task 是什麼。編程

Task

咱們常見的編程語言的基本運行單元是代碼塊或者方法,按照調用的前後順序執行。但 gradle 不一樣,它的工做都由一個個 Task 來執行。Task 能夠指定它所依賴的 Task,或者它要在另外一個 Task 以前或者以後運行。app

將處理邏輯分在不一樣的 Task 中有這麼兩個好處:編程語言

  • 業務解耦,有利於維護和提升代碼健壯性。
  • 增量編譯,當 Task 的輸入/輸出沒有變化時,不用再次運行,直接複用。

那如何建立一個 Task 呢?常見的方式有兩種:工具

  • build.gradle 中直接建立。
  • 經過插件建立。

build.gradle 中通常建立功能簡單的 Task,邏輯複雜的 Task 一般由插件建立,不然會使得 build.gradle 文件臃腫不堪。可見插件也是 gradle 一個重要組成部分,咱們再來看看插件是作什麼的。學習

插件

gradle 核心的邏輯比較簡單,豐富的構建功能都是經過插件的方式擴展的。好比 Android 的構建邏輯確定不是 gradle 官方代碼自帶的,而是 Android 寫了對應的 gradle 插件來實現。這個特性保證了 gradle 功能的靈活性,好比要支持 C 語言的編譯,只須要寫對應的插件就能夠了。gradle

做爲 Android 開發者,最多見的兩個插件分別是:

  • com.android.application
  • com.android.library

一般在 build.gradle 文件中這麼使用插件:

apply plugin: 'com.android.application'
複製代碼

這表示所在的 module 是一個 app module,而使用 com.android.library 插件表示所在 module 是一個 library module,兩種插件分別會對該 module 作不一樣的配置。至因而如何配置的,咱們這裏先不展開,後面講到如何寫一個插件時會涉及到。這裏能夠先理解爲:應用一個插件時,至關於執行了一串代碼塊。

到這裏咱們明白了 gradle 插件是什麼?那爲何須要開發 gradle 插件呢?感受和應用開發也沒多大關係。

爲何要開發 gradle 插件?

做爲一個 Android 開發者,可能以爲我只要作出酷炫的界面,每一個界面無縫切換、不卡頓就好了,爲何要費勁學 gradle 開發呢?

從我本身的經驗來講,學習開發 gradle 插件有這麼幾個好處:

  • 將一組 gradle 操做封裝在一個插件中,有助於代碼複用和避免 build.gradle 文件臃腫。
  • 第三方庫將本身的 gradle 操做封裝在插件中,以依賴包的方式提供給別的項目使用。
  • 插件可使用 java/kotlin 來寫,爲不熟悉 gradle 代碼的開發者下降開發難度。
  • 增進對 Android 構建過程的理解,有助於學習 Android 熱布丁、插件化等技術。

如今咱們明白了 gradle 插件是什麼,以及爲何要建立 gradle 插件,接下來讓咱們點擊這裏查看第二篇文章來看看如何一步步建立一個 gradle 插件。

相關文章
相關標籤/搜索