自定义gradle插件的方式有3种,第一种是直接创建build.gradle文件并在里面编写配置代码,第二种是在项目中新建一个buildSrc模块并在这个模块中编写groovy代码,第三种就是在独立的Module中编写插件,这里介绍的自定义插件采用的是第三种方式,具体的实现步骤如下:

1、新建一个工程项目gradle_plugin_demo,然后在新建一个Module模块custom_plugin(可以是Java Library也可以是Android Library,这里选择的是Java Library)

2、 这里gradle插件的编写选用的是groovy语言,所以需要在custom_plugin的build.gradle文件中配置groovy和gradle相关环境,将build.gradle文件中的内容全部删除,然后添加以下配置代码:

apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_上传


3、在custom_plugin的src/main目录下创建groovy目录,然后创建自己的包(这里是com.znh.plugin),然后在包下面创建一个CustomPlugin类(groovy格式),让这个类实现Plugin接口,并重写里面的apply方法,然后在apply中通过println输出一句话来测试代码是否能正确执行:

package com.znh.plugin

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

class CustomPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {

        println("CustomPlugin执行了...")
    }
}

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_android_02


4、在custom_plugin的src/main下创建resources/META-INF/gradle-plugins目录,然后在这个目录下创建跟自定义Plugin插件相对应的properties文件,gradle会识别这个目录下的properties文件,使用的时候可以通过这个文件的名称来引用对应的插件(文件的名称可以任意定义),这里创建的跟CustomPlugin相对应的properties为com.znh.custom.plugin.properties,这个文件里的内容如下:

implementation-class=com.znh.plugin.CustomPlugin

其中implementation-class可以认为是一个属性名称,而属性的值com.znh.plugin.CustomPlugin是自定义Plugin插件的全类名

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_自定义_03


5、为了方便插件在项目中使用,可以将插件上传到Maven中,然后在项目中通过gradle引入使用,这里为了方便就直接将插件上传到本地的Maven中了,在公司中可以上传到自己公司的私服中,配置Maven环境需要在custom_plugin的build.gradle中添加如下代码:

apply plugin: 'maven'

group = 'com.znh.plugin'
version = '1.0.0'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../custom_plugin_repo'))
        }
    }
}

上述配置中,group和version是使用插件时引用依赖需要用到的,二者的值是任意定义的,version代表插件的版本号,插件做了功能修改后,要修改版本号重新发布到Maven中便于版本管理,uri中的“…/custom_plugin_repo”是Maven的仓库地址,这里是设置的本地地址(本工程里的custom_plugin_repo目录下),然后在AS的Gradle操作面板中,找到uploadArchives的Task点击执行,执行完成该插件就上传到了Maven中了,就可以在项目中使用了。

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_自定义_04


6、经过上述几步,一个自定义的gradle插件就开发并上传完成了,下面就可以在项目中使用测试下了,打开app的build.gradle文件添加一下配置代码:

//注释1
apply plugin: 'com.znh.custom.plugin'

buildscript {
    repositories {
        google()
        jcenter()
        maven {
            url '../custom_plugin_repo'//注释2
        }
    }
    dependencies {
        classpath 'com.znh.plugin:custom_plugin:1.0.0'//注释3
    }
}

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_maven_05


在注释1处的’com.znh.custom.plugin’就是在第4步中创建的插件相对应的properties文件的名称,注释2处的地址是maven仓库的地址,注释3处是添加插件的依赖其组成是group+插件项目名称+version,group和version是第5步中配置maven环境时自己设置的值,使用时可以直接打开pom文件在pom文件中的groupId+artifactId+version就是这个依赖的全名称:

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_gradle_06


7、在AS的命令终端中输入 ./gradlew命令进行构建(Mac终端是这个命令),然后查看gradle的打印日志,可以正确打印出在自定义插件中打印的语句:

安卓 gradle 自定义 task 执行assembleDebug gradle 自定义插件_maven_07


项目地址:https://github.com/huihuigithub/blog_demo_projects.git(gradle_plugin_demo项目)