本文介绍了如何自定义Gradle插件。
创建groovy工程
首先使用Android Studio创建一个Library Module,然后在java文件夹改名为groovy,Android Studio默认会从此文件夹下搜索groovy源码,将res文件夹改名为resources,并删除resources文件夹中所有内容,删除test和androidTest文件夹,删除proguard-rules.pro文件,删除build.gradle文件中所有内容添加如下内容:1
2
3
4
5
6
7
8
9
10
11apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
告诉Android Studio此Module为groovy工程并添加相应依赖。
然后在包名下添加PluginImpl.groovy文件:1
2
3
4
5
6
7
8
9
10
11
12package io.github.yuweiguocn.build
import org.gradle.api.Plugin
import org.gradle.api.Project
public class PluginImpl implements Plugin<Project> {
void apply(Project project) {
project.task('testTask') << {
println "Hello gradle plugin"
}
}
}
然后resources目录下新建文件夹META-INF,META-INF文件夹下新建gradle-plugins文件夹。在gradle-plugins文件夹下添加properties文件,注意此文件的命名为应用插件时的名字,所以尽量添加包名前缀:
io.github.yuweiguocn.myplugin.properties1
implementation-class=io.github.yuweiguocn.build.PluginImpl
最后我们来看一下工程结构:
这样一个简单的gradle插件就完成了。
发布到本地仓库
写完插件之后应该怎样测试?我们可以发布到本地maven仓库,在build.gradle文件中添加如下内容:1
2
3
4
5
6
7
8
9
10group='io.github.yuweiguocn.plugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('../repo'))
}
}
}
其中group指定包名,version指定版本号,类库名默认取module名,sync之后会在tasks中出现如下task,双击uploadArchives任务就发布到本地maven仓库了
接下来我们可以app module的build.gradle添加构建脚本为本地仓库并添加依赖:1
2
3
4
5
6
7
8
9
10
11buildscript {
repositories {
maven {
url uri('../repo')
}
}
dependencies {
classpath 'io.github.yuweiguocn.plugin:buildtest:1.0.0'
}
}
apply plugin: 'io.github.yuweiguocn.myplugin'
sync之后,会在tasks中发现testTask任务,双击执行任务打印如下信息:1
Hello gradle plugin
发布到jcenter仓库
可以参考上传类库到jcenter这篇文章,这里就不再赘述了。