今天開始,咱們實戰下 Gradle 插件開發,首先咱們的視角仍是鎖定 Android Gradle Plugin 開發。html
咱們使用 Intellij IDEA 來建立一個普通的 Gradle Java 工程。建立完成後,設置好 Gradle Wrapper,工程一開始長這樣:java
咱們把 Gradle Wrapper 版本改爲最新的穩定版,目前是 6.0.1,後面使用-all
引入 Gradle 的源碼,方便咱們查看 Gradle 的 API 實現,理解 API 接口。linux
注:Gradle Plugin 的開發不必定要使用 Groovy,這是一個誤導,這裏只要是 JVM 環境內的語言均可以,我我的推薦 Java 和 Kotlin,Groovy 閉包的某些特性實在是有點坑,我的不太喜歡它。
這樣,工程初始化就作完了。android
由於咱們基於 Gradle 和 Android Gradle Plugin 開發,所以確定要引入這兩個依賴,引入的方式很簡單,以下便可:
api
這樣依賴也導入完成啦,接下來咱們就能夠開發咱們的插件了。閉包
官方向導:https://docs.gradle.org/curre...
官方提供了三種方式寫插件:app
咱們使用第三種方式建立。maven
咱們定義一個插件類,叫AppPlugin
,插件的入口在這,當咱們在 build.gradle 中 apply 咱們插件的時候,這裏的回調函數就會被調用:ide
package com.gemini.build; import org.gradle.api.Plugin; import org.gradle.api.Project; public class AppPlugin implements Plugin<Project> { @Override public void apply(Project target) { System.out.println("Hello World!"); } }
咱們須要在 META-INF 中導出咱們的插件,方式很是簡單,咱們建立一個文件,文件路徑以下:函數
src/main/resources/META-INF/gradle-plugins/{插件ID}.properties
好比我使用 id 是 com.gemini.application
,配置完成後,以下圖:
到此爲止,咱們的插件工程建立完了,只要應用咱們插件的時候,項目應該就會打印一個Hello World!
,那麼怎麼把咱們的插件應用到咱們的項目中呢?咱們能使用的方式是把插件安裝在本地 maven 倉庫裏,安裝方式很簡單,在咱們的插件工程下,先應用maven
插件,而後執行:
./gradlew clean install
便可
這樣,你的插件就安裝在了本地路徑,mac/linux 下應該是 ~/.m2/repository/ 下。
新建一個 Android 項目,在 root project 上添加 apply plugin:'maven',而後刪除clean
的任務,在buildscript
結點中,添加剛剛建立插件的 GAV,這個 GAV 在你建立插件工程的時候應該能看見
在這種狀況下,咱們的 classpath 就設置成com.gemini.build:android-gradle-plugin:1.0-SNAPSHOT
那麼,Android 工程中的設置就像這樣:
Sync 下,發現咱們添加的 classpath 應該沒有問題了,而後咱們須要在 app 項目中應用插件
在 app 模塊下的 build.gradle 中,使用剛剛咱們在 META-INF 中設定的值 apply plugin:'com.gemini.application'
這時候咱們執行任意任務,就能獲得結果了:
調試插件蠻多人很好奇,其實調試很簡單,可是不少人問,因此我在這裏也順便說一下,調試的方式分兩塊,插件工程的設置和 Android 工程的設置。
咱們須要在 Run Configuration 中增長一個 Debug 的設置就好,像這樣:
設置完了以後,執行 Android 工程下的 gradle 命令:
./gradlew clean assembleDebug -Dorg.gradle.debug=true --no-daemon
Gradle 開啓 Daemon 後會暫停
這時候咱們在插件工程裏設置好斷點,點 Debug 按鈕,代碼執行到的時候,就會在該行斷點停下來:
歡迎關注個人公衆號「TalkWithMobile」