日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AS 自定义 Gradle plugin 插件 案例 MD

發布時間:2023/11/29 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AS 自定义 Gradle plugin 插件 案例 MD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Markdown版本筆記我的GitHub首頁我的博客我的微信我的郵箱
MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantao@sina.com

AS 自定義 Gradle plugin 插件 案例 MD


目錄

目錄
AS 中自定義 Gradle plugin
編寫插件
傳遞參數
發布插件到倉庫
使用插件

AS 中自定義 Gradle plugin

參考1
參考2

結合 AndroidStudio,自定義Gradle plugin可以完成很多功能,比如:添加編譯依賴、進行Aspecj編譯、自動生成混淆配置。

項目中引入自定義 Gradle plugin 一般有三種方法:

  • 直接寫在 build.gradle 中,這種方式的缺點是無法復用插件代碼,在其他項目中還得復制一遍代碼
  • plugin 源碼放到 rootProjectDir/buildSrc/src/main/groovy 目錄下(沒用過)
  • plugin 打包后發布到 maven 倉庫, 然后項目通過依賴的形式引入

下面介紹的是第 3 種方式

編寫插件

1、創建插件 module
新建一個Android工程,在這個工程里面新建一個Android Library,先起名叫 cooker-plugin 吧,我們將會用這個 library 寫 Gradle plugin

2、建立 plugin 的目錄結構
把這個 cooker-plugin 中除了build.gradle文件外的默認文件都刪除,然后按照下面新建文件:

  • 在新建的module中新建文件夾src,接著在src文件目錄下新建main文件夾,在main目錄下新建groovy目錄,這時候groovy文件夾會被Android識別為groovy源碼目錄。
  • 除了在main目錄下新建groovy目錄外,你還要在main目錄下新建resources目錄,同理resources目錄會被自動識別為資源文件夾。
  • 在groovy目錄下新建項目包名,就像Java包名那樣。
  • 在resources目錄下新建文件夾META-INF,META-INF文件夾下新建gradle-plugins文件夾。

這樣,就完成了gradle 插件的項目的整體搭建,之后就是小細節了。目前,項目的結構是這樣的:

3、聲明 plugin 信息
在 src/main/resources/META-INF/gradle-plugins 里聲明 plugin 信息,比如新建cooker-plugin.properties文件(文件名 cooker-plugin 是插件名稱),在其中指定插件的實現類的全路徑類名:

implementation-class=com.helen.plugin.CookerPlugin

4、配置 build.gradle
在 build.gradle 中聲明用 groovy 開發

apply plugin: 'groovy'dependencies {compile gradleApi()compile localGroovy() }repositories {mavenCentral() }

5、編寫插件邏輯
插件代碼放在 src/main/groovy 下,實現 plugin,其實就是實現 Plugin<Project> 接口

package com.helen.pluginimport org.gradle.api.Plugin import org.gradle.api.Projectclass CookerPlugin implements Plugin<Project> {@Overridevoid apply(Project project) {println "這里實現plugin的邏輯!"project.task('cooker-test-task').doLast { variant ->println "自定義任務-doLast"}.doFirst { variant ->println "自定義任務-doFirst"}} }

6、生成 plugin 插件
在 cooker-plugin 項目中,build 一下

任務完成以后,就能在build/libs下生成對應的 plugin 插件了

現在這個插件就能使用了,可以發布在本地倉庫或者 Maven 倉庫

傳遞參數

接下來我們介紹如何獲得自定義的參數

1、新建 PluginExtension.groovy,用于定義我們可以支持的參數:

class PluginExtension {def param1 = "param1 defaut"def param2 = "param2 defaut"def param3 = "param3 defaut" }

我們希望能傳入嵌套的參數,所以再新建一個 PluginNestExtension.groovy:

class PluginNestExtension {def nestParam1 = "nestParam1 defaut"def nestParam2 = "nestParam2 defaut"def nestParam3 = "nestParam3 defaut" }

2、新建一個 CustomTask.groovy,繼承 DefaultTask 類,使用 @TaskAction 注解標注實現的方法:

class CustomTask extends DefaultTask {@TaskActionvoid output() {println "param1 is ${project.pluginExt.param1}"println "param2 is ${project.pluginExt.param2}"println "param3 is ${project.pluginExt.param3}"println "nestparam1 is ${project.pluginExt.nestExt.nestParam1}"println "nestparam2 is ${project.pluginExt.nestExt.nestParam2}"println "nestparam3 is ${project.pluginExt.nestExt.nestParam3}"} }

這里我們只是做了拿到了參數,然后做最簡單的輸出操作,使用 ${project.pluginExt.param1} 和 ${project.pluginExt.nestExt.nestParam1} 等拿到使用者設置的值。

3、在 apply 方法中建立映射關系:

project.extensions.create('pluginExt', PluginExtension) project.pluginExt.extensions.create('nestExt', PluginNestExtension) project.task('customTask', type: CustomTask)

4、定義外部參數,這里我們定義了param1,param2,nestParam1,nestParam2,而param3和nestParam3保持默認。

pluginExt {param1 = 'app param1'param2 = 'app param2'nestExt {nestParam1 = 'app nestParam1'nestParam2 = 'app nestParam2'} }

這樣之后,在執行customTask時就會輸出使用者對自定義的參數設置的值

發布插件到倉庫

發布到倉庫的方式有很多,下面只介紹利用 mavenDeployer 插件發布在本地倉庫

1、引入 mavenDeplayer 插件
修改 cooker-plugin 的 build.gradle,添加如下內容:

apply plugin: 'maven'//添加maven plugin,用于發布我們的jar uploadArchives {repositories {mavenDeployer {pom.groupId = 'com.helen.plugin'pom.artifactId = 'cooker-plugin'pom.version = 1.0repository(url: uri('../release')) //文件發布目錄(相對當前 build.gradle 的路徑)}} }

2、用 uploadArchices 發布
運行 uploadArchives 就能在設置的倉庫路徑中生成 cooker-plugin 了

使用插件

1、在 build.gradle 中引入 cooker-plugin

buildscript {repositories {jcenter()maven {url uri('release') //cooker-plugin 所在的倉庫,這里是本地目錄(相對當前 build.gradle 的路徑)}}dependencies {classpath 'com.android.tools.build:gradle:3.2.1'classpath 'com.helen.plugin:cooker-plugin:1.0' //引入cooker-plugin} } apply plugin: 'cooker-plugin'

2、我們編譯 App 的時候 cooker-plugin 就會介入了
每次 clean/build 時, 在 Gradle Console 可以看到我們的 log

這里實現plugin的邏輯!

3、使用 cooker-plugin 中定義的 task
前面demo中,我們新建了兩個task: cooker-test-task和customTask, 我們可以通過兩種方式運行這兩個task,一種方式是雙擊 app > other 分類下的 task 名,一種是通過 gradlew 命令

cooker-test-task 打印的日志:

Executing tasks: [cooker-test-task]這里實現plugin的邏輯! :app:cooker-test-task 自定義任務-doFirst 自定義任務-doLast

customTask 打印的日志:

Executing tasks: [customTask]這里實現plugin的邏輯! :app:customTask param1 is app param1 param2 is app param2 param3 is param3 defaut nestparam1 is app nestParam1 nestparam2 is app nestParam2 nestparam3 is nestParam3 defaut

到此為止, 自定義Gradle plugin的基本過程就介紹完了。

2019-2-11

轉載于:https://www.cnblogs.com/baiqiantao/p/10362507.html

總結

以上是生活随笔為你收集整理的AS 自定义 Gradle plugin 插件 案例 MD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。