Android Gradle(四)- 自定義plugin

項(xiàng)目中引入自定義Gradle plugin一般有三種方法:

  • 直接寫在 build.gradle中
  • plugin源碼放到buildSrc/src/main/groovy目錄下
  • plugin打包成jar, 發(fā)布到maven倉庫, 然后項(xiàng)目通過Build Script依賴jar的形式引入

官方文檔介紹
Gradle Android插件用戶指南翻譯

一甫匹、直接寫在 build.gradle中

這個(gè)最簡單直接,以它為入口先介紹Plugin的玩法。
app build.gradle中

//應(yīng)用插件 這里注意直接寫類纵菌,不用加引號菱阵。
apply plugin: TestPlugin

//創(chuàng)建插件類颁褂,覆寫apply方法(執(zhí)行調(diào)用點(diǎn))
class TestPlugin implements Plugin<Project>{
    @Override
   void apply(Project target) {
       println ‘hello plugin!'
   }
}

Plugin它本質(zhì)上是對完成特定功能的task的封裝席里,因此業(yè)務(wù)功能會交給task來處理签则。

加上Extension和task:

/**
* 插件拓展:為plugin配置各種參數(shù)遥诉,提供應(yīng)用程序與Plugin通信
* 也相當(dāng)于project的ext{}拇泣,不過這個(gè)是封裝在plugin部分。
* project的ext{}更適合配置全局common的東西
*/
class TestExtension {
    String msg
}

testExtension.msg = "自定義插件拓展"

class TestPlugin implements Plugin<Project> {
    @Override
   void apply(Project project) {
        //創(chuàng)建Extension類矮锈,key-value的形式霉翔,外部可使用key的閉包傳遞信息
       def test = project.extensions.create('testExtension', TestExtension)
        //依托在build task之后執(zhí)行
       project.getTasks().getByName('build') {
            doLast {
                println test.msg
           }
        }
    }
}
二、buildSrc方式

新建buildSrc空文件夾苞笨,這個(gè)目錄默認(rèn)就用來存放自定義插件债朵。重點(diǎn)就是main部分:plugin是.groovy文件格式,resources文件夾也按如圖命名方式瀑凝。test-plugin.properties后者前的名字部分是插件名序芦。

buildSrc工程目錄

build.gradle配置:

apply plugin: 'groovy'

dependencies {
    implementation gradleApi()
    implementation localGroovy()
}

repositories {
    jcenter()
}

sourceSets {
    main {
        groovy {
            srcDir 'src/main/groovy'
       }

        resources {
            srcDir 'src/main/resources'
       }
    }
}

TestPlugin.groovy:

package com.stan.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project

class TestPlugin implements Plugin<Project> {
    @Override
   void apply(Project project) {
        println 'test plugin!!!'
   }
}

test-plugin.properties

implementation-class=com.stan.plugin.TestPlugin

app或者其他用到插件的module build.gradle中引入插件

apply plugin: 'test-plugin’
三、plugin打包成jar, 發(fā)布到本地或者遠(yuǎn)程maven倉庫

創(chuàng)建android module粤咪,保留與buildSrc一致的目錄結(jié)果谚中,多余的刪除。
功能完成后,執(zhí)行build task宪塔,在build/libs目錄下會生成.jar文件

在buildSrc的基礎(chǔ)上磁奖,調(diào)整build.gradle

//添加maven plugin, 用于發(fā)布我們的jar
apply plugin: 'maven'

repositories {
    mavenCentral()
}

//設(shè)置maven deployer
uploadArchives {
    repositories {
        mavenDeployer {
            //設(shè)置插件的GAV參數(shù)
           pom.groupId = 'com.stan.plugin'
           pom.artifactId = ‘my-plugin'
           pom.version = 1.0
           //文件發(fā)布到下面目錄
           repository(url: uri('../release'))
        }
    }
}

運(yùn)行uploadArchives task,就能在設(shè)置的倉庫路徑中生成 my-plugin了

本地倉庫

最后在app或者其他module build.gradle引入

apply plugin: 'my-plugin'

buildscript {
    repositories {
        maven {
            //my-plugin 所在的倉庫
           //這里是發(fā)布在本地文件夾了
           url uri('../release')
        }
    }

    dependencies {
        //引入my-plugin
       classpath 'com.stan.plugin:my-plugin:1.0'
   }
}

這里注意:module名蝌麸、插件名点寥、pom.artifactId保持一致,不然容易報(bào):Plugin with id ‘XXX' not found.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載来吩,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者敢辩。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市弟疆,隨后出現(xiàn)的幾起案子戚长,更是在濱河造成了極大的恐慌,老刑警劉巖怠苔,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件同廉,死亡現(xiàn)場離奇詭異,居然都是意外死亡柑司,警方通過查閱死者的電腦和手機(jī)迫肖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攒驰,“玉大人蟆湖,你說我怎么就攤上這事〔7啵” “怎么了隅津?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劲室。 經(jīng)常有香客問我伦仍,道長,這世上最難降的妖魔是什么很洋? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任充蓝,我火速辦了婚禮,結(jié)果婚禮上喉磁,老公的妹妹穿的比我還像新娘谓苟。我一直安慰自己,他們只是感情好线定,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布娜谊。 她就那樣靜靜地躺著,像睡著了一般斤讥。 火紅的嫁衣襯著肌膚如雪纱皆。 梳的紋絲不亂的頭發(fā)上湾趾,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音派草,去河邊找鬼搀缠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛近迁,可吹牛的內(nèi)容都是我干的艺普。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼鉴竭,長吁一口氣:“原來是場噩夢啊……” “哼歧譬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搏存,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤瑰步,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后璧眠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缩焦,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年责静,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袁滥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灾螃,死狀恐怖题翻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睦焕,我是刑警寧澤藐握,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布靴拱,位于F島的核電站垃喊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袜炕。R本人自食惡果不足惜本谜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎窘。 院中可真熱鬧乌助,春花似錦、人聲如沸陌知。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仆葡。三九已至赏参,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背把篓。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工纫溃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人韧掩。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓紊浩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疗锐。 傳聞我的和親對象是個(gè)殘疾皇子坊谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言 Gradle插件在Android中的應(yīng)用很廣泛,很多字節(jié)碼插樁方案就用到了這方面的知識滑臊,Android官方提...
    嘮嗑008閱讀 8,184評論 4 30
  • ??在android studio中g(shù)radle作為主要的構(gòu)建工具呜袁,其核心工作任務(wù)在于執(zhí)行一系列的Task。而pl...
    PantheraLe_253e閱讀 3,187評論 0 4
  • 自定義Gradle-Plugin 插件 官方文檔給出了詳細(xì)的實(shí)現(xiàn)步驟简珠,筆者 將參考官方文檔:通過自定義插件實(shí)現(xiàn)li...
    遛狗的程序員閱讀 3,770評論 0 6
  • 在 Android Studio 構(gòu)建的項(xiàng)目中阶界,基于 Gradle 進(jìn)行項(xiàng)目的構(gòu)建,同時(shí)使用 Android DS...
    Ant_way閱讀 7,329評論 0 16
  • 上海361期《六項(xiàng)精進(jìn)》反省二組 【日精進(jìn)打卡第455天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》3遍 共1169遍 《大學(xué)》...
    朱非凡閱讀 75評論 0 0