Android gradle插件:一鍵上傳Apk到蒲公英,并發(fā)送消息到釘釘、飛書(shū)等平臺(tái)

我們有這樣的場(chǎng)景,在項(xiàng)目開(kāi)發(fā)測(cè)試階段,經(jīng)常會(huì)將apk打包后,上傳到蒲公英等三方平臺(tái),然后再發(fā)給公司其他人員進(jìn)行測(cè)試、體驗(yàn)。每次發(fā)包的時(shí)候要去進(jìn)行上傳、上傳完后通知相關(guān)人員,導(dǎo)致有點(diǎn)繁瑣,浪費(fèi)時(shí)間。此插件為了解決這個(gè)問(wèn)題。

Gradle插件,依賴進(jìn)項(xiàng)目工程,編譯APK,使用Task命令一鍵上傳apk到三方平臺(tái),如:蒲公英。(目前暫時(shí)只支持蒲公英,可以進(jìn)行擴(kuò)展)。 上傳成功后,如果你需要提醒其他人員進(jìn)行版本更新,如:釘釘群、飛書(shū)群等(目前示例做了這兩個(gè),還可擴(kuò)展企業(yè)微信等),配置相關(guān)參數(shù),自動(dòng)發(fā)送更新消息提示到群里。

更新記錄:

2022-08-22:
蒲公英官方上傳接口做了調(diào)整,原有接口將廢棄,插件已根據(jù)文檔做升級(jí)。
修復(fù)版本v1.0.3

2022-09-3:
(1)修復(fù)發(fā)送消息到飛書(shū)出現(xiàn)msg_type參數(shù)錯(cuò)誤問(wèn)題;
(2)新增Git提交日志參數(shù),用于發(fā)送消息時(shí)攜帶Git日志;
(3)完善飛書(shū)、釘釘、微信發(fā)送消息的類型并添加Git日志
修復(fù)版本v1.0.6

2022-10-30:
【新增】根據(jù)配置(uploadApkFilePath)要上傳的APK文件路徑,通過(guò)Task直接上傳Apk。v1.0.7
這樣減少編譯流程和支持上傳自己加固后的包。

使用步驟

1、在項(xiàng)目工程跟目錄,工程的build.gradle dependencies中添加:

classpath 'com.github.centerzx:UploadApkPlugin:v***'
目前版本為:

classpath 'com.github.centerzx:UploadApkPlugin:v1.0.7'

repositories中添加:

maven { url "https://jitpack.io"}

2、在app目錄(需要打包上傳的APK的Module)的build.gradle中添加引用插件:

apply plugin: 'center.uploadpgy.plugin'

引入后,配置自己的相關(guān)平臺(tái)參數(shù):

(1)上傳到蒲公英的相關(guān)配置參數(shù)

uploadPgyParams {
     apiKey = "替換為自己蒲公英賬戶的apiKey"
     // apiKey = readProperties("PgyApiKey")
     //暫時(shí)無(wú)用
     appName = "TestGradlePlugin" 
     buildTypeName = "Release"
     buildInstallType = 2 
     buildPassword = "zx"

      uploadApkFilePath = "E:\\Desktop\\release\\app_name-debug.apk"
}

(2)發(fā)送消息到釘釘?shù)南嚓P(guān)配置參數(shù)

buildDingParams {
    accessToken =  "替換為自己釘釘?shù)膖oken"
    // accessToken = readProperties("DingAccessToken")
    contentText = "最新開(kāi)發(fā)測(cè)試包已經(jīng)上傳至蒲公英, 可以下載使用了"
    contentTitle = "開(kāi)發(fā)測(cè)試包"
    //link類型(link)、markdown類型(markdown)、整體跳轉(zhuǎn)ActionCard類型(actionCard),默認(rèn)link
    msgtype = "actionCard"
    //如果使用markdown類型可添加參數(shù)是否@全體群人員,默認(rèn)false:isAtAll = true。其他類型不支持
    isAtAll = true
    //存在點(diǎn)擊時(shí)按鈕的文案(link類型無(wú))
    clickTxt = "點(diǎn)擊進(jìn)行下載"
    //是否單獨(dú)支持發(fā)送Git記錄數(shù)據(jù),在配置了buildGitLogParams前提下有效,默認(rèn)為true。link字?jǐn)?shù)問(wèn)題,無(wú)法支持
    isSupportGitLog = true
}

(3)發(fā)送消息到飛書(shū)的相關(guān)配置參數(shù)

