1.介绍:
官方介绍
image.png
翻译: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
打印结果:
plugin_one.gif
3.2.如何动态配置呢。像我们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 = "张三"
}
打印结果
plugin_two.gif
使用动态配置:
//plugin简单使用
apply plugin: PluginDemo
class PluginDemo implements Plugin<Project>{
@Override
void apply(Project target) {
def extension = target.extensions.create("hencoder",ExtensionDemo)
//稍后执行
target.afterEvaluate {
println "Hello ${extension.name}"
}
}
}
class ExtensionDemo{
def name = "张三"
}
hencoder{
name = "李四"
}
执行结果:
plugin_three.gif
4.自定义Plugin
步骤:
1.在Project下创建一个文件,文件名为buildStr(名称必须是这个),或者创建一个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下边创建一个类,需要为.groovy文件,实现Plugin<Project>,实现apply方法
4.在xxx.properties文件添加 implementation-class=包名.第三步创建的类名
5.通过上方最基本的使用,extension的用法
6.在项目的build.gradle中添加我们的plugin。
例如:
image.png
执行结果:
plugin_four.gif
5.关于buildStr的目录
1.这是 gradle 的⼀个特殊⽬录,这个⽬录的 build.gradle 会⾃动被执⾏,即使不配配置进settings.gradle
2.buildSrc 的执⾏早于任何⼀个 project,也早于 settings.gradle。它是⼀个独⽴的存在
3.buildSrc 所配置出来的 Plugin 会被⾃动添加到编译过程中的每⼀个 project 的 classpath,因此它们才可以
直接使⽤ apply plugin: 'xxx' 的⽅式来便捷应⽤这些 plugin
4.settings.gradle 中如果配置了 ':buildSrc' ,buildSrc ⽬录就会被当做是⼦ Project ,
因此会被执⾏两遍。所以在 settings.gradle ⾥⾯应该删掉 ':buildSrc' 的配置