增加自己的自定义plugin,使用的是最简单的那种, 在项目下创建一个buildSrc Java Module,然后在apply哪里改:

// 引入对应的plugin
apply plugin: 'groovy'
apply plugin: 'java'

dependencies {
    implementation gradleApi()// 引入gradle api
    implementation localGroovy()// 引入groovy
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

sourceSets {// 源码地址
    main {
        groovy {
            srcDir 'src/main/groovy'
        }

        java {
            srcDir "src/main/java"
        }

        resources {
            srcDir 'src/main/resources'
        }
    }
}

sourceCompatibility = "7"
targetCompatibility = "7"

这个就是完整的gradle文件配置,通过这个配置之后,在添加对应的plugin以及task即可,

public class FirstPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        // 新建一个名为hello的task,实际调用为MyTest
        project.getTasks().create("hello", MyTest.class, new Action<MyTest>() {
            @Override
            public void execute(MyTest myTest) {
                // 这里调用task
                myTest.str = "xuepanjie";
                myTest.say();
                myTest.str = "hello";
            }
        });
    }
} // plugin 代码

public class MyTest extends DefaultTask {
    public String str;

    @TaskAction
    public void say(){
        System.out.print(str);
    }
}// task代码

这时如果在App内的plugin apply对应的first plugin,那么在执行assembleDebug的时候就会调用这个新增的Plugin了,这里可以增加自己的task也可以增加自己的transform,当然也可以不在这里增加buildSrc这种方式,而改成独立的moudle然后发布之后在目标app去依赖即可,类似booster这种方式。

即使这种简单的加法也遇到问题,问题是在新建module的时候选择了library,应该选择java那种形式然后修改对应的build文件才行。

借鉴:https://guides.gradle.org/writing-gradle-plugins/

01-02 02:25