Gradle 自定義插件

自定義插件概述

自定義Gradle插件主要有三種方式,分別是html

  1. build.gradle中編寫、
  2. buildSrc工程項目中編寫、
  3. 獨立項目中編寫 Groovy、Java、Kotlin均可以做爲實現插件的語言,在本文的示例中,使用Groovy做爲實現語言。

方法一:build.gradle中編寫

在實際工做中咱們不多會在build.gradle中編寫自定義插件,android

//使用插件
apply plugin: CustomPlugin

//自定義插件:實現Plugin類接口,重寫apply方法
class CustomPlugin implements Plugin<Project> {
    @Override
    void apply(Project project) {
        project.task('CustomPluginTask') {
            doLast {
                println "你們好,我是一個自定義插件,在這裏寫下你的具體功能"
            }
        }
    }
}
複製代碼

方法二:buildSrc工程項目

我是經過AndroidStudio建立的插件工程,假設你如今已經有了一個Android項目:git

  1. 咱們須要在項目根目錄裏創建下圖的目錄結構,Gradle會自動識別來完成編譯和測試

注意:上圖的buildSrc下的build.gradle,也須要新建一個,目前內容爲空就行github

  1. 建立文件api

    a. 在groovy目錄下,新建一個包(包名隨意),包內新建一個文件,必須以.groovy做爲後綴名(文件名隨意),這裏起名爲PluginImpl.groovybash

    b. 在resources目錄下新建一個META-INF文件夾,在META-INF文件夾下新建一個gradle-plugins文件夾,在gradle-plugins裏建立一個.properties文件,他的文件名必須是a步驟裏的那個包名 app

  2. 編寫PluginImpl.groovy(注意修改爲你的包名,其他照抄)maven

package com.demo.plugin

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

class PluginImpl implements Plugin<Project> {
    void apply(Project project) {
        project.task('testTask') << {
            println "Hello gradle plugin"
        }
    }
}
複製代碼

4. .properties編寫

只寫一句話(注意修改成你的包名)ide

implementation-class=com.demo.plugin.PluginImpl
複製代碼

  1. 至此自定義插件寫完了,此刻目錄結構爲

使用這個自定義插件

// 引入buildSrc裏的自定義插件
apply plugin: 'com.demo.plugin'
複製代碼

方法三:獨立項目中編寫

不管是在build.gradle中編寫自定義插件,仍是buildSrc項目中編寫自定義插件,都只能在本身的項目中進行使用。若是想要分享給其餘人或者本身用,能夠在一個獨立的項目中編寫插件,這個項目會生成一個包含插件類的JAR文件,有了JAR文件就很容易進行分享了。測試

編寫插件

1、在androidstudio裏新建一個module項目

新建一個android項目,在項目內部新建一個module(module名字能夠隨便起了,這裏叫duliplugin),把這個module文件夾裏的東西所有刪掉,只留下build.gradle文件

2、創建目錄結構

重複方法二的步驟,創建與方法二里同樣的文件目錄結構

3、編輯groovy文件

(其實與方法二是同樣的,注意事項看方法二)

package com.demo.plugin1

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

class PluginImpl implements Plugin<Project> {
    void apply(Project project) {
        project.task('testPlugin') {
            doLast {
                println "自定義插件ccc"
            }
        }
    }
}
複製代碼

4、編輯properties文件

(其實與方法二是同樣的,注意事項看方法二)

implementation-class=com.demo.plugin1.PluginImpl
複製代碼

5、編寫build.gradle文件

這裏纔是方法三的重點

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

dependencies {
    compile gradleApi()
    compile localGroovy()
}
repositories {
    mavenCentral()
}
repositories {
    mavenCentral()
}

uploadArchives {
    repositories {
        mavenDeployer {
            //設置插件的GAV參數
            pom.groupId = 'com.demo.plugin1'//你的包名
            pom.artifactId = 'myPlugin'
            pom.version = '1.1.9'//版本號
            //文件發佈到下面目錄  ../是父目錄
            repository(url: uri('../repo'))
        }
    }
}


複製代碼

而後看下圖執行uploadArchives這個task獲得jar包

注意: 有時候打開項目卡Indexing paused due to batch updated上,插件工程會報錯,找不到插件,能夠刪除插件工程裏的.iml文件> ,重啓Androidstudio

使用這個獨立插件打出的jar包

  1. 在新的項目裏使用這個獨立插件的jar包,複製repo到新項目的根目錄統計目錄(也能夠是其餘路徑,但注意引用倉庫地址時候,要相應地更改)
  2. 編寫項目的build.gradle文件
buildscript {
    ...
    repositories {
        ...
        maven {//本地Maven倉庫地址
            url uri('../repo')
        }
    }
    dependencies {
       ...
        classpath 'com.demo.plugin1:myPlugin:1.1.9'
    }
}
複製代碼

3.編寫項目的app.gradle文件

apply plugin: 'com.demo.plugin1'
複製代碼

  1. 同步以後,發現gradle裏有了這個插件裏的task,執行-輸出-ok

github 獨立插件

參考資料:

Gradle核心思想(六)自定義Gradle插件的三種方式

相關文章
相關標籤/搜索