本文内容包括:
之前写了一个Android中的AOP框架Cooker.这里总结一下里面用到的两块小知识:
1)自定义 Gradle plugin2)发布自己的jar到 maven仓库
项目中引入自定义Gradle plugin一般有三种方法:
下面介绍的是第3种方式.
先起名叫cooker-plugin吧, 我们将会用这个library写Gradle plugin
把这个cooker-plugin中默认产生的文件都删除, 然后按照下面结构新建文件
1.因为我们用Groovy写的插件, 插件代码放在 src/main/groovy下
2.在src/main/resources/META-INF/gradle-plugins 里声明plugin信息比如:新建cooker-plugin.properties
文件,内容如下
implementation-class=com.helen.plugin.CookerPlugin
> 这里:
> "cooker-plugin" 是插件名称;
> "com.helen.plugin.CookerPlugin" 是对应的插件实现类
3.build.gradle 声明用groovy开发
```java
apply plugin: 'groovy'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
实现plugin,其实就是需要继承实现Plugin<Project> 的接口
package com.helen.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
public class CookerPlugin implements Plugin<Project> {
void apply(Project project) {
//这里实现plugin的逻辑
//巴拉巴拉巴拉
println "hello, this is cooker plugin!"
//cooker-plugin
//比如这里加一个简单的task
project.task('cooker-test-task') << {
println "hello, this is cooker test task!"
}
}
}
在cooker-plugin项目中, build一下.就能在build/libs下生成对应的plugin插件了
这个插件就能使用了. 可以发布在本地仓库或者Maven仓库.
下面介绍一下利用mavenDeployer发布在本地仓库.
修改cooker-plugin的build.gradle, 修改后如下:
apply plugin: 'groovy'
//添加maven plugin, 用于发布我们的jar
apply plugin: 'maven'
dependencies {
compile gradleApi()
compile localGroovy()
}
repositories {
mavenCentral()
}
//设置maven deployer
uploadArchives {
repositories {
mavenDeployer {
//设置插件的GAV参数
pom.groupId = 'com.helen.plugin'
pom.artifactId = 'cooker-plugin'
pom.version = 1.0
//文件发布到下面目录
repository(url: uri('../release'))
}
}
}
运行uploadArchives. 就能在设置的仓库路径中生成 cooker-plugin了
apply plugin: 'com.android.application'
//使用cooker-plugin
apply plugin: 'cooker-plugin'
buildscript {
repositories {
maven {
//cooker-plugin 所在的仓库
//这里是发布在本地文件夹了
url uri('../release')
}
}
dependencies {
//引入cooker-plugin
classpath 'com.helen.plugin:cooker-plugin:1.0'
}
}
每次clean/build时, 在Gradle Console可以看到我们的loghello, this is cooker plugin!
Configuration on demand is an incubating feature.
hello, this is cooker plugin!
Incremental java compilation is an incubating feature.
:app:preBuild UP-TO-DATE
前面demo中, 我们新建了一个task: cooker-test-task
, 他简单输出一句log.下面测试运行一下这个task.在控制台输入 gradle cooker-test-task
运行结果如下
Demo地址-Github到此为止, 自定义Gradle plugin就介绍完了.结合AndroidStudio, 自定义Gradle plugin可以完成很多功能.
比如cooker的plugin完成了:1)添加编译依赖2)进行Aspecj编译3)自动生成混淆配置
前面我们讲了如何自定义gradle插件并且打包出去,可能步骤比较多。有时候,你可能并不需要打包出去,只是在这一个项目中使用而已,那么你无需打包这个过程。
只是针对当前项目开发的Gradle插件相对较简单。步骤之前所提到的很类似,只是有几点需要注意:
1.新建的Module名称必须为BuildSrc
2.无需resources目录
目录结构如下所示:
其中,build.gradle内容为:
apply plugin: 'groovy'
dependencies {
compile gradleApi()//gradle sdk
compile localGroovy()//groovy sdk
}
repositories {
jcenter()
}
SecondPlugin.groovy内容为:
SecondPlugin.groovy内容为:
package com.hc.second
import org.gradle.api.Plugin
import org.gradle.api.Project
public class SecondPlugin implements Plugin<Project> {
void apply(Project project) {
System.out.println("========================");
System.out.println("这是第二个插件!");
System.out.println("========================");
}
在app这个Module中如何使用呢?直接在app的build.gradle下加入
apply plugin: com.hc.second.SecondPlugin
clean一下,再make project,messages窗口信息如下