如果你对本文感兴趣,也许你对我的公众号也会有兴趣,可扫下方二维码或搜索公众微信号:mxszgg
本文基于 Android Gradle plugin 3.0.1
前言
在前文中笔者阐述道 task 就相当于函数,那么这篇文章所要介绍的 plugin 就相当于函数库了。毕竟在 build.gradle
文件中撰写大量的 task 是肯定不好维护的,所以可以将 tasks 做成 plugin 然后直接 apply 就好了。
就像在
app/build.gradle
中apply plugin: 'com.android.application'
这样 appProject 就可以使用该 plugin 中的 task 了。
准备工作
- 新建一个 Android 项目。
- 新建一个 java library module,该 module 必须命名为
buildSrc
。 - 将
src/main/java
改成src/main/groovy
基本实现
-
新建一个 xxxPlugin.groovy 并实现 Plugin 接口,例如:
import org.gradle.api.Plugin import org.gradle.api.Project class TestPlugin implements Plugin<Project> { @Override void apply(Project project) { project.task('pluginTest') { doLast { println 'Hello World' } } } }
可以看到,上述 plugin 仅是在 apply()
方法内部创建了一个名为 pluginTest
的 task。
由于 Kotlin/Java 与 groovy 的兼容,所以并非一定要创建 groovy 文件,也可以是 xxxPlugin.java/xxxPlugin.kotlin。
- 既然 plugin 已经就这么简单的实现了,那么如何应用到实际项目中呢?在
build.gradle
文件中添加如下信息:
apply plugin: TestPlugin
至此之后,不妨在命令行调用 pluginTest
task 看看是否有效果——
./gradlew pluginTest
> Task :app:testPlugin
Hello from the TestPlugin
扩展
随着项目的急速发展,有朝一日发现有时候不想输出 Hello World
而是希望这个 pluginTest
task 可以根据开发者的需求进行配置。
-
创建一个 xxxExtension.groovy 文件(当然,也可以用 Java/Kotlin 来写),实际上就是和 JavaBean 差不多的类,类似如下:
class TestPluginExtension { String message = 'Hello World' }
-
在 Plugin 类中获取闭包信息,并输出&#