今天开始,咱们实战下 Gradle 插件开发,首先咱们的视角仍是锁定 Android Gradle Plugin 开发。html
咱们使用 Intellij IDEA 来建立一个普通的 Gradle Java 工程。建立完成后,设置好 Gradle Wrapper,工程一开始长这样:java
咱们把 Gradle Wrapper 版本改为最新的稳定版,目前是 6.0.1,后面使用-all
引入 Gradle 的源码,方便咱们查看 Gradle 的 API 实现,理解 API 接口。linux
注:Gradle Plugin 的开发不必定要使用 Groovy,这是一个误导,这里只要是 JVM 环境内的语言均可以,我我的推荐 Java 和 Kotlin,Groovy 闭包的某些特性实在是有点坑,我的不太喜欢它。
这样,工程初始化就作完了。android
由于咱们基于 Gradle 和 Android Gradle Plugin 开发,所以确定要引入这两个依赖,引入的方式很简单,以下便可:api
这样依赖也导入完成啦,接下来咱们就能够开发咱们的插件了。闭包
官方向导:https://docs.gradle.org/curre...
官方提供了三种方式写插件:app
咱们使用第三种方式建立。maven
咱们定义一个插件类,叫AppPlugin
,插件的入口在这,当咱们在 build.gradle 中 apply 咱们插件的时候,这里的回调函数就会被调用:ide
package com.gemini.build; import org.gradle.api.Plugin; import org.gradle.api.Project; public class AppPlugin implements Plugin<Project> { @Override public void apply(Project target) { System.out.println("Hello World!"); } }
咱们须要在 META-INF 中导出咱们的插件,方式很是简单,咱们建立一个文件,文件路径以下:函数
src/main/resources/META-INF/gradle-plugins/{插件ID}.properties
好比我使用 id 是 com.gemini.application
,配置完成后,以下图:
到此为止,咱们的插件工程建立完了,只要应用咱们插件的时候,项目应该就会打印一个Hello World!
,那么怎么把咱们的插件应用到咱们的项目中呢?咱们能使用的方式是把插件安装在本地 maven 仓库里,安装方式很简单,在咱们的插件工程下,先应用maven
插件,而后执行:
./gradlew clean install
便可
这样,你的插件就安装在了本地路径,mac/linux 下应该是 ~/.m2/repository/ 下。
新建一个 Android 项目,在 root project 上添加 apply plugin:'maven',而后删除clean
的任务,在buildscript
结点中,添加刚刚建立插件的 GAV,这个 GAV 在你建立插件工程的时候应该能看见
在这种状况下,咱们的 classpath 就设置成com.gemini.build:android-gradle-plugin:1.0-SNAPSHOT
那么,Android 工程中的设置就像这样:
Sync 下,发现咱们添加的 classpath 应该没有问题了,而后咱们须要在 app 项目中应用插件
在 app 模块下的 build.gradle 中,使用刚刚咱们在 META-INF 中设定的值 apply plugin:'com.gemini.application'
这时候咱们执行任意任务,就能获得结果了:
调试插件蛮多人很好奇,其实调试很简单,可是不少人问,因此我在这里也顺便说一下,调试的方式分两块,插件工程的设置和 Android 工程的设置。
咱们须要在 Run Configuration 中增长一个 Debug 的设置就好,像这样:
设置完了以后,执行 Android 工程下的 gradle 命令:
./gradlew clean assembleDebug -Dorg.gradle.debug=true --no-daemon
Gradle 开启 Daemon 后会暂停
这时候咱们在插件工程里设置好断点,点 Debug 按钮,代码执行到的时候,就会在该行断点停下来:
欢迎关注个人公众号「TalkWithMobile」