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

我們有這樣的場(chǎng)景漏健,在項(xiàng)目開發(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è)問題。

Gradle插件处窥,依賴進(jìn)項(xiàng)目工程扮念,編譯APK,使用Task命令一鍵上傳apk到三方平臺(tái)碧库,如:蒲公英柜与。(目前暫時(shí)只支持蒲公英,可以進(jìn)行擴(kuò)展)嵌灰。 上傳成功后弄匕,如果你需要提醒其他人員進(jìn)行版本更新,如:釘釘群沽瞭、飛書群等(目前示例做了這兩個(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ā)送消息到飛書出現(xiàn)msg_type參數(shù)錯(cuò)誤問題枝缔;
(2)新增Git提交日志參數(shù),用于發(fā)送消息時(shí)攜帶Git日志蚊惯;
(3)完善飛書愿卸、釘釘、微信發(fā)送消息的類型并添加Git日志
修復(fù)版本v1.0.6

2022-10-30:
【新增】根據(jù)配置(uploadApkFilePath)要上傳的APK文件路徑截型,通過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í)無用
     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 = "最新開發(fā)測(cè)試包已經(jīng)上傳至蒲公英, 可以下載使用了"
    contentTitle = "開發(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類型無)
    clickTxt = "點(diǎn)擊進(jìn)行下載"
    //是否單獨(dú)支持發(fā)送Git記錄數(shù)據(jù)锄码,在配置了buildGitLogParams前提下有效,默認(rèn)為true晌涕。link字?jǐn)?shù)問題滋捶,無法支持
    isSupportGitLog = true
}

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

buildFeiShuParams {
    webHookHostUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/************"
    // webHookHostUrl = readProperties("FeiShuWebHookHostUrl")
    contentTitle = "開發(fā)測(cè)試包"
    contentText = "最新開發(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 = "開發(fā)測(cè)試包"
    contentText = "最新開發(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ù)蒲公英仇箱、釘釘县恕、飛書等情況進(jìn)行配置。
由于key剂桥、token等信息都需要保密忠烛,萬一泄漏,可能被別有用心的人亂使用权逗,故可以將相關(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í)行情況缩滨,包括蒲公英上傳情況、釘釘飛書等消息發(fā)送情況泉瞻,一目了然脉漏。


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

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

后期展望:

1、擴(kuò)展新增firim上傳APK包形式(來自:https://github.com/D-zy 建議)
2袖牙、擴(kuò)展新增發(fā)送的消息中自動(dòng)攜帶Git的提交記錄描述(已完成侧巨。來自 https://github.com/alizhijun 建議)
3、擴(kuò)展新增多渠道打包(來自:https://github.com/alizhijun 建議)
4鞭达、擴(kuò)展新增Apk加固(來自: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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市糊闽,隨后出現(xiàn)的幾起案子梳玫,更是在濱河造成了極大的恐慌,老刑警劉巖墓怀,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汽纠,死亡現(xiàn)場(chǎng)離奇詭異卫键,居然都是意外死亡傀履,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門莉炉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓账,“玉大人,你說我怎么就攤上這事絮宁“鹉海” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵绍昂,是天一觀的道長(zhǎng)啦粹。 經(jīng)常有香客問我偿荷,道長(zhǎng),這世上最難降的妖魔是什么唠椭? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任跳纳,我火速辦了婚禮,結(jié)果婚禮上贪嫂,老公的妹妹穿的比我還像新娘寺庄。我一直安慰自己,他們只是感情好力崇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布斗塘。 她就那樣靜靜地躺著,像睡著了一般亮靴。 火紅的嫁衣襯著肌膚如雪馍盟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天台猴,我揣著相機(jī)與錄音朽合,去河邊找鬼。 笑死饱狂,一個(gè)胖子當(dāng)著我的面吹牛曹步,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播休讳,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼讲婚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了俊柔?” 一聲冷哼從身側(cè)響起筹麸,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雏婶,沒想到半個(gè)月后物赶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡留晚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年酵紫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错维。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奖地,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赋焕,到底是詐尸還是另有隱情参歹,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布隆判,位于F島的核電站犬庇,受9級(jí)特大地震影響僧界,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜臭挽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一捎泻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埋哟,春花似錦笆豁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抛计,卻和暖如春哄孤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吹截。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工瘦陈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人波俄。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓晨逝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懦铺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捉貌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容