1.介紹:
官方介紹
翻譯:Gradle插件將構建邏輯的可重用部分打包起來径缅,這些邏輯可以跨許多不同的項目和構建使用秕豫。Gradle允許您實現自己的插件硕并,這樣您就可以重用您的構建邏輯,并與他人共享它怎炊。
2.Gradle Plugin本質
本質:就是把邏輯獨立的代碼抽取和封裝
3.Plugin的最基本用法
?3.1我們在 build.gradle 里編寫:
//plugin簡單使用
apply plugin: PluginDemo
class PluginDemo implements Plugin<Project>{
@Override
void apply(Project target) {
println "Hello"
}
}
通過控制臺輸入:gradlew
打印結果:
?3.2.如何動態(tài)配置呢谭企。像我們build.gradle文件中android{ ... }那樣廓译?
??使用:extension,他不是一個類债查。
//plugin簡單使用
apply plugin: PluginDemo
class PluginDemo implements Plugin<Project>{
@Override
void apply(Project target) {
def extension = new ExtensionDemo()
println "Hello ${extension.name}"
}
}
class ExtensionDemo{
def name = "張三"
}
打印結果
使用動態(tài)配置:
//plugin簡單使用
apply plugin: PluginDemo
class PluginDemo implements Plugin<Project>{
@Override
void apply(Project target) {
def extension = target.extensions.create("hencoder",ExtensionDemo)
//稍后執(zhí)行
target.afterEvaluate {
println "Hello ${extension.name}"
}
}
}
class ExtensionDemo{
def name = "張三"
}
hencoder{
name = "李四"
}
執(zhí)行結果:
4.自定義Plugin
步驟:
? ?1.在Project下創(chuàng)建一個文件非区,文件名為buildStr(名稱必須是這個),或者創(chuàng)建一個javalibrary的model盹廷,注意需要在工程下的setting.gradle中去除新建的plugin
? ?2.在目錄下邊新建resources/META-INF/gradle-plugins/xxx.properties 注意后綴必須是.properties
? ?? ?目錄結構:
? ?? ?resources
? ?? ?? ?META-INF
? ?? ?? ?? ?gradle-plugins
? ?? ?? ?? ???xxx.properties(xxx為插件的名稱征绸,最終需要在build.gradle中配置)
? ?3.在main下邊創(chuàng)建一個類,需要為.groovy文件俄占,實現Plugin<Project>管怠,實現apply方法
? ?4.在xxx.properties文件添加 implementation-class=包名.第三步創(chuàng)建的類名
? ?5.通過上方最基本的使用,extension的用法
? ?6.在項目的build.gradle中添加我們的plugin缸榄。
例如:
執(zhí)行結果:
5.關于buildStr的目錄
1.這是 gradle 的?個特殊?錄渤弛,這個?錄的 build.gradle 會?動被執(zhí)?,即使不配配置進settings.gradle
2.buildSrc 的執(zhí)?早于任何?個 project甚带,也早于 settings.gradle她肯。它是?個獨?的存在
3.buildSrc 所配置出來的 Plugin 會被?動添加到編譯過程中的每?個 project 的 classpath,因此它們才可以
直接使? apply plugin: 'xxx' 的?式來便捷應?這些 plugin
4.settings.gradle 中如果配置了 ':buildSrc' 鹰贵,buildSrc ?錄就會被當做是? Project 晴氨,
因此會被執(zhí)?兩遍。所以在 settings.gradle ??應該刪掉 ':buildSrc' 的配置