构建自定义插件

在buildSrc中创建自定义Gradle插件只能在当前项目中使用。因此对于具有普遍性的插件来说,通常是建立一个独立的Module来创建自定义Gradle插件。

创建Android Library Module

首先在主项目的工程中,创建一个普通的Android Library Module,并删除其默认创建的目录,修改为Gradle插件所需要的目录,即在buildSrc目录中的所有目录,如图4.45所示。

构建自定义插件 - 图1 图4.45 独立插件

创建的文件与在buildSrc目录中创建的文件是一模一样的,只是这里在一个自定义的Module中创建插件而不是在默认的buildSrc目录中创建。

部署到本地Repo

因为是通过自定义Module来创建插件的,所以不能让Gradle自动完成插件的加载,需要手动进行部署,所以需要在插件的build.gradle脚本中增加Maven的配置,脚本如下所示。

  1. apply plugin: 'groovy'
  2. apply plugin: 'maven'
  3.  
  4. dependencies {
  5. compile gradleApi()
  6. compile localGroovy()
  7. }
  8.  
  9. repositories {
  10. mavenCentral()
  11. }
  12.  
  13. group='com.xys.plugin'
  14. version='2.0.0'
  15. uploadArchives {
  16. repositories {
  17. mavenDeployer {
  18. repository(url: uri('../repo'))
  19. }
  20. }
  21. }

相比buildSrc中的build.gradle脚本,这里增加了Maven的支持和uploadArchives,这个Task的作用就是将该Module部署到本地的repo目录下。在终端中执行gradle uploadArchives指令,将插件部署到repo目录下,如图4.46所示。

构建自定义插件 - 图2 图4.46 将插件部署到repo目录下

当插件部署到本地后,就可以在主项目中引用插件了。

当插件正式发布后,可以把插件像其他module一样发布到中央库。这样就可以像使用中央库的库项目一样来使用插件了。

构建自定义插件 - 图3这里需要讲一下Maven仓库中的.pom文件,这个文件是记录该aar库的依赖文件,如果引用的aar还依赖其他库,那么这里就会有记载。gradle也会根据这个文件来自动拉取这些依赖,而不用开发者担心库所依赖的库。

引用插件

在buildSrc中,系统自动帮开发者自定义的插件提供了引用支持,但在自定义Module的插件中,开发者就需要自己添加自定义插件的引用支持了。在主项目的build.gradle文件中,添加如下所示的脚本。

  1. apply plugin: 'com.xys.plugin'
  2.  
  3. buildscript {
  4. repositories {
  5. maven {
  6. url uri('../repo')
  7. }
  8. }
  9. dependencies {
  10. classpath 'com.xys.plugin:plugin:2.0.0'
  11. }
  12. }

其中,classpath指定的路径就是类似compile引用的方式,即插件名为group:version。

配置完毕后,就可以在主项目中使用自定义的插件了。在终端执行gradle testPlugin指令,结果如下所示。

  1. :app:testPlugin
  2. Hello gradle plugin

如果不使用本地Maven Repo部署,也可以拿到生成的插件jar文件,复制到libs目录下,通过如下所示的代码进行引用。

  1. classpath fileTree(dir: 'libs', include: '\*.jar') // 使用jar