Gradle自定義外掛詳解
關於gradle外掛自定義,發現網上好多的錯誤教程,總結後的文章,若本文中也有錯誤,請及時指正
在Gradle中建立自定義外掛,Gradle提供了三種方式:
- 在build.gradle指令碼中直接使用
- 在buildSrc中使用
- 在獨立Module中使用
開發Gradle外掛可以在IDEA中進行開發,也可以在Android Studio中進行開發,它們唯一的不同,就是IDEA提供了Gradle開發的外掛,比較方便建立檔案和目錄,而Android Studio中,開發者需要手動建立(但實際上,這些目錄並不多,也不復雜,完全可以手動建立,而且在AS中進行建立有利於進行外掛依賴的除錯和功能的完善)。
一.在build.gradle指令碼中使用
在build.gradle指令碼中使用是最簡單的,但是隻適應於很簡單的功能,也不便於其他地方應用,如下面,可以直接寫在app moudle的build.gradle 裡面,sync之後可在右側model對應的other中查詢到MytestPlugin
雙擊執行,在android studio終端裡就可以直接執行此外掛:
由於直接在build.gradle中進行自定義比較簡單,這裡就不在進行重點的講解
二. 在專案裡使用
這裡官網的描述 https://docs.gradle.org/4.0.2/userguide/organizing_build_logic.html#multiProjectBuildSrc
請參考(目前所暫時為最新的gradle4.0.2內容,低版本也相容此功能)
根據官網的描述,這裡在專案中進行使用的gradle外掛過程如下:
首先在Android Studio中建立一個標準的Android專案,然後在專案的根目錄下新建一個model命名為buildSrc,這個目錄就用來存放自定義外掛,整個目錄結構如下所示:
├── app
│ ├── build.gradle
│ ├── libs
│ └── src
│ ├── androidTest
│ │ └── java
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── res
│ └── test
├── build.gradle
├── buildSrc
│ ├── build.gradle ---1
│ └── src
│ └── main
│ ├── groovy ---2
│ └── resources ---3
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
我們對新建的model操作過程如下:
src/main 專案檔案下:
- 移除 java 資料夾,因為在這個專案中用不到 java 程式碼
- 新增 groovy 資料夾,主要的程式碼檔案放在這裡
- 新增 resources 資料夾,存放用於標識 gradle 外掛的 meta-data
- 修改src/build.gradle配置內容
下面是我的一個實際專案:
其中,除了buildSrc目錄以外,其他都是標準的Android目錄,而buildSrc就是Gradle提供的在專案中配置自定義外掛的預設目錄,開發Gradle要建立的目錄,也就是RootProject/src/main/groovy和RootProject/src/main/resources兩個目錄。
1,建立buildSrc/build.gradle
首先,先來配置buildSrc目錄下的build.gradle檔案,這個配置比較固定,使用官網示例,指令碼如下所示:
apply plugin: 'groovy'
dependencies {
compile gradleApi() //gradle sdk
compile localGroovy() //groovy sdk
}
2,建立Groovy指令碼
接下來,在groovy目錄下,建立一個Groovy類(與Java類似,可以帶包名,但Groovy類以.grovvy結尾,所以groovy檔案的建立是new->file->custom.groovy),如圖所示:
在groovy下先建立了子目錄,這裡類似於java 的package一樣,com/myPlugin 目錄,再建立MyPlugin.groovy檔案:
package com.myPlugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class MyPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.task('testPlugin') << {
println 'hello, world!'
}
}
}
注意:
groovy 資料夾中的類,一定要修改成 .groovy
字尾,IDE 才會正常識別。
這個外掛建立了一個名為testPlugin的Task, 並在 task 中列印。外掛是一個類,繼承自 org.gradle.api.Plugin介面,過載 void apply(Project project)方法,這個方法將會傳入使用這個外掛的 project 的例項,這是一個重要的 context。
3,建立resources
resources目錄是標識整個外掛的目錄,其目錄下的結構如下所示:
└── resources
└── META-INF
└── gradle-plugins
該目錄結構與buildSrc一樣,是Gradle外掛的預設目錄,不能有任何修改。建立好這些目錄後,在gradle-plugins目錄下建立——外掛名.properties檔案,如上圖所示的: myCustomPlugin.properties檔案
在該檔案中,程式碼如下所示:
implementation-class=com.myPlugin.MyPlugin//這裡的com.myPlugin.MyPlugin指的是上面所建立的包名路徑
通過上面的程式碼指定最開始建立的Groovy類即可。
在主專案中使用外掛
在主專案的build.gradle檔案中,通過apply指令來載入自定義的外掛,指令碼如下所示:
apply plugin: 'myCustomGradle'
其中plugin的名字,就是前面建立myCustomPlugin.properties中的名字——myCustomPlugin,通過這種方式,就載入了自定義的外掛。
配置完畢後,就可以在主專案中使用自定義的外掛了,在終端執行gradlew testPlugin指令或者在右側的gradle整合中查詢,及app-other:testPlugin任務進行雙擊,如圖:
結果如下所示:
三. 在獨立Module中使用
一個獨立的 Groovy 和 Java 專案,可以把這個專案打包成 Jar 檔案包,一個 Jar 檔案包還可以包含多個外掛入口,將檔案包釋出到託管平臺上,供其他人使用。
在buildSrc中建立自定義Gradle外掛只能在當前專案中使用,因此,對於具有普遍性的外掛來說,通常是建立一個獨立的Module來建立自定義Gradle外掛。
建立過程請參考上節中的
《二. 在專案裡使用》
卻別在於:
- 不需要進行model的名稱的寫死,也就是你可以隨意的命名
- buildSrc會自動的編譯和加入到classpath中,這裡我們需要手動依賴
- 需要上傳到maven倉庫中
其實gradle外掛的自定義到這裡介紹的也差不多了,由於篇幅的原因,關於maven的上傳和外掛的依賴我們單獨開一章節來描述。以上功能已經全部驗證,原始碼請見:https://github.com/AnyMarvel/GradleStart
ps:若開發gradle外掛比較犀利的情況下,推薦使用IDEA,至少有個提示功能
未完待續……
(累了休息會吧,gradle環境跑步起來會吐的,真會吐哦)
關注微信公眾號 Android歷練記 或掃一掃二維碼:讓我們一起來搞事情。
相關文章
- gradle自定義外掛Gradle
- 自定義Gradle-Plugin 外掛GradlePlugin
- gradle自定義任務和外掛Gradle
- Gradle理論與實踐四:自定義Gradle外掛Gradle
- 手把手帶你自定義 Gradle 外掛 —— Gradle 系列(2)Gradle
- Gradle核心思想(六)自定義Gradle外掛的三種方式Gradle
- mybatis 自定義外掛MyBatis
- 自定義一個gradle外掛動態修改jar包Class檔案GradleJAR
- vue自定義全域性元件(或自定義外掛)Vue元件
- WM自定義桌面"今日外掛"
- es 自定義分詞外掛分詞
- apisix~自定義外掛的部署API
- Gradle外掛開發 APK瘦身資源自定義7z壓縮GradleAPK
- Android多渠道打包工具Gradle外掛使用詳解AndroidGradle
- Kube-Scheduler外掛的自定義
- jQuery如何製作自定義外掛jQuery
- Cordova學習--iOS自定義外掛iOS
- gulp進階-自定義gulp外掛
- 【django學習-24】自定義外掛Django
- Gradle系列之Gradle外掛Gradle
- Gradle系列(四) Gradle外掛Gradle
- Gradle 自定義 pluginGradlePlugin
- APISIX Ingress 如何支援自定義外掛API
- 自定義jquery外掛簡單介紹jQuery
- jQuery自定義外掛簡單介紹jQuery
- 快速自定義Cordova外掛(-配置檔案)
- 二 阿里大模型接入:自定義外掛阿里大模型
- apisix-dashboard上新增自定義外掛API
- OD外掛詳解
- spket外掛詳解
- [-Flutter外掛篇 1-] 從自定義外掛開始說起Flutter
- 通俗易懂的Gradle外掛講解Gradle
- Android Gradle外掛AndroidGradle
- iOS持續整合(三)——fastlane 自定義外掛iOSAST
- JMeter自定義取樣器外掛開發JMeter
- mybaits原始碼分析--自定義外掛(七)AI原始碼
- Apache Maven Assembly自定義打包外掛的使用ApacheMaven
- Elasticsearch實現自定義排序外掛(轉載)Elasticsearch排序