自定義 Gradle 外掛學習記錄
參考:https://juejin.im/entry/577bc26e165abd005530ead8
## 建立Model
1.在Android studio 中建立Model,切換到project模式;
2.刪除model下的除build.gradle檔案和src/main目錄以外的所有檔案,修改build.gradle檔案,如下所示:
apply plugin: 'groovy' apply plugin: 'maven' dependencies { compile gradleApi() compile localGroovy() } repositories { mavenCentral() }
3.在main目錄下建立groovy目錄;
4.在groovy目錄下新建包名,如com.banzhi.plugin,然後在該包下建立xxx.groovy檔案,實現 org.gradle.api.Plugin 介面,內容如下:
package com.banzhi.myplugin import org.gradle.api.Plugin import org.gradle.api.Project public class PluginDemo implements Plugin<Project> { @Override void apply(Project project) { System.out.println("========================"); System.out.println("hello gradle plugin!"); System.out.println("========================"); } }
5.在main目錄下建立resources目錄,然後在resources目錄下建立META-INF目錄,在META-INF目錄下建立gradle-plugins目錄,最後在gradle-plugins目錄下建立properties檔案,如:com.banzhi.myplugin.properties,而在其他build.gradle檔案中使用自定義的外掛時候則需寫成:apply plugin: 'com.banzhi.myplugin' ,properties檔案內容為:
//MyPlugin檔案的全路徑 implementation-class=com.banzhi.myplugin.PluginDemo
最終的目錄結構為:
### 上傳到maven
在model的build.gradle檔案中新增:
group='com.banzhi.myplugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('D:/repo'))
}
}
}
同步下程式碼,然後上傳:
等待執行完成後會在maven倉庫中生成repo檔案:
其中,repo是倉庫名稱,com.banzhi.myplugin是指定的group,myplugin是模組名稱,1.0.0是指定的版本號version;
### 使用
在app的build.gradle中新增:
buildscript {
repositories {
maven {
url uri('D:/repo')
}
}
dependencies {
classpath 'com.banzhi.myplugin:myplugin:1.0.0'
}
}
apply plugin: 'com.banzhi.myplugin'
同步程式碼後在Terminal中執行 gradlew testTask,最終執行結果為:
### 另一種方式
另一種方式是針對當前專案的Gradle外掛,不需上傳到maven倉庫,相對來說比較簡單,不需要建立sources檔案;
1.建立的module名稱必須是buildsrc;
2.build.gradle中不需要上傳maven的程式碼,程式碼為:
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
jcenter()
}
最終的檔案結構為:
PluginSecond.groovy的程式碼:
package com.banzhi.myplugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class PluginDemo implements Plugin<Project> {
@Override
void apply(Project project) {
project.task("testTask") << {
println("========================")
println("hello gradle plugin!")
println("========================")
}
}
}
在app的build.gradle中新增
apply plugin: com.banzhi.buildsrc.PluginSecond
注意這裡的引用不要加引號!rebuild程式碼,執行測試: