参考:https://juejin.im/entry/577bc26e165abd005530ead8
## 创建Model
1.在Android studio 中创建Model,切换到project模式;
2.删除model下的除build.gradle文件和src/main目录以外的所有文件,修改build.gradle文件,如下所示:
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
3.在main目录下创建groovy目录;
4.在groovy目录下新建包名,如com.banzhi.plugin,然后在该包下创建xxx.groovy文件,实现 org.gradle.api.Plugin 接口,内容如下:
package com.banzhi.myplugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class PluginDemo implements Plugin<Project> {
@Override
void apply(Project project) {
System.out.println("========================");
System.out.println("hello gradle plugin!");
System.out.println("========================");
}
}
5.在main目录下创建resources目录,然后在resources目录下创建META-INF目录,在META-INF目录下创建gradle-plugins目录,最后在gradle-plugins目录下创建properties文件,如:com.banzhi.myplugin.properties,而在其他build.gradle文件中使用自定义的插件时候则需写成:apply plugin: 'com.banzhi.myplugin' ,properties文件内容为:
//MyPlugin文件的全路径
implementation-class=com.banzhi.myplugin.PluginDemo
最终的目录结构为:
### 上传到maven
在model的build.gradle文件中添加:
group='com.banzhi.myplugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
repository(url: uri('D:/repo'))
}
}
}
同步下代码,然后上传:
等待执行完成后会在maven仓库中生成repo文件:
其中,repo是仓库名称,com.banzhi.myplugin是指定的group,myplugin是模块名称,1.0.0是指定的版本号version;
### 使用
在app的build.gradle中添加:
buildscript {
repositories {
maven {
url uri('D:/repo')
}
}
dependencies {
classpath 'com.banzhi.myplugin:myplugin:1.0.0'
}
}
apply plugin: 'com.banzhi.myplugin'
同步代码后在Terminal中执行 gradlew testTask,最终运行结果为:
### 另一种方式
另一种方式是针对当前项目的Gradle插件,不需上传到maven仓库,相对来说比较简单,不需要创建sources文件;
1.创建的module名称必须是buildsrc;
2.build.gradle中不需要上传maven的代码,代码为:
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
jcenter()
}
最终的文件结构为:
PluginSecond.groovy的代码:
package com.banzhi.myplugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class PluginDemo implements Plugin<Project> {
@Override
void apply(Project project) {
project.task("testTask") << {
println("========================")
println("hello gradle plugin!")
println("========================")
}
}
}
在app的build.gradle中添加
apply plugin: com.banzhi.buildsrc.PluginSecond
注意这里的引用不要加引号!rebuild代码,运行测试: