学习完毕 Gradle 的基础知识,不来点实战,感觉就像没有学习过啊。那我们就搞一搞实战,一共两个简单的操作。第一,写一个自定义 Plugin。第二,写一个自定义 Transform。

自定义 Plugin

网上一般都会说三种方法是去创建,咱们就不来那么多虚的,来个一劳永逸的吧,我们直接新建一个工程来写,这个会了,新建 Library 工程 和在 build.gradle 中的这两种方式相信你也就会了。

一、创建 Groovy 项目

注意:我用的是 IntelliJ IDEA,这个就和 Android 没有关系了。
不得不学之「 Gradle」 ⑥ 自定义 plugin - 图1

选择 Gradle 项目,勾选中 Groovy。

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图2

groupId、artifactId、version 三者确定唯一库。

groupId:是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。

artifactId:是项目的唯一的标识,实际对应项目的名称,就是项目根目录的名称。

version:指的是版本号,注意:SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的版本。
不得不学之「 Gradle」 ⑥ 自定义 plugin - 图3
最后点,点,点,finish。就ok了。

二、配置 build.gradle

因为我们这个是 Gradle 项目,我们要配置一下一些第三方依赖。

  1. plugins {
  2. id 'groovy'
  3. id 'maven'
  4. }
  5. group 'com.ssy.plugins'
  6. version '1.0.0'
  7. repositories {
  8. mavenCentral()
  9. google()
  10. jcenter()
  11. }
  12. dependencies {
  13. //Gradle Plugin 依赖
  14. implementation gradleApi()
  15. //本地发布 Plugin
  16. implementation localGroovy()
  17. //因为我们需要在android 项目中使用,所以需要android的tool build库
  18. implementation 'com.android.tools.build:gradle:3.3.2'
  19. }

三、开始自定义 plugin

首先需要说明的是一个概念,就是比如我们平时使用的 apply plugin: ‘com.android.application’这个 plugin的名字是需要我们进行配置的。

1、创建 plugin id

在 resources 文件夹下,新建一个 META-INF 文件夹,在 META-INF 里新建 gradle-plugins 文件夹,最后创建我们的 pluginName.properties,注意后缀哈。
比如我写的就是com.ssy.plugins.ssyplugin.properties。我的 plugin id 就是com.ssy.plugins.ssyplugin。最后在这个文件中写下我们自定义 plugin的路径。

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图4

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图5

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图6

2、创建自定义 plugin 文件

创建 SsyPlugin.groovy 文件,注意:我们是在groovy中写的,不是java。

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图7

package com.ssy.plugins

import org.gradle.api.Plugin
import org.gradle.api.Project
import com.android.build.gradle.AppExtension

class SsyPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {

        project.task("hello"){
            println('hellow~~~~~~~')
        }
    }
}

到此我们自定义的 plugin 就算是基本完成,简单吧,然后我们就要发布我们的 plugin。

3、发布 plugin

在 build.gradle 文件中添加下面的代码

uploadArchives {
    repositories {
        mavenDeployer {
            //设置插件的GAV参数
            pom.groupId = 'com.ssy.plugins'
            pom.version = '1.0.0'
            //文件发布到下面目录
            repository(url: uri('../repo'))
        }
    }
}

点击右边 Gradle 中的uploadArchives,就可以生成我们jar包了。
当然我们也可以在 Terminal 中运行 ./gradlew uploadArchives 一个意思。

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图8

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图9

补充小知识:../repo,就是当前project 目录的外层目录。

1、./是当前目录

2、../是父级目录

3、/是根目录

最后你就可以找到 SsyPlugin-1.0.0.jar 了。

结束。手工~~

呸,还没说怎么用收你妹的工啊,额,好好,写完回家,回~~家。

四、Android 项目使用自定义 plugin

我们新建一个 Android 项目,这个就不演示了。
首先,我们需要把 repo 项目,从复制到,我们android 项目的 父目录,也就是和我们这个项目平级。这样我们就可以使用它了。

首先我们需要在 项目的 gradle.build 中,不是 app 的 gradle.build,如图吧,这样明白一点。

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图10

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

    repositories {
    //配置我们仓库地址
        maven {
            url uri('../repo')
        }
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        //这个就是 仓库中指定我们需要的版本 
        classpath 'com.ssy.plugins:SsyPlugin:1.0.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven {
            url uri('../repo')
        }
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

小知识:classpath 是用来配置 buildscript 的。

好配置完 project 的 gradle.build ,我们来配置 app 的 gradle.build。
直接使用就好了。

apply plugin:'com.ssy.plugins.ssyplugin'

好了,配置完毕。
我们来检验一下我们是否搞成功了。
命令行敲起来 ./gradlew hello。

不得不学之「 Gradle」 ⑥ 自定义 plugin - 图11

ok ,完工,下一篇 自定义 Transform。