自定義Gradle Plugin

1,Environment

2调俘,創(chuàng)建項目

  • Create New Project


    gradle0.png

    NOTE:Groovy確保勾上

  • 點擊Next,填寫GroupId和ArtifactId


    gradle1.png
  • 確認Gradle使用方式判族,使用recommend的方式即可躺盛,直接點擊下一步


    gradle2.png
  • 確認項目的名字和路徑,然后Finish就完成了項目的創(chuàng)建


    gradle3.png

3,項目結(jié)構(gòu)

3.1形帮,初始項目結(jié)構(gòu)

gradle4.png

3.2, 項目結(jié)構(gòu)調(diào)整

  • 項目根目錄下new directory


    gradle5.png
  • 輸入src/main/groovy槽惫,點擊確定后項目結(jié)構(gòu)如下


    gradle6.png

    NOTE:?IntelliJ自動識別groovy,顏色為綠色

  • create package and class


    gradle7.png
gradle8.png

NOTE:create class的時候選擇groovy class

4辩撑,編寫插件

  • 修改groovy代碼
class BlogPlugin implements Plugin<Project> {
}

NOTE:ide會提示找不到Project類界斜,不要慌,繼續(xù)下面的操作

  • 導(dǎo)入依賴
    修改根目錄下build.gradle,添加如下代碼
dependencies {
    compile gradleApi()
    compile localGroovy()
}
  • sync項目的依賴
    View->Tool Windows->Gradle槐臀,或者點擊ide右上角的Gradle


    gradle9.png

    點擊Refresh all Gradle projects按鈕锄蹂,就完成了刷新操作

  • 解決Plugin<Project>的依賴問題

package com.wsl.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class MyPlugin implements Plugin<Project> {
}

NOTE:注意import的命名空間,因為有其他同名的Plugin和Project類水慨,這個地方是org.gradle.api

  • Implements interface
@Override
void apply(Project target) {
    def showDevicesTask = target.tasks.create("showDevices") << {
        def adbExe = target.android.getAdbExe().toString()
        println "${adbExe} devices".execute().text
    }
    showDevicesTask.group = "blogplugin"
    showDevicesTask.description = "Runs adb devices command"
}

NOTE:創(chuàng)建了名為showDevices的task,實際上是執(zhí)行了adb devices

  • 上傳mavenCentral或者jcenter,這里上傳到本地maven倉庫
    在build.gradle中添加如下代碼
apply plugin: 'maven'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('/Users/wushuanglong/workspace/repo'))
        }
    }
}

NOTE:這個地方可以是絕對路徑敬扛,也可以是相對路徑

添加完后在gradle task列表里就會多一個uploadArchives的task


gradle10.png

執(zhí)行uploadArchives task,這里有2種方式:1晰洒,在項目目錄下./gradlew uploadArchives;2啥箭,雙擊uploadArchives谍珊。
這里推薦使用第一種,可以看一些錯誤的日志輸出急侥。
這里執(zhí)行./gradlew uploadArchives 可能會遇到2個問題砌滞。
問題1:Unindexed maven repositories error in IntelliJ IDEA 2016.1.3
問題2:

gradle11.png

使用./gradlew uploadArchives --stacktrace查看堆棧信息侮邀,發(fā)現(xiàn)原因如下:

Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.4.7 and you are trying to load version 2.3.11
... 10 more

很明顯groovy 的版本沖突了,在build.gradle中注釋掉如下代碼就解決了

compile 'org.codehaus.groovy:groovy-all:2.3.11'

成功上傳后,在本地倉庫會生成如下文件

