自定义插件概述
自定义Gradle插件主要有三种方式,分别是
- build.gradle中编写、
- buildSrc工程项目中编写、
- 独立项目中编写 Groovy、Java、Kotlin都可以作为实现插件的语言,在本文的示例中,使用Groovy作为实现语言。
方法一:build.gradle中编写
在实际工作中我们很少会在build.gradle中编写自定义插件,
//使用插件
apply plugin: CustomPlugin
//自定义插件:实现Plugin类接口,重写apply方法
class CustomPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
project.task('CustomPluginTask') {
doLast {
println "大家好,我是一个自定义插件,在这里写下你的具体功能"
}
}
}
}
复制代码
方法二:buildSrc工程项目
我是通过AndroidStudio创建的插件工程,假设你现在已经有了一个Android项目:
- 我们需要在项目根目录里建立下图的目录结构,Gradle会自动识别来完成编译和测试
注意:上图的buildSrc下的build.gradle,也需要新建一个,目前内容为空就行
-
创建文件
a. 在groovy目录下,新建一个包(包名随意),包内新建一个文件,必须以.groovy作为后缀名(文件名随意),这里起名为PluginImpl.groovy
b. 在resources目录下新建一个META-INF文件夹,在META-INF文件夹下新建一个gradle-plugins文件夹,在gradle-plugins里创建一个.properties文件,他的文件名必须是a步骤里的那个包名
-
编写PluginImpl.groovy(注意修改成你的包名,其余照抄)
package com.demo.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class PluginImpl implements Plugin<Project> {
void apply(Project project) {
project.task('testTask') << {
println "Hello gradle plugin"
}
}
}
复制代码
4. .properties编写
只写一句话(注意修改为你的包名)
implementation-class=com.demo.plugin.PluginImpl
复制代码
- 至此自定义插件写完了,此刻目录结构为
使用这个自定义插件
// 引入buildSrc里的自定义插件
apply plugin: 'com.demo.plugin'
复制代码
方法三:独立项目中编写
无论是在build.gradle中编写自定义插件,还是buildSrc项目中编写自定义插件,都只能在自己的项目中进行使用。如果想要分享给其他人或者自己用,可以在一个独立的项目中编写插件,这个项目会生成一个包含插件类的JAR文件,有了JAR文件就很容易进行分享了。
编写插件
一、在androidstudio里新建一个module项目
新建一个android项目,在项目内部新建一个module(module名字可以随便起了,这里叫duliplugin),把这个module文件夹里的东西全部删掉,只留下build.gradle文件
二、建立目录结构
重复方法二的步骤,建立与方法二里一样的文件目录结构
三、编辑groovy文件
(其实与方法二是一样的,注意事项看方法二)
package com.demo.plugin1
import org.gradle.api.Plugin
import org.gradle.api.Project
class PluginImpl implements Plugin<Project> {
void apply(Project project) {
project.task('testPlugin') {
doLast {
println "自定义插件ccc"
}
}
}
}
复制代码
四、编辑properties文件
(其实与方法二是一样的,注意事项看方法二)
implementation-class=com.demo.plugin1.PluginImpl
复制代码
五、编写build.gradle文件
这里才是方法三的重点
apply plugin: 'groovy'
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
repositories {
mavenCentral()
}
uploadArchives {
repositories {
mavenDeployer {
//设置插件的GAV参数
pom.groupId = 'com.demo.plugin1'//你的包名
pom.artifactId = 'myPlugin'
pom.version = '1.1.9'//版本号
//文件发布到下面目录 ../是父目录
repository(url: uri('../repo'))
}
}
}
复制代码
然后看下图执行uploadArchives这个task得到jar包
注意: 有时候打开项目卡Indexing paused due to batch updated上,插件工程会报错,找不到插件,可以删除插件工程里的.iml文件> ,重启Androidstudio
使用这个独立插件打出的jar包
- 在新的项目里使用这个独立插件的jar包,复制repo到新项目的根目录统计目录(也可以是其他路径,但注意引用仓库地址时候,要相应地更改)
- 编写项目的build.gradle文件
buildscript {
...
repositories {
...
maven {//本地Maven仓库地址
url uri('../repo')
}
}
dependencies {
...
classpath 'com.demo.plugin1:myPlugin:1.1.9'
}
}
复制代码
3.编写项目的app.gradle文件
apply plugin: 'com.demo.plugin1'
复制代码
- 同步之后,发现gradle里有了这个插件里的task,执行-输出-ok