构建默认插件
在Android Studio中创建一个标准的Android项目,整个目录结构如下所示。
- ├── app
- │ ├── build.gradle
- │ ├── libs
- │ └── src
- │ ├── androidTest
- │ │ └── java
- │ ├── main
- │ │ ├── AndroidManifest.xml
- │ │ ├── java
- │ │ └── res
- │ └── test
- ├── build.gradle
- ├── buildSrc
- │ ├── build.gradle ---1
- │ └── src
- │ └── main
- │ ├── groovy ---2
- │ └── resources ---3
- ├── gradle
- │ └── wrapper
- │ ├── gradle-wrapper.jar
- │ └── gradle-wrapper.properties
- ├── gradle.properties
- ├── gradlew
- ├── gradlew.bat
- ├── local.properties
- └── settings.gradle
其中,除了buildSrc目录以外都是标准的Android目录。而buildSrc就是Gradle提供的在项目中配置自定义插件的默认目录。开发Gradle要创建的目录,也就是RootProject/src/main/groovy和RootProject/src/main/resources两个目录。
在配置完成后,如果配置正确,则对应的文件夹将被IDE识别成为对应类别的文件夹。
创建buildSrc/build.gradle—-1
首先,配置buildSrc目录下的build.gradle文件。这个配置比较固定,脚本如下所示。
- apply plugin: 'groovy'
- dependencies {
- compile gradleApi()
- compile localGroovy()
- }
创建Groovy脚本—-2
接下来,在groovy目录下创建一个Groovy类(与Java类似可以带包名,但Groovy类以.grovvy结尾),如图4.42所示。
图4.42 设置主Groovy类
在脚本中通过实现Gradle的Plugin接口,实现apply方法即可,脚本如下所示。
- package com.xys
- import org.gradle.api.Plugin
- import org.gradle.api.Project
- public class MainPluginForBuildSrc implements Plugin<Project> {
- @Override
- void apply(Project project) {
- project.task('testPlugin') << {
- println "Hello gradle plugin in src"
- }
- }
- }
在脚本的apply方法中,笔者简单实现了一个Task命名为testPlugin,执行该Task会输出一行日志。
创建Groovy脚本的Extension
所谓Groovy脚本的Extension,实际上就是类似于Gradle的配置信息。在主项目使用自定义的Gradle插件时,可以在主项目的build.gradle脚本中通过Extension传递一些配置、参数。
创建一个Extension,只需要创建一个Groovy类即可,如图4.43所示。
图4.43 创建Extension
笔者命名了一个叫MyExtension的Groovy类,其脚本如下所示。
- package com.xys;
- class MyExtension {
- String message
- }
MyExtension代码非常简单,就是定义了要配置的参数变量。后面笔者将具体演示如何使用。
在Groovy脚本中使用Extension
在创建了Extension之后,需要修改之前创建的Groovy类来加载Extension,修改后的脚本如下所示。
- package com.xys
- import org.gradle.api.Plugin
- import org.gradle.api.Project
- public class MainPluginForBuildSrc implements Plugin<Project> {
- @Override
- void apply(Project project) {
- project.extensions.create('pluginsrc', MyExtension)
- project.task('testPlugin') << {
- println project.pluginsrc.message
- }
- }
- }
通过project.extensions.create方法,将一个Extension配置给Gradle即可。
创建resources—-3
resources目录是标识整个插件的目录,其目录下的结构如下所示。
- └── resources
- └── META-INF
- └── gradle-plugins
该目录结构与buildSrc一样,是Gradle插件的默认目录,不能有任何修改。创建好这些目录后,在gradle-plugins目录下创建——插件名.properties文件,如图4.44所示。
图4.44 插件properties文件
这里笔者命名为pluginsrc.properties,在该文件中代码如下所示。
- implementation-class=com.xys.MainPluginForBuildSrc
通过上面的代码指定最开始创建的Groovy类即可。
在主项目中使用插件
在主项目的build.gradle文件中,通过apply指令加载自定义的插件,脚本如下所示。
- apply plugin: 'pluginsrc'
其中plugin的名字就是前面创建pluginsrc.properties中的名字——pluginsrc,通过这种方式加载了自定义的插件。
配置Extension
在主项目的build.gradle文件中,通过如下所示的代码加载Extension。
- pluginsrc{
- message = 'hello gradle plugin'
- }
同样领域名为插件名,配置的参数就是在Extension中定义的参数名。
配置完毕后,就可以在主项目中使用自定义的插件了。在终端执行gradle testPlugin指令,结果如下所示。
- :app:testPlugin
- hello gradle plugin
