手写Gradle Plugin(自定义Gradle插件)

手写Gradle Plugin(自定义Gradle插件)

插件编译Gradle环境配置

Android Studio 3.6.3
com.android.tools.build:gradle:3.5.3
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

新建一个moudel

  新建一个moudel,选择Android Library类型,并将moudel命名为asmplugin,包名无所谓。新建成功后进入该module目录,删除src/main下的所有文件和目录,只保留如图所示文件
在这里插入图片描述
修改build.gradle

  将asmplugin moudel下的build.gradle文件中的内容全部删除,并修改如下

apply plugin: 'groovy'
apply plugin: 'maven'

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    //依赖 gradle Api仓库
    implementation gradleApi()
    // 依赖 groovy本地仓库
    implementation localGroovy()

    implementation 'com.android.tools.build:gradle:3.5.3'
}

//以下配置信息可以根据情况修改

// maven仓库group名称
group = 'com.asm.fix'
// maven仓库插件版本号
version = '1.0.0'

//maven 仓库发布
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri("../asm_fix"))
        }
    }
}

  group 和 version 都需要在 app module 引用此插件时使用。所有的插件都需要被部署到 maven 库中,我们可以选择部署到远程或者本地。这里只是演示,所以只是将插件部署到本地目录中。具体地址通过 repository 属性配置,如图所示我将其配置在项目根目录下的 asm_fix目录下。

创建groovy目录

  因为Gradle插件是基于Groovy语法开发的,所有我们在moudel的src/main目录下新建一个groovy目录。在groovy目录下新建包名:com.asm.fix(包名任取,跟开发java时一样)。然后在包下新建BytecodePlugin.groovy文件,文件内容如下:

由于groovy是基于JVM的DSL语言,在groovy中能完美调用Java API。

package com.asm.fix

import org.gradle.api.Plugin
import org.gradle.api.Project

//因为要创建Gradle插件就必须要实现Gradle包中的org.gradle.api.Plugin接口
public class BytecodePlugin implements Plugin<Project> {

    void apply(Project project) {
        System.out.println("Hello Gradle Plugin")
    }
}

创建META-INF目录

  插件定义好之后我们要告诉Gradle哪一个类是我们定义的插件类。所以我们需要在moudle的src/main目录下新建一个resources目录,然后在resources目录下新建一个META-INF目录,接着在META-INF目录下新建一个gradle-plugins目录,gradle-plugins目录是自定义Gradle插件的必备目录。最后在gradle-plugins目录下创建一个properties文件。文件名为com.asm.fix.properties,并在文件中添加一下配置内容:

implementation-class=com.asm.fix.BytecodePlugin

最终该module内容为:
在这里插入图片描述

使用插件

  使用插件前我们需要把我们定义好的插件打包到Maven仓库才可以使用,这里我们直接将插件打包到本地Maven仓库。在之前的build.gradle文件中我们已经配置好了插件的Maven发布配置。这时我们运行asmplugin下的uploadArchives Task
在这里插入图片描述

Task运行成功后,就会在asmplugin module的同级目录下生成一个asm_fix文件夹,该文件夹就是我们自定义插件的仓库。

在这里插入图片描述

插件打包到本地仓库后就可以在主项目的build.gradle中使用我们自定义的插件了,在根目录的build.gradle文件中添加Maven的本地依赖,代码如下所示:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
   
    repositories {
        google()
        jcenter()
        //maven 仓库地址
        maven {
            url uri('./asm_fix')
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
       
        // in the individual module build.gradle files
        classpath 'com.asm.fix:asmplugin:1.0.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

在根目录的build.gradle配置完成之后,就可以只用我们自定义的插件了,在主项目的的build.gradle文件中添加如下依赖:

apply plugin: 'com.asm.fix'

配置成功后我们重新clean下代码,运行项目我们会在Studio的Build窗口中看到插件所打印的信息,表明插件成功生效。
在这里插入图片描述

至此我们手写Gradle Plugin插件就算大功告成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值