1 首先建立一个android library工程
2 然后修改build文件,修改如下,
apply plugin:'groovy'
apply plugin :'maven'
dependencies {
implementation gradleApi()
implementation localGroovy()
}
uploadArchives{
repositories {
mavenDeployer{
//当前插件打包的路径
repository(url:"file:///User/lu/lib/")
}
}
}
// 外部引用的时候对应的 classpath 'com.lu.glugin:mylibrary:1.0.0'
group = 'com.lu.glugin'
version = '1.0.0'
3 编码
在main目录下,创建一个groovy目录,然后在该目录下创建task,我们知道gradle都基于task的。创建一个类DemoTask继承DefaultTask后,并且更改后缀名为groovy,内部属性group表示在哪个任务组下面,如果没有设置,则在other下。
class DemoTask extends DefaultTask {
// 任务名
static final String NAME = "demoTask"
DemoTask(){
group = "demo"
}
@TaskAction
def start(){
println 'task is run...............'
}
}
DemoPlugin继承Plugin,gradle会调用apply方法
class DemoPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
println "DemoPlugin apply"
project.tasks.create(DemoTask.NAME,DemoTask)
}
}
4 创建META-INF
在main文件目录下创建resources目录,然后创建META-INF目录,在目录下创建gradle-plugins目录,在目录下创建com.mylibrary.properties文
文件里面添加如下属性,表示gradle要调用我哪个类
implementation-class=com.lu.gradle.DemoPlugin
目录结构如图

1.png
5 打包 。所有准备好了后,开始打包。打包也很简单
点击gradle里面的uploadArchives

2.png
看到如图编译成功。则表示打包成功

3.png
在对应的目录,就可以看到打包的结果

4.png
6引用
在工程build文件里面添加,因为我们没有上传到jcenter,在本地,所以引用也引用本地的。如果上传到jcenter审核通过了则就不需要本地引用
buildscript {
repositories {
google()
jcenter()
maven{
url uri('c:/User/lu/lib/')
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.1'
classpath 'com.lu.glugin:mylibrary:1.0.0'
}
}
在app的build文件里面添加依赖
//后面就是前面那个com.mylibrary.properties的文件名
apply plugin:'com.mylibrary'
7 在gradle窗口就可以看到我们插件里面的task了

5.png
8 执行,点击task就可以执行我们的代码

6.png