Gradle 自定義 plugin

Mr.S發表於2019-04-28

學習完畢 Gradle 的基礎知識,不來點實戰,感覺就像沒有學習過啊。那我們就搞一搞實戰,一共兩個簡單的操作。第一,寫一個自定義 Plugin。第二,寫一個自定義 Transform。

自定義 Plugin

網上一般都會說三種方法是去建立,我們們就不來那麼多虛的,來個一勞永逸的吧,我們直接新建一個工程來寫,這個會了,新建 Library 工程 和在 build.gradle 中的這兩種方式相信你也就會了。

一、建立 Groovy 專案

注意:我用的是 IntelliJ IDEA,這個就和 Android 沒有關係了。

Gradle 自定義 plugin

選擇 Gradle 專案,勾選中 Groovy。

Gradle 自定義 plugin

groupId、artifactId、version 三者確定唯一庫。

groupId:是專案組織唯一的識別符號,實際對應JAVA的包的結構,是main目錄裡java的目錄結構。

artifactId:是專案的唯一的標識,實際對應專案的名稱,就是專案根目錄的名稱。

version:指的是版本號,注意:SNAPSHOT意為快照,說明該專案還處於開發中,是不穩定的版本。

Gradle 自定義 plugin
最後點,點,點,finish。就ok了。

二、配置 build.gradle

因為我們這個是 Gradle 專案,我們要配置一下一些第三方依賴。

plugins {
    id 'groovy'
    id 'maven'
}

group 'com.ssy.plugins'
version '1.0.0'

repositories {
    mavenCentral()
    google()
    jcenter()
}

dependencies {
    //Gradle Plugin 依賴
    implementation gradleApi()
    //本地釋出 Plugin
    implementation localGroovy()
    //因為我們需要在android 專案中使用,所以需要android的tool build庫
    implementation 'com.android.tools.build:gradle:3.3.2'
}
複製程式碼

三、開始自定義 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

Gradle 自定義 plugin

Gradle 自定義 plugin

2、建立自定義 plugin 檔案

建立 SsyPlugin.groovy 檔案,注意:我們是在groovy中寫的,不是java。

Gradle 自定義 plugin

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

Gradle 自定義 plugin

補充小知識:../repo,就是當前project 目錄的外層目錄。

1、./是當前目錄

2、../是父級目錄

3、/是根目錄

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

結束。手工~~

呸,還沒說怎麼用收你妹的工啊,額,好好,寫完回家,回~~家。

四、Android 專案使用自定義 plugin

我們新建一個 Android 專案,這個就不演示了。 首先,我們需要把 repo 專案,從複製到,我們android 專案的 父目錄,也就是和我們這個專案平級。這樣我們就可以使用它了。

首先我們需要在 專案的 gradle.build 中,不是 app 的 gradle.build,如圖吧,這樣明白一點。

Gradle 自定義 plugin

// 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

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

相關文章