概述
Gradle 的插件可以有三种形式来提供:
- 直接在build.gradle中编写Plugin,这种方式这种方法写的Plugin无法被其他 build.gradle 文件引用。
- 单独的一个Module,这个Module的名称必须为buildSrc,同一个工程中所有的构建文件够可以引用这个插件,但是不能被其他工程引用。
- 在一个项目中自定义插件,然后上传到远端maven库等,其他工程通过添加依赖,引用这个插件。
本文只对后面两种方式来进行简单介绍。
在当前项目中创建插件
最终的目录结构为:
创建Plugin
- 创建一个 Module (Phone&Tablet Module 或 Android Librarty 都可以),Module的名称必须为 buildSrc。
- 将Module里面的内容删除,只保留build.gradle文件和src/main目录。
- 我们开发的 gradle 插件相当于一个 groovy 项目。所以需要在 main 目录下新建 groovy 目录。
- 然后创建一个 Java 文件一样的方式创建一个 groovy 文件,比如报名为 com.android.hq.testplugin 的 TestPlugin.groovy 文件。
修改build.gradle
因为我们要用到 groovy,以及要用到gradle和groovy的sdk,因此将 buildSrc 下面的 build.gradle 修改为:
apply plugin: 'groovy'
dependencies {
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
}
repositories {
jcenter()
}
实现
实现 TestPlugin
类,在脚本中通过实现gradle的Plugin接口,实现apply方法即可:
package com.android.hq.testplugin
import org.gradle.api.Plugin
import org.gradle.api.Project;
public class TestPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
// 实现一个名称为testPlugin的task
project.task('testPlugin') << {
println "## This is my first gradle plugin in testPlugin task"
}
println "** This is my first gradle plugin"
}
}
这里在简单实现了一个名称为testPlugin的task,当执行该task时,会打印 ## This is my first gradle plugin in testPlugin task
,而