1. 程式人生 > >自定義Android Gradle外掛的3種方式

自定義Android Gradle外掛的3種方式

      因為gradle外掛是在編譯過程中生效, 不用修改程式碼就能實現很多功能, 幾乎每個app都使用了gradle外掛。 下面就介紹一下自定義gradle外掛的3種方式。

     按照官網說明, 分為3種方式。

1、Build script, 即在專案中的build.gradle檔案裡新增groovy程式碼並引用; 確定是只有當前工程可用;

2、buildSrc project, Android Studio會找rootPrjectDir/buildSrc/src/main/groovy目錄下的程式碼。 坑:當新建libraray module並命名為buildSrc後會提示Plugin with id 'com.android.library' not found.

這是因為buildSrc是Android的保留名稱,只能作為plugin外掛使用,我們修改buildSrc的build.gradle檔案後就不報錯了。

apply plugin: 'groovy'

buildscript {
  repositories {
    mavenCentral()
    jcenter()
    google()
  }

  dependencies {
    classpath 'com.android.tools.build:gradle:3.1.3'
  }
}

dependencies {
  compile gradleApi()
  compile localGroovy()
  compile 'com.android.tools.build:gradle:3.1.3'
}

allprojects {
  repositories {
    mavenCentral()
    google()
  }
}

3、Standalone project, 即單獨工程,這也是最常見的方式;一般為傳版本到jcenter或maven裡。 實現方式很簡單, 我們可以在buildSrc裡除錯, 待需要發版時使用Android Studio開啟buildSrc模組就新生成一個工程了。

例項:

方法一: 在專案build.gradle檔案裡定義groovy外掛.

apply plugin: GreetingPlguin
//在build.gradle檔案中定義類
class GreetingPlguin implements Plugin<Project> {
    @Override
    void apply(Project target) {
        println("GreetingPlguin is executed!!!!!!")

        //解析屬性
        def extension = target.extensions.create("greeting", GreetingPluginExtension)
        target.task('hello') {
            doLast {
                println("Hello from the GreetingPlugin")
                //讀取配置資訊
                println(String.valueOf(extension.showMsg)+ "," + extension.message + "," + extension.time)
            }
        }
    }
}

編譯工程

可以看到build輸出裡包含了GreetingPlugin is executed這句日誌, 說明外掛被執行。

方法二:使用buildSrc工程, 就是在當前工程裡新建個library module, 然後按照圖中格式調整內容。 外掛入口在plugintest.properties裡宣告,檔案內容implementation-class=com.brycegao.buildsrc.SrcPlugin

方法三:單獨一個工程, 因為其它工程也可以用,所以準備釋出到jcenter上。 開啟bintray.com後一定要註冊成個人使用者!!!

     引用時就是在build.gradle裡新增類似implementation 'com.brycegao.libplugin:libplugin:1.0.1' 就行了。

     上傳成功並待jcenter稽核後才可以使用。

坑:

1、jcenter不支援QQ郵箱, 我註冊時關聯github賬戶(使用的QQ郵箱)就無法註冊, 點選註冊按鈕時郵箱欄就變紅。吐個槽:jcenter就不能給個提示麼。 最後我是用gmail郵箱註冊了個人賬號;

2、jcenter貌似不支援中文,在寫描述時用英文才能提交成功, 如果有中文就提示405 not authorized。

3、新建maven時最好關聯github地址;

4、jcenter稽核有時差,比較慢。

demo地址: https://github.com/brycegao/PluginTest