Android 自定义Gradle插件(一): 创建自定义插件与发布

947 阅读1分钟

在之前的文章应用防呆的一些笔记中提到了ASM,最近打算开始学习。自定义Gradle插件是ASM实现代码插桩的步骤之一,本篇文章记录一下如何自定义Gradle插件。

自定义插件

以下是实现步骤:

  1. 新建一个Module(或者新建Project也可以) 图片.png

  2. 调整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文件夹以及插件需要的文件

图片.png

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中添加引用: 图片.png

在项目App module的build.gradle中添加插件 图片.png

然后构建一下项目,就可以在Gradle中找到我们自定义的Task 图片.png

执行效果如下: 图片.png