Gradle插件學習筆記(二)

以前介紹了Gradle插件的開發,此次會對功能進行一部分拓展,建議沒有讀過第一篇文章的朋友,先看一下Gradle插件學習筆記(一)java


Extension

以前的文章提到過,如何編寫一個插件,可是並不能經過外面傳遞參數進來,若是想使用一些自定義的參數可使用Extension,咱們能夠再創建一個MyExtension.groovyandroid

class MyExtension {
    def aaa;
    def bbb;
   
}
複製代碼

而後找到插件類(能夠參考上一篇文章):bash

public class TestPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.extensions.create("deep", MyExtension)
        project.afterEvaluate {
            MyExtension extension = project['deep'];
            String a = extension.aaa
            String b = extension.bbb
            println("deep:${a},${b}")
            
        }
    }
}
複製代碼

Project自己是支持拓展的,因此提供了create方法,project.extensions.create("deep", MyExtension)這句代碼的意思是將咱們的自定義的類做爲Project的一個屬性值,key是deep。app

這裏在普及一個小知識,項目中gradle執行的時候,會先解析setting.gradle,而後是build.gradle,若是想在解析build.gradle以前作點事,可使用project.beforeEvaluate若是想在解析build.gradle以後作點事能夠project.afterEvaluate。ide

因此咱們在解析完build.gradle以後,在訪問project中咱們設置的屬性,便可獲得build.gradle中設入的值。 來看個例子(其中hhh就是咱們寫的插件名字,這個上篇文章提到過):學習

apply plugin: 'hhh'
deep{
    aaa="this is a"
    bbb="this is b"
}
複製代碼

執行任務打印: 測試

android

經過上面的例子,我想到了正經的android工程不是也是這樣配置的嗎,咱們能夠測試一下。 都知道android工程中的project,樣式以下:gradle

android {
 compileSdkVersion 26
    buildToolsVersion "26.0.3"
    defaultConfig {
        applicationId "deep.com.testgroovy"
        minSdkVersion 14
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }
}

複製代碼

這些不都是project的一個拓展類嗎?咱們能夠測試一下,修改插件:ui

@Override
    void apply(Project project) {

        project.afterEvaluate {
                println("包名:"+project['android']["defaultConfig"].applicationId)
        }
複製代碼

我取project下的android,而後再取android下的defaultConfig,就能夠獲得包名,執行一下看看: this

果真能夠獲取包名,同理,在打包的時候能夠拿到更多的設置信息。

總結

好了今天有點時間,先寫這麼多吧,下篇文章具體說一下如何幹預android編譯 也歡迎關注個人公衆號,以後會推薦更多好用的組件庫。

相關文章
相關標籤/搜索