在之前的文章应用防呆的一些笔记中提到了ASM,最近打算开始学习。自定义Gradle插件是ASM实现代码插桩的步骤之一,本篇文章记录一下如何自定义Gradle插件。
自定义插件
以下是实现步骤:
-
新建一个Module(或者新建Project也可以)
-
调整Module内容 首先调整Module中的build.gradle,添加groovy相关的依赖,并同步一下项目。build.gradle调整后的内容如下:
plugins {
id 'groovy'
id 'java'
id 'maven-publish'
}
repositories {
mavenCentral()
}
dependencies {
implementation gradleApi()
implementation localGroovy()
}
publishing {
publications {
plugin(MavenPublication) {
from components.java
group 'com.chenyihong.doubleclick'
artifactId 'intercept-plugin'
version '1.0.2'
}
}
repositories {
maven {
allowInsecureProtocol(true)
url MAVEN_PLUGIN_URL
credentials {
username = USERNAME
password = PASSWORD
}
}
}
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
3. 删除src文件夹中无用的文件,并新建grooy和resources文件夹以及插件需要的文件
InterceptPlugin类 实现Plugin接口,重写apply方法,可以在apply方法中定义你想要执行的Task,代码如下:
import org.gradle.api.NonNullApi;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
@NonNullApi
class InterceptPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
//传入的参数就是创建的Task名称
Task intercept_click = project.task("InterceptClick");
intercept_click.doFirst(task -> {
System.out.println("From Intercept Plugin !");
});
}
}
properties文件的文件名就是在添加插件时用到的插件名。intercept-plugin.properties内容如下:
implementation-class=com.chenyihong.doubleclick.InterceptPlugin
以上步骤已经完成了一个简单插件的自定义,发布到maven之后就可以在项目中使用了。
项目中使用
在项目的顶层build.gradle中添加引用:
在项目App module的build.gradle中添加插件
然后构建一下项目,就可以在Gradle中找到我们自定义的Task
执行效果如下: