使用Gradle編寫蒲公英自動上傳安裝包和更新說明腳本

Github: https://github.com/windinwork/PgyerGradleApplication

平時測試中發(fā)包的時候,筆者在打完包就直接拖到蒲公英上讓它上傳就完事了。不過前兩天的會議上,測試小姐姐提出要在蒲公英上寫明這次的測試包修改了什么內(nèi)容。

筆者一想到上傳完包還要一個個打字說明在這個包我修改了什么马昙,立即強(qiáng)烈拒絕!但是測試小姐姐再三要求颅悉,礙于這確實(shí)是個好提議和會上坐著的老大帆调,只好勉為其難地答應(yīng)發(fā)包時寫上改動內(nèi)容T_T奠骄。但是懶惰如筆者,當(dāng)然不會每次發(fā)包都手動打字啦番刊,最好能打完包后自動把包和修改信息上傳到蒲公英含鳞。

雖然嘴上說著不要不要,但筆者想到寫個自動化腳本還是很興奮的芹务。本來想看看有沒有現(xiàn)成的蒲公英自動上傳腳本蝉绷,在網(wǎng)上搜索了一下發(fā)現(xiàn)都不是很對胃口,想想還是自己寫算了枣抱。所以今天花了半天寫了這個腳本潜必,在這里也分享一下相關(guān)的gradle配置,以供參考沃但。

一磁滚、 自動上傳蒲公英

向蒲公英這樣的平臺一般提供API用來做一些便利的操作,我們直接打開蒲公英文檔宵晚,可以看到用于上傳安裝包的API和示例的上傳方法垂攘,我們便采用其中的curl的方法上傳安裝包。

上傳接口的參數(shù)中淤刃,有三個是必填的晒他,分別的uKey_api_keyfile逸贾。uKey_api_key我們在自己的蒲公英帳號上可以查看到陨仅,而file參數(shù)需要我們提供apk文件的路徑,所以我們先想辦法拿到路徑铝侵。

這里我們定義一個方法:getApkPath()灼伤,通過buildDir + 固定的outputs/apk/${buildType}/app-${buildType}.apk地址來獲取apk路徑。

def getApkPath() {
    String buildType = getBuildType().toLowerCase()
    return new File(buildDir, "outputs/apk/${buildType}/app-${buildType}.apk").absolutePath
}

getApkPath()中我們需要知道編譯打包和用的buildType咪鲜,這里定義一個方法getBuildType()進(jìn)行獲取狐赡。本人對gradle腳本不太熟悉,暫時通過打包參數(shù)來獲取相應(yīng)的buildType疟丙,足以應(yīng)付一般場景颖侄。

def getBuildType() {
    Gradle gradle = getGradle()
    String args = gradle.getStartParameter().getTaskRequests().toString()
    if (args.contains("assembleRelease")) {
        return "Release"
    } else if (args.contains("assembleDebug")) {
        return "Debug"
    }
    return "Debug"
}

然后我們把上傳命令封裝在一個task里:

task pgyer(type: Exec) {

    String apiKey = "6767f341ee7ed1f9fd4699e6ed71e773" // todo 這里替換為自己的蒲公英的apiKey
    String userKey = "0cf7164e5158effc01cc24c0667266c4" // todo 這里替換為自己的蒲公英的userKey

    commandLine 'curl'
    args '-k', 'http://www.pgyer.com/apiv1/app/upload',
            '-F', "uKey=${userKey}",
            '-F', "_api_key=${apiKey}",
            '-F', "file=@${getApkPath()}"
}

這樣我們就在一個task可以調(diào)用啦。進(jìn)入Terminal享郊,gradlew clean assembleDebug pgyer览祖,gradle腳本便會執(zhí)行清理、編譯打包炊琉、上傳的工作展蒂。等命令執(zhí)行完,我們便能在蒲公英上看到新鮮出爐的安裝包了。

二玄货、自動添加日志

筆者目前想到自動從git記錄中讀取近期的log皇钞,進(jìn)行一定格式化后上傳到蒲公英。

首先我們來讀取git的記錄:

def getGitLog() {
    return 'git log --pretty=format:"%s___in___%ad___by___%an" -10 --date=format:%c'.execute().text
}

