一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
前言
Gradle Plugin其实在日常的开发中,开发者主动去接触其中原理以及怎么构建的机会其实是很少的。如果没有一些插桩 或者是无痕埋点以及一些特殊的处理,大部分的开发者都不会怎么去关心,只要使用好默认提供的插件就OK了也就是这么几行
Gradle Plugin有什么作用
- 无痕埋点
- 修改资源
- 压缩图片
- 修改字节码
- 切面编程
创建以及使用Plugin
创建plugin的方式有
- 直接在gradle中构建一个plugin对象
- 使用本地Moudle buildSrc构建
- 使用单独的gradle插件project 第一种方式使用的情况较少,不适合复合。 创建及使用方式如下,直接在build.gradle中创建
//如果需要测试 可以将这部分代码直接粘贴到build.gradle中即可执行
class TestPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
//创建dsl扩展
def testExtension = project.extensions.create("testExtension", TestExtension)
//在执行当前工程 build.gradle 后,会回调 Gradle 对象的 afterProject 方法和当前 Project 对象的 afterEvaluate 方法
project.afterEvaluate {
println(testExtension.configName)
println(testExtension.extensionVersion)
}
}
}
class TestExtension {
def configName = "测试textExtension"
def extensionVersion = 1.0
}
apply plugin: TestPlugin
//dsl扩展(这个是扩展,跟plugin不是一个概念,不一定要有这个东西,但是如果你想有一些自己的配置 就可以这么用)
testExtension {
configName "我修改了这个"
extensionVersion 1.1
}
第二种方式跟第三种方式区别在于一个是Moudle一个是project 这里使用buildSrc的方式进行创建,方便调试应用 首先 新建一个module 取名叫buildSrc(注意,一定要叫这个名字,而且在setting.gradle中不要include这个Moudle,gradle会自动引入)大概的目录结构为
贴一下 com.ljy.test.properties 的代码 就只有一行,很简单,唯一要注意的就是命名就是到时候依赖插件的时候的名字
implementation-class=com.test.TestPlugin
大致的目录结构完成后就可以进行plugin的编写了
//大致的插件编写
public class TestPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
//创建扩展dsl
TestExtension testExtension = project.getExtensions()
.create("testExtension", TestExtension.class);
//在执行当前工程 build.gradle 后,会回调 Gradle 对象的 afterProject 方法和当前 Project 对象的 afterEvaluate 方法
project.afterEvaluate(project1 -> {
System.out.println(testExtension.getConfigName());
System.out.println(testExtension.getExtensionVersion());
});
}
}
//DSL扩展类,用来更改配置,这里就是一个示例,抛砖引玉
public class TestExtension {
private String configName="";
private double extensionVersion=1.0;
public String getConfigName() {
return configName;
}
public void setConfigName(String configName) {
this.configName = configName;
}
public double getExtensionVersion() {
return extensionVersion;
}
public void setExtensionVersion(double extensionVersion) {
this.extensionVersion = extensionVersion;
}
}
在build.gradle 引入插件以及扩展
apply plugin: "com.ljy.test"
testExtension {
configName "我修改了这个"
extensionVersion 1.1
}
总结
以上就是如何在本地构建一个gradle plugin的全过程啦,全部代码基本上都贴出来了,没贴的就是不影响使用的,这里没有对具体的原理以及各种方法代表的含义进行说明,因为我说的可能你们也没法理解,代码量其实很少,如果有不懂的地方,网上搜索一下,自己理解比我讲会更好。这也是我不提供案例的原因,自己动手创建之后,才能理解,动手才是学习的最好方式,感谢大家的观看,谢谢大家