0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Gradle自定義插件介紹2

jf_78858299 ? 來源:小余的自習室 ? 作者:小余的自習室 ? 2023-03-30 11:17 ? 次閱讀

步驟4.創(chuàng)建插件實現(xiàn)的任務:上傳版本信息

class UploadTask extends DefaultTask{
    String url = 'http://127.0.0.1/api/v3/upload/version'
    @TaskAction
    void upload(){
        //1.獲取版本信息
        def version = getCurrentVersion()
        //2.發(fā)送版本信息
        def response = sendAndReceive(version)
        //3.處理響應:將版本信息以及響應寫入到本地文件中
//        checkResponse(response)

    }
    //1.獲取版本信息
    def getCurrentVersion(){
        def name = project.extensions.versionInfo.versionName
        def code = project.extensions.versionInfo.versionCode
        def info = project.extensions.versionInfo.versionUpdateInfo
        println "name:$name code:$code info:$info"
        return new VersionInfo(versionName: name,
                     versionCode: code,
                     versionUpdateInfo: info)
    }
    //2.發(fā)送版本信息
    void sendAndReceive(VersionInfo version){
        OkHttpClient client = new OkHttpClient()
        FormBody body = new FormBody.Builder()
                .add('versionName',version.versionName)
                .add('versionCode',""+version.versionCode)
                .add('versionUpdateInfo',version.versionUpdateInfo)
                .build()
        Request.Builder builder = new Request.Builder()
                .url(url)
                .post(body)

        def call1 = client.newCall(builder.build())
        call1.enqueue(new Callback() {
            @Override
            void onFailure(@NotNull Call call, @NotNull IOException e) {
                println "push version fail:reason:"+e.message
            }

            @Override
            void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                checkResponse(response);
            }
        })
    }
    //3.處理響應:將版本信息以及響應寫入到本地文件中
    void  checkResponse(response){
        println "response:"+new String(response.body().bytes())

    }
}

記住,在需要執(zhí)行的方法上面添加TaskAction注解:在我們任務執(zhí)行的時候就會執(zhí)行到這個方法。

步驟5.將插件擴展和插件任務集成到Project生命周期中

@Override
void apply(Project project) {
    println "begin:now this is a ${project.name} 's upload plugin"
    //1.在插件中引入extensions中的字段,就是我們Project中配置的擴展字段
    project.extensions.create(EXTENSIVE,VersionInfo.class)
    //2.創(chuàng)建待處理的Task
    project.tasks.create(TASK_NAME,UploadTask.class)
    //3.將uploadTask任務掛架到Project的生命周期中
    def build = project.tasks.getByName('clean')
    def uploadTask = project.tasks.getByName(TASK_NAME)
    //這里使用dependsOn強依賴任務關系
    build.dependsOn(uploadTask)
}

步驟6.插件發(fā)布

筆者為了測試,將jar包只發(fā)布在本地,測試使用。

使用如下方式發(fā)布:

gradlePlugin {
    plugins {
        modularPlugin {
                id = 'com.yuhb.upload'
                implementationClass = 'com.yuhb.upload.UploadVersionPlugin'
        }
    }
}

這個配置在build后自動生成resources文件:這個插件擴展配置是引入的:java-gradle-plugin中。

圖片

resources文件自動生成.png

當然也可以直接在resources文件夾中上手動寫入該文件

在插件的build.gradle實現(xiàn)下面的邏輯:

uploadArchives {
    repositories {
            mavenDeployer {
                    repository(url:uri('D:/maven_local'))
                    pom.groupId = 'com.yuhb.upload'
                    pom.artifactId = 'uploader'
                    pom.version = '1.0.0'
            }
    }
}

在命令行執(zhí)行:

./gradlew :uploadversion:uploadArchives

然后去本地文件夾下面看看是否上傳成功:

圖片

本地文件成功.png

這里要說明下:

一般情況下都會將自定義插件發(fā)布到maven私服或者中央倉庫,才可以供其他項目使用

關于如何發(fā)布到maven私服,可以查看這篇文章

后期也會出一期文章教大家如何將數(shù)據(jù)發(fā)布到中央倉庫

步驟7.插件引入

  • 步驟1 :在工程的根build.gradle文件中引入:
buildscript {
        repositories {
                ...
                maven {
                        url uri('D:/maven_local')
                }
        }
        dependencies {
                ...
                classpath 'com.yuhb.upload:upload:1.0.0'
        }
}

說明:

com.yuhb.upload:uploader:1.0.0格式:

引入字段 發(fā)布字段
com.yuhb.upload pom.groupId
uploader pom.artifactId
1.0.0 pom.version
  • 步驟2 :在子Project中引入插件:
apply plugin: 'com.yuhb.upload'
  • 步驟3 :配置extensive插件擴展:
versionInfo {
    versionName = '1.0.0'
    versionCode = 1
    versionUpdateInfo = '當前是第一個版本:初始apk'
}

這個versionInfo擴展是怎么來的呢?

我們看下之前我們配置插件的時候,使用了:

EXTENSIVE = 'versionInfo'
project.extensions.create(EXTENSIVE,VersionInfo.class)

在插件中引入extensions中的字段,就是我們Project中配置的擴展字段:

versionInfo {
    versionName = '1.0.0'
    versionCode = 1
    versionUpdateInfo = '當前是第一個版本:初始apk'
}

就是這里,如果外部配置了versionInfo的擴展字段,就會通過project.extensions獲取到,并將數(shù)據(jù)寫入project.extensionsversionInfo屬性中:之后就可以使用project.extensionsversionInfo屬性訪問外部傳入的配置數(shù)據(jù):

def name = project.extensions.versionInfo.versionName
def code = project.extensions.versionInfo.versionCode
def info = project.extensions.versionInfo.versionUpdateInfo
  • 步驟4 :運行rootbuild 任務查看編譯信息:
