Gradle外掛學習筆記(一)

mymdeep發表於2019-03-03

最近一直在深挖Android Gradle的學習,發現其實所謂的Android Gradle也不過就是一個gradle外掛,所以如果能學好gradle的開發,我們就可以利用Gradle為我們做很多事,比如干預Android的打包,打出我們想要地apk或者jar,再或者多渠道設定等等。


建立外掛工程

如果想實現對Gradle的開發,肯定需要一個開發Gradle的工程,這個我們可以直接使用Android Studio即可,對於Gradle工程的建立,網上主要有兩種方式

buildSrc

直接在AndroidStudio中建立一個資料夾buildSrc,然後新增src資料夾和build.gradle檔案,如下圖所示:

Gradle外掛學習筆記(一)

在src資料夾中建立main/groovy ,main/resources
這時就可以發現當前的結構有些類似Android的開發結構了。不同的只是將java換成了groovy,這是當然了,畢竟用groovy開發,如果對groovy還不太熟悉的同學,可以參考我之前的文章Groovy基礎知識
build.gradle中新增如下程式碼:

apply plugin: `groovy`
dependencies {
    compile gradleApi()
    compile localGroovy()
}
複製程式碼

這樣我們就可以在groovy資料夾中新增對應程式碼進行gradle開發了。

java Library

第二種方式可以使用新建一個Java Library的形式:

Gradle外掛學習筆記(一)

這裡注意是Java Library不是android的 Library

我們暫時起名glib,工程如下圖所示:

Gradle外掛學習筆記(一)

這樣的工程暫時還是不能使用的,我們需要做一些修改。
首先是修改gradle檔案:

apply plugin: `groovy`
dependencies {
    compile gradleApi()
    compile localGroovy()
}
複製程式碼

然後刪除java資料夾,建立groovy資料夾,以及resources資料夾,如下圖所示:

Gradle外掛學習筆記(一)

區別

使用buildSrc可以在該Project中的任何module中直接使用,如果使用新建的Java Library的形式,需要上傳Gradle外掛到原生程式碼庫,這個後面再說,所以下面的例子我們先以buildSrc的方式進行介紹

外掛測試

groovy新建一個TestPlugin.groovy檔案(注意字尾一定要是groovy):


public class TestPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        println("aaaaaa")
    }
}
複製程式碼

gradle外掛都需要在build.gradle中apply,如:apply plugin: `com.android.application`
所以他需要有一個對外的名字,這就需要resources下的檔案起作用了。
在resources資料夾下建立META-INF/gradle-plugins:

Gradle外掛學習筆記(一)

然後在這個資料夾下建一個properties檔案,這個檔案的名字就是對外的名字,所以起的時候要慎重,我們暫時叫hhh.properties,名字特殊一點容易看出來。
檔案內容如下:

implementation-class=TestPlugin
複製程式碼

然後我們利用Android Studio自帶的app module做個測試:

Gradle外掛學習筆記(一)

然後執行打包可以發現輸出中:

Gradle外掛學習筆記(一)

上傳到本地倉庫

上面提到了如果使用java Library,需要上傳到本地倉庫才能引用,現在就需要介紹一下如何進行操作
首先需要修改build.gradle檔案:

apply plugin: `groovy`
apply plugin: "maven"
dependencies {
    compile gradleApi()
    compile localGroovy()
}

uploadArchives{
    repositories{
        mavenDeployer{
            repository(url:uri(`../repo`))
            pom.groupId = `com.test.plugin` // 組名
            pom.artifactId = `test` // 外掛名
            pom.version = `2.0.0` // 版本號
        }
    }
}
複製程式碼

然後執行這個uploadArchives Task
這是會發現,工程下多了一個資料夾:

Gradle外掛學習筆記(一)

app module如果需要使用,需要新增依賴:

apply plugin: `com.android.application`
apply plugin: `hhh`
buildscript{
    repositories{
        maven{
            url uri(`../repo`)
        }
    }
    dependencies{
        classpath `com.test.plugin:test:2.0.0`
    }
}

// 引用外掛
apply plugin: `fff`
複製程式碼

總結

今天就暫時先寫到這裡,之後會陸陸續續增加一些關於gradle的相關知識

也歡迎關注我的公眾號,之後會推薦更多好用的元件庫。

Gradle外掛學習筆記(一)

相關文章