一、定义插件
1.File-New Module-Android Library,取名plugin1
2.删除plugin1目录下所有文件,只保留build.gradle
编写build.gradle,代码如下:
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()//gradle sdk
compile localGroovy()//groovy sdk
compile 'com.android.tools.build:gradle:3.2.1'
}
repositories {
mavenCentral()
}
3.编写插件代码:
<1>在plugin目录下新建Directory,命名src,在src下新建Directory命名main,在main下新建Directory命名groovy。此后groovy目录新建的groovy后缀文件将被默认为插件源码。
<2>在groovy目录新建package,命名com.zhp.plugin
<3>在包com.zhp.plugin下新建file,后缀.groovy,命名Plugin1,代码如下:
package com.zhp.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import com.android.build.gradle.AppExtension
class Plugin1 implements Plugin<Project> {
void apply(Project project) {
//在控制台打印一段文字,grrovy语法
println "this is first gradle plugins"
//在控制台打印一段文字,java语法。groovy是基于java扩展并完全兼容java语言。
System.out.println("this is first gradle plugins too");
}
}
关于groovy如何基于java语言扩展并且和java无缝混合开发,请参考文档
<4>在src/main目录下新建Directory命名为resources,在resources目录下新建Directory命名为META-INF,在META-INF目录下新建Directory命名为gradle-plugins,最后在gradle-plugins目录下新建file,命名为com.zhp.plugin.properties,文件内容:
implementation-class=com.zhp.plugin.Plugin1//指向src/main/groovy/com/zhp/plugin/Plugin1这个插件实现
二、发布插件
在plugin目录下的build.gradle文件加入如下代码:
group='com.zhp.plugin'
version='1.0.0'
uploadArchives {
repositories {
mavenDeployer {
//提交到远程服务器:
// repository(url: "http://www.xxx.com/repos") {
// authentication(userName: "admin", password: "admin")
// }
//提交到本地磁盘
repository(url: uri('D:/maven_local'))
}
}
}
点击AS右侧Gradle按钮,展示了当前工程包含的所有gradle插件,其中就有刚才新建的plugin1,如下图所示:
点击uploadArchives,运行结果如下:
this is first gradle plugins
this is first gradle plugins too
:plugin1:compileJava NO-SOURCE
:plugin1:compileGroovy UP-TO-DATE
:plugin1:processResources UP-TO-DATE
:plugin1:classes UP-TO-DATE
:plugin1:jar UP-TO-DATE
:plugin1:uploadArchives
BUILD SUCCESSFUL in 1s
4 actionable tasks: 1 executed, 3 up-to-date
9:43:46: Task execution finished 'uploadArchives'.
查看本地磁盘,在d盘生成了maven_local,以后其他工程可以使用这个plugin插件。
三、使用插件
<1>在build.gradle的文件开始声明要应用的插件名称
apply plugin: 'com.zhp.plugin'//:后面的是插件的group名称。
<2>声明插件所在的地址,比如我们声明的插件是发布在本地磁盘d盘;同时声明对指定插件的依赖。
buildscript {
repositories {
mavenCentral()
maven {
url uri('D:/maven_local')
}
}
dependencies {
classpath 'com.zhp.plugin:plugin1:1.0.0'//group:name:version
}
}
四、案例
<1>功能:通过javaassist为每一个构造方法增加一行日志,关于javaassist的使用可以参考
<2>代码地址
五、参考
[https://github.com/zhhp1121/GradlePlugin]
[https://blog.csdn.net/rambomatrix/article/details/78602614]
[http://www.blogjava.net/johnnyjian/archive/2011/04/26/349042.html]
[https://www.imooc.com/article/44169]