构建自定义插件
在buildSrc中创建自定义Gradle插件只能在当前项目中使用。因此对于具有普遍性的插件来说,通常是建立一个独立的Module来创建自定义Gradle插件。
创建Android Library Module
首先在主项目的工程中,创建一个普通的Android Library Module,并删除其默认创建的目录,修改为Gradle插件所需要的目录,即在buildSrc目录中的所有目录,如图4.45所示。
图4.45 独立插件
创建的文件与在buildSrc目录中创建的文件是一模一样的,只是这里在一个自定义的Module中创建插件而不是在默认的buildSrc目录中创建。
部署到本地Repo
因为是通过自定义Module来创建插件的,所以不能让Gradle自动完成插件的加载,需要手动进行部署,所以需要在插件的build.gradle脚本中增加Maven的配置,脚本如下所示。
- apply plugin: 'groovy'
- apply plugin: 'maven'
- dependencies {
- compile gradleApi()
- compile localGroovy()
- }
- repositories {
- mavenCentral()
- }
- group='com.xys.plugin'
- version='2.0.0'
- uploadArchives {
- repositories {
- mavenDeployer {
- repository(url: uri('../repo'))
- }
- }
- }
相比buildSrc中的build.gradle脚本,这里增加了Maven的支持和uploadArchives,这个Task的作用就是将该Module部署到本地的repo目录下。在终端中执行gradle uploadArchives指令,将插件部署到repo目录下,如图4.46所示。
图4.46 将插件部署到repo目录下
当插件部署到本地后,就可以在主项目中引用插件了。
当插件正式发布后,可以把插件像其他module一样发布到中央库。这样就可以像使用中央库的库项目一样来使用插件了。
这里需要讲一下Maven仓库中的.pom文件,这个文件是记录该aar库的依赖文件,如果引用的aar还依赖其他库,那么这里就会有记载。gradle也会根据这个文件来自动拉取这些依赖,而不用开发者担心库所依赖的库。
引用插件
在buildSrc中,系统自动帮开发者自定义的插件提供了引用支持,但在自定义Module的插件中,开发者就需要自己添加自定义插件的引用支持了。在主项目的build.gradle文件中,添加如下所示的脚本。
- apply plugin: 'com.xys.plugin'
- buildscript {
- repositories {
- maven {
- url uri('../repo')
- }
- }
- dependencies {
- classpath 'com.xys.plugin:plugin:2.0.0'
- }
- }
其中,classpath指定的路径就是类似compile引用的方式,即插件名为group:version。
配置完毕后,就可以在主项目中使用自定义的插件了。在终端执行gradle testPlugin指令,结果如下所示。
- :app:testPlugin
- Hello gradle plugin
如果不使用本地Maven Repo部署,也可以拿到生成的插件jar文件,复制到libs目录下,通过如下所示的代码进行引用。
- classpath fileTree(dir: 'libs', include: '\*.jar') // 使用jar