buildFeiShuParams {
    webHookHostUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/************"
    // webHookHostUrl = readProperties("FeiShuWebHookHostUrl")
    contentTitle = "開(kāi)發(fā)測(cè)試包"
    contentText = "最新開(kāi)發(fā)測(cè)試包已經(jīng)上傳至蒲公英, 可以下載使用了"
    //富文本消息(post)、消息卡片(interactive),默認(rèn)post
    msgtype = "post"
    //是否@全體群人員,默認(rèn)false:isAtAll = true
    isAtAll = true
    clickTxt = "點(diǎn)擊進(jìn)行下載"
    //是否單獨(dú)支持發(fā)送Git記錄數(shù)據(jù),在配置了buildGitLogParams前提下有效,默認(rèn)為true
    isSupportGitLog = true
}

(4)發(fā)送消息到企業(yè)微信群的相關(guān)配置參數(shù)

buildWeixinGroupParams {
    // webHookHostUrl = readProperties("WeixinWebHookUrl")
    webHookUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=************"
    //文本(text)、markdown(markdown)、圖文(news),默認(rèn) markdown。由于字?jǐn)?shù)限制,只有markdown支持?jǐn)y帶Git記錄
    msgtype = "markdown"
    //如果使用文本類型(text)可添加參數(shù)是否@全體群人員,默認(rèn)true:isAtAll = true。其他類型不支持
    //isAtAll = true
    contentTitle = "開(kāi)發(fā)測(cè)試包"
    contentText = "最新開(kāi)發(fā)測(cè)試包已經(jīng)上傳至蒲公英, 可以下載使用了"
    //是否單獨(dú)支持發(fā)送Git記錄數(shù)據(jù),在配置了buildGitLogParams前提下有效,默認(rèn)為true。只有markdown類型支持
    isSupportGitLog = true
}

(5)發(fā)送消息時(shí)攜帶Git提交記錄相關(guān)配置參數(shù)

buildGitLogParams {
    //是否發(fā)送消息是攜帶Git記錄日志,如果配置了這塊參數(shù)才會(huì)攜帶Git記錄,消息里面可以單獨(dú)設(shè)置是否攜帶Git日志數(shù)據(jù)

    //獲取以當(dāng)前時(shí)間為基準(zhǔn)至N天之前的Git記錄(限定時(shí)間范圍),不填或小于等于0為全部記錄,會(huì)結(jié)合數(shù)量進(jìn)行獲取
    gitLogHistoryDayTime = 3
    //顯示Git記錄的最大數(shù)量,值范圍1~50,不填默認(rèn)是10條,最大數(shù)量50條
    gitLogMaxCount = 20
}

發(fā)送提示信息配置配置了才會(huì)發(fā)送,如果只有釘釘,只配置釘釘信息即可。其中各個(gè)參數(shù)體的名稱不能變,否則編譯會(huì)報(bào)錯(cuò),參數(shù)key不能修改,對(duì)應(yīng)的值可以根據(jù)自己情況修改。
參數(shù)中的“***************”是根據(jù)蒲公英、釘釘、飛書(shū)等情況進(jìn)行配置。
由于key、token等信息都需要保密,萬(wàn)一泄漏,可能被別有用心的人亂使用,故可以將相關(guān)關(guān)鍵信息保存在工程的:local.properties文件里面,此文件一般是根據(jù)自己本地進(jìn)行配置的,不會(huì)上傳到git。然后進(jìn)行數(shù)據(jù)讀取,如:readProperties("PgyApiKey")
將密鑰存在本地 防止泄露 local.properties 在Git的時(shí)候不會(huì)被上傳

def readProperties(key) {
 File file = rootProject.file('local.properties')
 if (file.exists()) { 
     InputStream inputStream = file .newDataInputStream()
     Properties properties = new Properties()
     properties.load(inputStream)
     if (properties.containsKey(key)){
           return properties.getProperty(key)
       }
    }
  }

注意:由于這樣會(huì)導(dǎo)致app的gradle看著很臃腫,因此可以單獨(dú)新建一個(gè)gradle文件進(jìn)行配置,然后再在app的gradle文件中apply from: "../******.gradle"這個(gè)新建gradle就行。

3、配置完備,進(jìn)行編譯:

此時(shí)在studio的右邊,tasks里面會(huì)新增一個(gè)publishToThirdPlatform 命令組,里面會(huì)有3個(gè)task:ApkBuildUploadPlatformDebug、ApkBuildUploadPlatformRelease、OnlyUploadApkToPlatform,其中OnlyUploadApkToPlatform為直接上傳APK操作,配置uploadApkFilePath路徑后有效。gradlew或者點(diǎn)擊運(yùn)行組里面的task命令,則可直接進(jìn)行編譯、打包、傳送、發(fā)消息等一些列操作。


Task命令生成.png

在執(zhí)行task命令時(shí),studio的run窗口會(huì)展示執(zhí)行情況,包括蒲公英上傳情況、釘釘飛書(shū)等消息發(fā)送情況,一目了然。


Task運(yùn)行結(jié)果輸出.png
釘釘actionCard效果.png
釘釘link型消息.png
釘釘markdown效果.png
飛書(shū)interactive效果.png
飛書(shū)post效果.png

附Github:
源代碼地址:https://github.com/centerzx/UploadApkPlugin

后期展望:

1、擴(kuò)展新增firim上傳APK包形式(來(lái)自:https://github.com/D-zy 建議)
2、擴(kuò)展新增發(fā)送的消息中自動(dòng)攜帶Git的提交記錄描述(已完成。來(lái)自 https://github.com/alizhijun 建議)
3、擴(kuò)展新增多渠道打包(來(lái)自:https://github.com/alizhijun 建議)
4、擴(kuò)展新增Apk加固(來(lái)自:https://github.com/j-gin 建議)
方案:由于每個(gè)公司或者項(xiàng)目組可能用的加固方案不同,故使用配置上傳APK路徑(加固后的APK路徑)形式達(dá)到目的。

大概情況是這樣,如有不足和錯(cuò)誤的地方,歡迎大家討論指正和建議!感謝大家star,轉(zhuǎn)載請(qǐng)標(biāo)明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容