Gradle 是采用Groovy语言开发的,Groovy 是 Apache 旗下的一门基于 JVM 平台的动态/敏捷编程语言,当运行Groovy脚本时它会先被编译成Java类字节码,然后通过JVM虚拟机执行这个Java字节码类。 在语言的设计上它吸纳了 Python、Ruby 和 Smalltalk 语言的优秀特性,语法非常简练和优美,开发效率也非常高。并且,Groovy 可以与 Java 语言无缝对接,在写 Groovy 的时候如果忘记了语法可以直接按Java的语法继续写,也可以在 Java 中调用 Groovy 脚本,都可以很好的工作,这有效的降低了 Java 开发者学习 Groovy 的成本。 这里不多介绍语法,具体的Groovy的学习可以参考链接链接一,链接二。
编写Gradle插件主要有如下三种方式:
1.build.gradle脚本中直接使用。这种方式就是直接在Android Studio app moudle的build.gradle 中进行插件的编写,优点就是不用再上传插件到maven或者其它地方,项目就可以直接使用;缺点也是很明显,就是只能在自己的项目中使用,不能复用,这个不是我们今天要说的。
2.buildSrc中使用。这种方式需要在项目中新建一个model命名为buildSrc,这个目录就用来存放自定义插件。然后在src/main中建立两个目录,一个就是存放代码的groovy目录,一个是存放自定义插件名称的resources目录。这种定义方式也是只能在我们项目中进行使用,不好复用。
3.独立Module中使用。这种方式就是完全独立开发一个Module,可以随便用。 本篇文章将介绍这种方式。
在用AS创建新的项目HelloPlugin后,增加新的Module,命名为plugin,类型选择为java Library。然后在模块的main文件夹下建立子文件夹resources\META-INF\gradle-plugins。随后建立文件com.test.plugin.properties。此时的文件路径如下

因为插件是依赖GroovySDK的,另外我们新建个task用来上传整个工程的jar包。更新plugin module的build.gradle如下:

然后在右侧的gradle窗口可以看见如下task:

然后在项目的根build.gradle 中添加本地代码仓库

这个目录和上面我们在plugin module中上传的目录有点不一致,然后更新我们的HelloWorldPlugin文件。

可以看到我们上面的代码几乎没有做什么,仅仅只是在project中创建了一个名为hello的task,TaskType是DefaultTask,不过也可以看出来,我们去apply一个插件,事实上是把我们编译脚本的project对象作为一个参数传给了插件 做完上面这一步,事实上Gradle并不能找到我们的插件,这时候就需要META-INF/gradle-plugins这个目录下的properties文件了,我们已经建好了,然后更改内容如下:
implementation-class=com.test.plugin.HelloPlugin
我们的插件就已经完成了,虽然这个插件没有什么功能,接下来,我们使用运行uploadArchives这个task把我们的插件打包成jar,上传到我们先前的那个flatDir创建的仓库。接下来可以实测一下我们的插件是否有问题。首先在整个工程的build.gradle下添加插件的使用。

接下来就开始使用这个插件,在app的build.gradle中添加对插件的引用。sync成功后就可以在app/other看到对应的task,如图所示:

至此,我们的helloplugin 就顺利完成了。
参考链接
网友评论