Gradle Builds Everything —— 从 0 开始作插件

今天开始,咱们实战下 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

  1. 写构建脚本
  2. 使用 buildSrc 项目(即业务工程内的插件工程)
  3. 独立工程

咱们使用第三种方式建立。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 在你建立插件工程的时候应该能看见

插件 GAV

在这种状况下,咱们的 classpath 就设置成com.gemini.build:android-gradle-plugin:1.0-SNAPSHOT

那么,Android 工程中的设置就像这样:

Android Studio Project

Sync 下,发现咱们添加的 classpath 应该没有问题了,而后咱们须要在 app 项目中应用插件

应用插件

在 app 模块下的 build.gradle 中,使用刚刚咱们在 META-INF 中设定的值 apply plugin:'com.gemini.application'

App 模块应用插件

这时候咱们执行任意任务,就能获得结果了:

查看效果

调试插件

调试插件蛮多人很好奇,其实调试很简单,可是不少人问,因此我在这里也顺便说一下,调试的方式分两块,插件工程的设置和 Android 工程的设置。

插件工程设置

咱们须要在 Run Configuration 中增长一个 Debug 的设置就好,像这样:

Debug

设置完了以后,执行 Android 工程下的 gradle 命令:

./gradlew clean assembleDebug -Dorg.gradle.debug=true --no-daemon

Gradle 开启 Daemon 后会暂停

10.png

这时候咱们在插件工程里设置好断点,点 Debug 按钮,代码执行到的时候,就会在该行断点停下来:

Debug

欢迎关注个人公众号「TalkWithMobile」
公众号

相关文章
相关标签/搜索