Android开发Gradle构建Android开发经验谈

Gradle Plugin 的创建的两种方式

2018-08-02  本文已影响13人  未见哥哥

# Gradle Plugin

思维导图

插件是一系列 Task 的组合。

## 插件可以用来干嘛?

## 插件的类型

是一个构建脚本,只是将构建脚本的一部分抽取到单独的xxx.gradle 文件中,然后再通过 apply from:xxx.gradle 的方式将其引入

binary插件是一个实现 Plugin 接口的类,通过程序化的方式去编写插件的构建逻辑。而binary插件的类可以写在项目的buildSrc下。

## 插件的使用

为了将构建脚本的逻辑封装到插件中,Gradle 需要做以下两件事:处理插件应用插件到目标中

Gradle 会自动找到插件所在的位置,并且将其插件添加到script calsspath中,一旦插件被Gradle识别解析,那么就可以在构建脚本中使用这个的插件了。

一旦插件被应用到执行的构建脚本中,那么插件对应的 Plugin.apply(T target)就会调用。

## 脚本插件

定义一个 plugin.gradle,脚本如下,主要是创建一个名字为 PluginTask 的任务,为依赖 plugin.gradle 的 project 添加了一个 pluginTask 。

project.task("PluginTask") {
    doLast {
        println "脚本插件..."
    }
}

在指定的 build.gradle 中依赖 plugin.gradle

apply from:插件文件的名称应用时是相对当前 project 所在的文件相对路径。

apply from: 'plugin.gradle'

在应用该插件的module中执行 PluginTask 如果能正确执行 doLast 的内容,那么就表示应用成功了。

./gradlew PluginTask

## Binary 插件

将插件定义在 buildSrc 中,这里的 buildSrc 就是当前工程下的一个 module ,Gradle 规定当一个module被命名为 buildSrc 时就会被当成插件去处理。

### 创建一个最简单的插件吧

Plugin<T> 是一个泛型接口,在定义插件是应该将这个泛型填为 Project 即可。

class PluginTest implements Plugin<Project> {

    @Override
    void apply(Project project) {

        project.task("MyTask") {
            doLast {
                println "MyTask doLast invoke..."
            }
        }
    }
}
//在 app 下的 build.gradle 引用这个插件
apply plugin: PluginTest

app module 引用了这个 PluginTest 插件,因此 app 这个 project 就有 MyTask 这个任务了,我们来执行一下验证一下效果吧。

./gradlew :app:MyTask      

### 资源 ID 标识插件

定义好插件后,我们是通过以下方式去引用这个插件的。

//在 app 下的 build.gradle 引用这个插件
apply plugin: PluginTest

看看下面的我们工程引用 Android 插件的方式就跟我们上面的不一样哦。

apply plugin: 'com.android.application'

上面这种方式是给插件定义了一个 Plugin ID 。当需要外界需要引用时就不需要引用插件的类名了,其实就相当于起了个别名吧。

下面来看一下如何来声明插件 ID 的:

因为插件类的的包名为 com.example.buildsrc ,所以该文件明就是 包名.properties

buildSrc结构

文件内容的 implementation-class 对应的值为插件类的全限名称

implementation-class=com.example.buildsrc.PluginTest
apply plugin:'com.example.buildsrc'

好了,就这样,我们也可以定义插件ID的方式像引用 Android 插件一样来引用我们自己的插件咯。

# 参考

上一篇 下一篇

猜你喜欢

热点阅读