我們有這樣的場(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ā)消息等一些列操作。
在執(zhí)行task命令時(shí)韭赘,studio的run窗口會(huì)展示執(zhí)行情況缩滨,包括蒲公英上傳情況、釘釘飛書等消息發(fā)送情況泉瞻,一目了然脉漏。
附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)明出處繁扎。