./gradlew build
結果:
> Task :app:uploadTask
name:1.0.0 code:1 info:當前是第一個版本:初始apk

這里運行build可以執(zhí)行插件中的任務是因為前面筆者將插件Task掛接到了build任務之前:

掛接代碼

//3.將uploadTask任務掛架到Project的生命周期中
def build = project.tasks.getByName('build')
def uploadTask = project.tasks.getByName(TASK_NAME)
//這里使用dependsOn強依賴任務關系
build.dependsOn(uploadTask)

項目Demo完整代碼已經(jīng)上傳Github:

https://github.com/ByteYuhb/a_gradle_plugin_sample

5.總結

本文主要針對我們自定義插件定義以及優(yōu)勢做了一些說明,且使用一個實戰(zhàn)項目對自定義插件制作,發(fā)布,引入流程做了一個詳細的講解

,Gradle插件部分還有Gradle的上傳流程和AGP插件講解沒有講,后面都會陸續(xù)推出。

參考資料

  • Gradle自定義插件

    _官網(wǎng)文檔

  • Using Gradle Plugins _ Gradle 官方文檔

  • Gradle 系列(2)手把手帶你自定義 Gradle 插件_胡飛洋

好了,本文就講解到這里了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • project
    +關注

    關注

    0

    文章

    35

    瀏覽量

    13448
  • 插件
    +關注

    關注

    0

    文章

    339

    瀏覽量

    22953
  • gradle
    +關注

    關注

    0

    文章

    26

    瀏覽量

    851
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS應用自定義鍵盤解決方案

    增強用戶輸入的安全性,避免敏感信息被截取或者泄露。本文介紹自定義鍵盤的實現(xiàn),并結合自定義鍵盤和系統(tǒng)鍵盤的切換、自定義鍵盤的布局避讓等場景,介紹
    的頭像 發(fā)表于 06-05 14:19 ?306次閱讀

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據(jù)讀者的具體情況顯示自定義字符。
    發(fā)表于 01-20 15:43 ?1次下載

    EDK中PS2自定義IP

    Xilinx FPGA工程例子源碼:EDK中PS2自定義IP
    發(fā)表于 06-07 11:44 ?4次下載

    占位面積很小的自定義進度指示器progressbutton

    概述 1、描述:progressbutton是占位面積很小的自定義進度指示器。默認實現(xiàn)提供了一個pin進度按鈕。 2、實現(xiàn)功能: a.自定義圓形進度條。 b.實現(xiàn)根據(jù)Slider滑動更新自定義
    發(fā)表于 03-18 14:45 ?3次下載

    自定義進度指示器progressbutton

    概述 1、描述:progressbutton是占位面積很小的自定義進度指示器。默認實現(xiàn)提供了一個pin進度按鈕。 2、實現(xiàn)功能:a.自定義圓形進度條。 b.實現(xiàn)根據(jù)Slider滑動更新自定義
    發(fā)表于 03-24 14:26 ?1次下載

    基于openharmony適配移植的自定義文本視圖

    項目介紹 項目名稱: ReadMoreTextView 所屬系列: openharmony的第三方組件適配移植 功能: 帶有修剪文本的自定義文本視圖 項目移植狀態(tài): 給特定文字設置點擊事件功能未實現(xiàn)
    發(fā)表于 03-28 11:03 ?1次下載

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progr
    發(fā)表于 04-08 10:48 ?14次下載

    ArkUI如何自定義彈窗(eTS)

    自定義彈窗其實也是比較簡單的,通過CustomDialogController類就可以顯示自定義彈窗。
    的頭像 發(fā)表于 08-31 08:24 ?2569次閱讀

    教程 2自定義配置文件示例

    教程 2自定義配置文件示例
    發(fā)表于 03-13 19:33 ?0次下載
    教程 <b class='flag-5'>2</b>:<b class='flag-5'>自定義</b>配置文件示例

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 03-15 19:39 ?0次下載
    教程 <b class='flag-5'>2</b>:添加特征-<b class='flag-5'>自定義</b>配置文件創(chuàng)建

    Gradle自定義插件介紹1

    首先來講下`Gradle`和`Gradle插件`有啥區(qū)別? > `Gradle`是一套構建工具,其內部構建過程主要是以`Project`組成一個樹形的生態(tài)系統(tǒng),整個構建流程有自己
    的頭像 發(fā)表于 03-30 11:17 ?1073次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>自定義</b><b class='flag-5'>插件</b><b class='flag-5'>介紹</b>1

    自定義算子開發(fā)

    一個完整的自定義算子應用過程包括注冊算子、算子實現(xiàn)、含自定義算子模型轉換和運行含自定義op模型四個階段。在大多數(shù)情況下,您的模型應該可以通過使用hb_mapper工具完成轉換并順利部署到地平線芯片上……
    的頭像 發(fā)表于 04-07 16:11 ?3221次閱讀
    <b class='flag-5'>自定義</b>算子開發(fā)

    教程 2自定義配置文件示例

    教程 2自定義配置文件示例
    發(fā)表于 07-04 20:50 ?1次下載
    教程 <b class='flag-5'>2</b>:<b class='flag-5'>自定義</b>配置文件示例

    教程 2:添加特征-自定義配置文件創(chuàng)建

    教程 2:添加特征 - 自定義配置文件創(chuàng)建
    發(fā)表于 07-06 18:50 ?0次下載
    教程 <b class='flag-5'>2</b>:添加特征-<b class='flag-5'>自定義</b>配置文件創(chuàng)建

    labview超快自定義控件制作和普通自定義控件制作

    labview超快自定義控件制作和普通自定義控件制作
    發(fā)表于 08-21 10:32 ?13次下載

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品