本文仅记录buildSrc项目方式实现的自定义Gradle插件
1.首先新建插件module选择java library(Module名称必须是:buildSrc)
2.修改插件对应build.gradle文件,添加相应gradle依赖
apply plugin: 'java-library'
repositories {
google()
jcenter()
}
dependencies {
//添加gradle版本
implementation 'com.android.tools.build:gradle:3.3.2'
//添加gradle对应api
implementation gradleApi()
}
3.编写插件对应java代码,实现Plugin<>接口
package com.wj.plugin;
import com.android.build.gradle.AppPlugin;
import org.gradle.api.Action;
import org.gradle.api.GradleException;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
public class MyPlugin implements Plugin<Project> {
@Override public void apply(Project project) {
if (!project.getPlugins().hasPlugin(AppPlugin.class)) {
throw new GradleException("无法在非android application插件中使用gradle插件");
}
//task测试,可以通过命令执行:gradlew testTask,测试改task执行情况
project.task("testTask").doFirst(new Action<Task>() {
@Override public void execute(Task task) {
System.out.println("task Test....");
}
});
//"user"使用插件时相应的配置对象
project.getExtensions().create("user",Person.class);
project.afterEvaluate(new Action<Project>() {
@Override public void execute(Project project) {
//获取使用过程中的相应配置参数
Person user= (Person) project.getExtensions().findByName("user");
if (user!=null){
System.out.println("findByName--->"+user.toString());
}else {
System.out.println("findByName--->NULL");
}
Person person=project.getExtensions().findByType(Person.class);
if (person!=null){
System.out.println("findByType--->"+person.toString());
}else {
System.out.println("findByType--->NULL");
}
}
});
}
}
4.使用自定义gradle插件,在主Module下引入自定义插件
apply plugin: 'com.android.application'
//1.插件完整类名引入
//apply plugin: com.wj.plugin.MyPlugin
//2.配置属性文件名引入
//“resources/META-INF/gradle-plugins/buildSrcPlugin.properties”
//文件内容:implementation-class=com.wj.plugin.MyPlugin
apply plugin: 'buildSrcPlugin'
user{
name "Json"
age 30
man true
}
android {
compileSdkVersion 28
buildToolsVersion "29.0.2"
...
}
5.测试结果
6.目录结构