目前的开发工具主要是在Android Studio上,对这个工具真的是又恨又爱,只能收希望它越来越好。
这几天,一直在看Gradle插件的相关的东西,希望将自己的这些学习成长的经历记录下来。由易到难,开发一个自己的插件。

准备工作

  1. Android Studio(建议3.0+)
  2. gradle 4.0+

我们需要开发一个能打印hello world的gradle插件,看到hello world,是不是觉得凉凉了,哈哈,一个好的程序员都是从hello world开始的,千里之行始于足下。
我们希望希望开发一个简单的插件,就是打印一行:hello world。

先解释下,所以的gradle的插件,其实就是一个可以挂载在我们工作空间的一个工具,但我们运行我们的gradle脚本时,我们就可以运行我们的插件,这个插件是为我们做一些人工也可以替代的工作,甚至是多个task任务。

项目结构

我们先在我们的工作控件新建一个Android library项目plugin,仅保留src下的main其他的都删掉吧.

20188122298

src/main下新建一个groovy和resources的文件夹。
其中groovy的文件用来存源码,resources存放静态资源和配置,build.gradle是我们的build环境。
先来看下build.gradle吧。

1
2
3
4
5
6
7
8
9
10
11
12
apply plugin: 'groovy'

dependencies {
//gradle sdk
compile gradleApi()
//groovy sdk
compile localGroovy()
}

repositories {
mavenCentral()
}


一个插件的主要工作其实是在src文件下,所以我们需要在src/main/groovy下新建一个文件包名cc.cyning.plugin,在这个包下新建一个MyPlugin.groovy文件。
MyPlugin.groovy文件:

1
2
3
4
5
6
7
8
9
10
11
import org.gradle.api.Plugin
import org.gradle.api.Project

public class MyPlugin implements Plugin<Project> {

void apply(Project project) {
System.out.println("========================");
System.out.println("hello world");
System.out.println("========================");
}
}

在groovy下不是应该用groovy语言么?
其实用java也是ok的,对于不会groovy的同学用java肯定是可以的。

插件实现了org.gradle.api.Plugin接口,我们需要实现apply方法。

插件的工作完成,可是怎么标识MyPlugin文件是插件的入口文件呢?

src/main/resources下我们需要定义一个properties文件:

resources

  └── META-INF

     └── gradle-plugins

        └── cyning.properties

cyning.property:

1
implementation-class=cc.cyning.plugin.MyPlugin

这样就是一个完整的插件项目的结构,groovy是我们的实现代码,·、resources/META-INF配置插件的实现类。

插件使用

maven 本地仓库配置

为了插件的使用,我们需要引入maven本地仓库,怎么上传远程仓库,可以参考我的另外一篇拙作:开源自己的项目到JCenter,不过为了插架开发没必要这么麻烦。

若是你了解可以直接跳过本小节内容。

我们需要在build.gradle下配置上传到本地的maven配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apply plugin: 'groovy'
apply plugin: 'maven'

......

group='cc.cyning.plugin'
version='1.0.0'

uploadArchives {
repositories {
mavenDeployer {
//提交到远程服务器:
// repository(url: "http://www.xxx.com/repos") {
// authentication(userName: "admin", password: "admin")
// }
//本地的Maven地址设置为在项目的maven文件下(提前新建mave这个文件夹)
repository(url: "file://${rootProject.projectDir}/maven")

}
}
}

使用./gradlew :plugin:uploadArchives即可在项目下看到maven文件下产生了文件:

20188123242

而我们的项目怎么用呢?

使用插件

上一步,我们已经生成maven插件,为了能让插件运行,我们需要导入这个gradle插件。
app的build.gradle配置:

{
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
buildscript {
repositories {
maven {//本地Maven仓库地址 切记:三个斜杠,
url "file:///${rootProject.projectDir}/maven/"

}
}
dependencies {
//格式为-->group:module:version
classpath 'cc.cyning.plugin:plugin:1.0.0'
}
}

//cyning为resources/META-INF/gradle-plugins
//下的properties文件名称
apply plugin: 'cyning'

运行我们的插件:

1
2
3
4
5
6
>./gradlew :app:clean            

> Configure project :app
========================
hello world
========================

小结

我们这节的目的就是能熟悉插件的卡法流程,尤其是开发插件和使用的各种配置,要对应上,properties的配置,以及gradle使用。