wushuanglongdeMac-mini:repo wushuanglong$ ll com/wsl/android/plugin/test/1.0-SNAPSHOT/
total 72
-rw-r--r-- 1 wushuanglong staff 360 2 19 16:11 maven-metadata.xml
-rw-r--r-- 1 wushuanglong staff 32 2 19 16:11 maven-metadata.xml.md5
-rw-r--r-- 1 wushuanglong staff 40 2 19 16:11 maven-metadata.xml.sha1
-rw-r--r-- 1 wushuanglong staff 3808 2 19 16:11 test-1.0-20170219.081155-1.jar
-rw-r--r-- 1 wushuanglong staff 32 2 19 16:11 test-1.0-20170219.081155-1.jar.md5
-rw-r--r-- 1 wushuanglong staff 40 2 19 16:11 test-1.0-20170219.081155-1.jar.sha1
-rw-r--r-- 1 wushuanglong staff 600 2 19 16:11 test-1.0-20170219.081155-1.pom
-rw-r--r-- 1 wushuanglong staff 32 2 19 16:11 test-1.0-20170219.081155-1.pom.md5
-rw-r--r-- 1 wushuanglong staff 40 2 19 16:11 test-1.0-20170219.081155-1.pom.sha1

  • Searching for plugins
    告訴gradle我們用到了哪些插件class,右鍵 "main" and create a directory resources/META-INF/gradle-plugins贝润,在里面建一個properties文件,比如就叫com.wsl.properties,那么在Android app里引入插件的代碼就是
apply plugin: 'com.wsl'

com.wsl.properties添加插件關(guān)聯(lián)的groove類

implementation-class=com.wsl.plugin.MyPlugin

再次執(zhí)行./gradlew uploadArchives绊茧,上傳插件到本地repo后就可以在Android Application中使用了

Android Application集成插件

1, project build.gradle配置

buildscript {
    repositories {
        jcenter()
        //增加代碼1
        maven {
            //這里填寫plugin項目里指定的本地repo路徑
            url uri('/Users/wushuanglong/workspace/repo')
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        //增加代碼2, 格式為'&{GroupId}:&{ArtifactId}:&{Version}' 
        classpath 'com.wsl.android.plugin:test:1.0-SNAPSHOT'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

2, module build.gradle配置

apply自定義的插件,注意這里填寫的是PluginId,由.properties文件的前綴來指定打掘,這里就PluginId就是com.wsl

apply plugin: 'com.android.application'
apply plugin: 'com.wsl'

3, sync以及插件確認

./gradlew task或者android studio右上角Gradle按鈕可以查看當前Android項目的task列表


gradle12.png

這里在myplugin下就可以看到多了個showDevices的task

4, task執(zhí)行

執(zhí)行./gradlew showDevices


gradle13.png

成功的顯示了device 列表,到此為止插件就成功了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末华畏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尊蚁,更是在濱河造成了極大的恐慌亡笑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件横朋,死亡現(xiàn)場離奇詭異仑乌,居然都是意外死亡,警方通過查閱死者的電腦和手機琴锭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門绝骚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祠够,你說我怎么就攤上這事压汪。” “怎么了古瓤?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵止剖,是天一觀的道長。 經(jīng)常有香客問我落君,道長穿香,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任绎速,我火速辦了婚禮皮获,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纹冤。我一直安慰自己洒宝,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布萌京。 她就那樣靜靜地躺著雁歌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪知残。 梳的紋絲不亂的頭發(fā)上靠瞎,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼乏盐。 笑死佳窑,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的父能。 我是一名探鬼主播神凑,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼法竞!你這毒婦竟也來了耙厚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤岔霸,失蹤者是張志新(化名)和其女友劉穎薛躬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呆细,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡型宝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了絮爷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趴酣。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坑夯,靈堂內(nèi)的尸體忽然破棺而出岖寞,到底是詐尸還是另有隱情,我是刑警寧澤柜蜈,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布仗谆,位于F島的核電站,受9級特大地震影響淑履,放射性物質(zhì)發(fā)生泄漏隶垮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一秘噪、第九天 我趴在偏房一處隱蔽的房頂上張望狸吞。 院中可真熱鬧,春花似錦指煎、人聲如沸蹋偏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暖侨。三九已至,卻和暖如春崇渗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工宅广, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葫掉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓跟狱,卻偏偏與公主長得像俭厚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子驶臊,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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