其中%s__in__%ad__by__%an表示內(nèi)容+日期+作者松捉,-10表示顯示最近10條log夹界,--date=format:%c表示輸出本地的日期時間。這里發(fā)現(xiàn)執(zhí)行命令時如有空格不能輸出git log隘世,所以使用___來代替空格可柿。

有時我們會想添加自定義的信息進(jìn)去,所以需要一個參數(shù)用于傳遞自定義的信息丙者,這里將參數(shù)定義為pgyerDesc复斥,然后在gradle中獲取pgyerDesc

if (project.hasProperty("pgyerDesc")) {
    desc = pgyerDesc + "\n" + desc
}

對于傳入的參數(shù)pgyerDesc,在Windows中械媒,輸入中文會出現(xiàn)亂碼目锭,應(yīng)該是編碼格式的問題。筆者用的是Ubuntu系統(tǒng)纷捞,所以不會有這個問題的出現(xiàn)痢虹。所以這個亂碼的情況就交給Windows的同學(xué)自己去解決啦。

好了主儡,整合起來奖唯,蒲公英自動上傳安裝包和日志的gradle腳本就實(shí)現(xiàn)了。

task pgyer(type: Exec) {

    String apiKey = "6767f341ee7ed1f9fd4699e6ed71e773" // todo 這里替換為自己的蒲公英的apiKey
    String userKey = "0cf7164e5158effc01cc24c0667266c4" // todo 這里替換為自己的蒲公英的userKey
    String desc = getGitLog()

    if (project.hasProperty("pgyerDesc")) {
        desc = pgyerDesc + "\n" + desc
    }
    if (desc == null || desc.isEmpty()) {
        desc = "保持沉默"
    }

    commandLine 'curl'
    args '-k', 'http://www.pgyer.com/apiv1/app/upload',
            '-F', "uKey=${userKey}",
            '-F', "_api_key=${apiKey}",
            '-F', "file=@${getApkPath()}",
            '-F', "updateDescription=${desc}"
}

三糜值、總結(jié)

最后丰捷,為了保持功能模塊分工清晰和代碼復(fù)用,我們把新建一個pgyer.gradle的文件寂汇,將這個task單獨(dú)存放起來病往。再在appbuild.gradle中通過apply from的方式引入pgyer.gradle。我們運(yùn)行gradlew assembleDebug pgyer -P pgyerDesc="請多多關(guān)注"健无,就可以看到想要的效果了荣恐。

該腳本是在gradle4.4的環(huán)境下進(jìn)行,這里也做了一個Demo放在Github上了累贤,里面的一些參數(shù)設(shè)置可能根據(jù)小伙伴自己的需求再做調(diào)整。希望各位能夠喜歡這篇蒲公英自動上傳腳本的文章少漆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臼膏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子示损,更是在濱河造成了極大的恐慌渗磅,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異始鱼,居然都是意外死亡仔掸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門医清,熙熙樓的掌柜王于貴愁眉苦臉地迎上來起暮,“玉大人,你說我怎么就攤上這事会烙「号常” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵柏腻,是天一觀的道長纸厉。 經(jīng)常有香客問我,道長五嫂,這世上最難降的妖魔是什么颗品? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮沃缘,結(jié)果婚禮上躯枢,老公的妹妹穿的比我還像新娘。我一直安慰自己孩灯,他們只是感情好闺金,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峰档,像睡著了一般败匹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讥巡,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天掀亩,我揣著相機(jī)與錄音,去河邊找鬼欢顷。 笑死槽棍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抬驴。 我是一名探鬼主播炼七,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼布持!你這毒婦竟也來了豌拙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤题暖,失蹤者是張志新(化名)和其女友劉穎按傅,沒想到半個月后捉超,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唯绍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年拼岳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片况芒。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡惜纸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牛柒,到底是詐尸還是另有隱情堪簿,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布皮壁,位于F島的核電站椭更,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛾魄。R本人自食惡果不足惜虑瀑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滴须。 院中可真熱鬧舌狗,春花似錦、人聲如沸扔水。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魔市。三九已至主届,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間待德,已是汗流浹背君丁。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留将宪,地道東北人绘闷。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像较坛,于是被迫代替她去往敵國和親印蔗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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