}
}
}
}
第四行通过 project.extensions.create(String name, Class<T> type, Object... constructionArguments)
来获取 testExtension
闭包中的内容并通过反射将闭包的内容转换成一个 TestPluginExtension 对象。
- 在
build.gradle
中添加一个testExtension
闭包:
testExtension {
message ‘Hello Gradle’
}
- 在命令行键入以下信息:
./gradlew pluginTest
将会看到输出结果——
> Task :app:pluginTest
Hello Gradle
项目化
到目前为止谈及到的东西都还是一个普通的、不可以发布到仓库的插件,如果想要将插件发布出去供他人和自己在项目中 apply,需要进行以下步骤将插件变成一个 Project——
- 更改
build.gradle
文件内容:
apply plugin: ‘groovy’
dependencies {
compile gradleApi()
compile localGroovy()
}
此时可以观察到 External Libraries 中多出了 gradle-api/gradle-installation-beacon/groovy 库。其中,gradle 的版本是基于项目下 gradle wrapper 中配置的版本——
-
创建
src/main/resources/META-INF/gradle-plugins/插件名.properties
,例如src/main/resources/META-INF/gradle-plugins/com.sample.test.properties
,然后将 properities 文件内容改为implementation-class=Plugin 路径
,例如implementation-class=com.sample.test.TestPlugin
。 -
在
build.gradle
文件中通过apply plugin: '插件名'
引入插件 ——apply plugin: 'com.sample.test'
。 -
在命令行键入以下信息:
./gradlew pluginTest
将会看到输出结果——
> Task :app:pluginTest
Hello Gradle
当然,以上仅是告诉各位读者如何将 plugin 项目化,并未涉及到如何将 plugin 提交到仓库中,关于 jcenter 仓库提交方式可借鉴手摸手教你如何把项目提交到 jcenter,其他仓库提交方式读者可自行搜索。
实战
Android 打包过程中,一个 task 接着一个 task 的执行,每个 task 都会执行一段特定的事情(例如第一篇文章中提到的几个 task),所以在 Gradle 插件的开发中,如果是针对打包流程的更改,实际上大部分都是 hook 某一个 task 来达到目的——例如我司的 mess 通过 hook transformClass