Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Gradle自定義插件

Gradle自定義插件

編輯:關於Android編程

Gradle自定義插件

在Gradle中創建自定義插件,Gradle提供了三種方式:

在build.gradle腳本中直接使用 在buildSrc中使用 在獨立Module中使用

開發Gradle插件可以在IDEA中進行開發,也可以在Android Studio中進行開發,它們唯一的不同,就是IDEA提供了Gradle開發的插件,比較方便創建文件和目錄,而Android Studio中,開發者需要手動創建(但實際上,這些目錄並不多,也不復雜,完全可以手動創建)。

在項目中使用

在Android Studio中創建一個標准的Android項目,整個目錄結構如下所示:

├── app
│   ├── build.gradle
│   ├── libs
│   └── src
│       ├── androidTest
│       │   └── java
│       ├── main
│       │   ├── AndroidManifest.xml
│       │   ├── java
│       │   └── res
│       └── test
├── build.gradle
├── buildSrc
│   ├── build.gradle            ---1
│   └── src
│       └── main
│           ├── groovy          ---2
│           └── resources       ---3
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle

其中,除了buildSrc目錄以外,都是標准的Android目錄,而buildSrc就是Gradle提供的在項目中配置自定義插件的默認目錄,開發Gradle要創建的目錄,也就是RootProject/src/main/groovy和RootProject/src/main/resources兩個目錄。

在配置完成後,如果配置正確,對應的文件夾將被IDE所識別,成為對應類別的文件夾。

創建buildSrc/build.gradle—1

首先,先來配置buildSrc目錄下的build.gradle文件,這個配置比較固定,腳本如下所示:

apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

創建Groovy腳本—2

接下來,在groovy目錄下,創建一個Groovy類(與Java類似,可以帶包名,但Groovy類以.grovvy結尾),如圖所示:

這裡寫圖片描述vcWxvsjnz8LL+cq+o7o8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;"> package com.xys import org.gradle.api.Plugin import org.gradle.api.Project public class MainPluginForBuildSrc implements Plugin { @Override void apply(Project project) { project.task('testPlugin') << { println "Hello gradle plugin in src" } } }

在如上所示的腳本的apply方法中,筆者簡單的實現了一個task,命名為testPlugin,執行該Task,會輸出一行日志。

創建Groovy腳本的Extension

所謂Groovy腳本的Extension,實際上就是類似於Gradle的配置信息,在主項目使用自定義的Gradle插件時,可以在主項目的build.gradle腳本中通過Extension來傳遞一些配置、參數。

創建一個Extension,只需要創建一個Groovy類即可,如圖所示:

這裡寫圖片描述

如上所示,筆者命名了一個叫MyExtension的groovy類,其腳本如下所示:

package com.xys;

class MyExtension {
    String message
}

MyExtension代碼非常簡單,就是定義了要配置的參數變量,後面筆者將具體演示如何使用。

在Groovy腳本中使用Extension

在創建了Extension之後,需要修改下之前創建的Groovy類來加載Extension,修改後的腳本如下所示:

package com.xys

import org.gradle.api.Plugin
import org.gradle.api.Project

public class MainPluginForBuildSrc implements Plugin {

    @Override
    void apply(Project project) {

        project.extensions.create('pluginsrc', MyExtension)

        project.task('testPlugin') << {
            println project.pluginsrc.message
        }
    }
}

通過project.extensions.create方法,來將一個Extension配置給Gradle即可。

創建resources—3

resources目錄是標識整個插件的目錄,其目錄下的結構如下所示:

└── resources
└── META-INF
└── gradle-plugins

該目錄結構與buildSrc一樣,是Gradle插件的默認目錄,不能有任何修改。創建好這些目錄後,在gradle-plugins目錄下創建——插件名.properties文件,如圖所示:

這裡寫圖片描述

如上所示,這裡筆者命名為pluginsrc.properties,在該文件中,代碼如下所示:

implementation-class=com.xys.MainPluginForBuildSrc

通過上面的代碼指定最開始創建的Groovy類即可。

在主項目中使用插件

在主項目的build.gradle文件中,通過apply指令來加載自定義的插件,腳本如下所示:

apply plugin: 'pluginsrc'

其中plugin的名字,就是前面創建pluginsrc.properties中的名字——pluginsrc,通過這種方式,就加載了自定義的插件。

配置Extension

在主項目的build.gradle文件中,通過如下所示的代碼來加載Extension:

pluginsrc{
    message = 'hello gradle plugin'
}

同樣,領域名為插件名,配置的參數就是在Extension中定義的參數名。

配置完畢後,就可以在主項目中使用自定義的插件了,在終端執行gradle testPlugin指令,結果如下所示:

:app:testPlugin
hello gradle plugin

在本地Repo中使用

在buildSrc中創建自定義Gradle插件只能在當前項目中使用,因此,對於具有普遍性的插件來說,通常是建立一個獨立的Module來創建自定義Gradle插件。

創建Android Library Module

首先,在主項目的工程中,創建一個普通的Android Library Module,並刪除其默認創建的目錄,修改為Gradle插件所需要的目錄,即在buildSrc目錄中的所有目錄,如圖所示:

這裡寫圖片描述

如上圖所示,創建的文件與在buildSrc目錄中創建的文件都是一模一樣的,只是這裡在一個自定義的Module中創建插件而不是在默認的buildSrc目錄中創建。

部署到本地Repo

因為是通過自定義Module來創建插件的,因此,不能讓Gradle來自動完成插件的加載,需要手動進行部署,所以,需要在插件的build.gradle腳本中增加Maven的配置,腳本如下所示:

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    mavenCentral()
}

group='com.xys.plugin'
version='2.0.0'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../repo'))
        }
    }
}

相比buildSrc中的build.gradle腳本,這裡增加了Maven的支持和uploadArchives這樣一個Task,這個Task的作用就是將該Module部署到本地的repo目錄下。在終端中執行gradle uploadArchives指令,將插件部署到repo目錄下,如圖所示:

這裡寫圖片描述

當插件部署到本地後,就可以在主項目中引用插件了。

當插件正式發布後,可以把插件像其它module一樣發布到中央庫,這樣就可以像使用中央庫的庫項目一樣來使用插件了。

引用插件

在buildSrc中,系統自動幫開發者自定義的插件提供了引用支持,但自定義Module的插件中,開發者就需要自己來添加自定義插件的引用支持。在主項目的build.gradle文件中,添加如下所示的腳本:

apply plugin: 'com.xys.plugin'

buildscript {
    repositories {
        maven {
            url uri('../repo')
        }
    }
    dependencies {
        classpath 'com.xys.plugin:plugin:2.0.0'
    }
}

其中,classpath指定的路徑,就是類似compile引用的方式,即——插件名:group:version
配置完畢後,就可以在主項目中使用自定義的插件了,在終端執行gradle testPlugin指令,結果如下所示:

:app:testPlugin
Hello gradle plugin

如果不使用本地Maven Repo來部署,也可以拿到生成的插件jar文件,復制到libs目錄下,通過如下所示的代碼來引用:

classpath fileTree(dir: 'libs', include: '\*.jar') // 使用jar

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved