用Gradle上傳apk到蒲公英

為了方便打包給測試部的同學測試晌端,我們會把測試包上傳到蒲公英平臺,蒲公英平臺又提供了上傳apk的api恬砂,所以咧纠,可以直接在Android Studio里面上傳,寫個Gradle Task運行一下就行泻骤。

需要傳包的時候漆羔,點一下命令就好:


上傳完,可以看到返回信息狱掂,和一個apk安裝地址钧椰。

先看看蒲公英上傳api
POST http://www.pgyer.com/apiv2/app/upload

POST參數(shù)

參數(shù) 類型 說明
_api_key String (必填) API Key [點擊獲取_api_key](javascript:void(0))
file File (必填) 需要上傳的ipa或者apk文件
buildInstallType Integer (選填)應用安裝方式,值為(1,2,3符欠,4)。1:公開瓶埋,2:密碼安裝希柿,3:邀請安裝,4:回答問題安裝养筒。默認為1公開
buildPassword String (選填) 設(shè)置App安裝密碼曾撤,如果不想設(shè)置密碼,請傳空字符串晕粪,或不傳挤悉。
buildUpdateDescription String (選填) 版本更新描述,請傳空字符串巫湘,或不傳装悲。
buildName String (選填) 應用名稱
buildInstallQuestoin String (選填)如果安裝方式為回答問題安裝昏鹃,填寫安裝問題。
buildInstallAnswer String (選填)如果安裝方式為回答問題安裝诀诊,填寫安裝問題的答案洞渤。
buildInstallDate Interger (選填)是否設(shè)置安裝有效期,值為:1 設(shè)置有效時間属瓣, 2 長期有效载迄,如果不填寫不修改上一次的設(shè)置
buildInstallStartDate String (選填)安裝有效期開始時間,字符串型抡蛙,如:2018-01-01
buildInstallEndDate String (選填)安裝有效期結(jié)束時間护昧,字符串型,如:2018-12-31
buildChannelShortcut String (選填)所需更新的指定渠道的下載短鏈接粗截,只可指定一個渠道惋耙,字符串型,如:abcd

接下來慈格,新建一個Gradle文件

import groovy.json.JsonSlurper

/**
 * 上傳apk到蒲公英
 */
def uploadApk() {
    //查找上傳的apk文件
    def apkDir = new File("build/outputs/apk/debug")
    if (!apkDir.exists()) {
        throw new RuntimeException("apk output path not exists!")
    }

    def apk = null
    for (int i = apkDir.listFiles().length - 1; i >= 0; i--) {
        File file = apkDir.listFiles()[i]
        if (file.name.endsWith(".apk")) {
            apk = file
            break
        }
    }
    if (apk == null) {
        throw new RuntimeException("apk file not exists!")
    }

    println "*************** start upload file ***************"

    def twoHyphens = "--"
    def boundary = "*********"
    def end = "\r\n"

    //模擬表單上傳 multipart/form-data
    def conn = new URL("https://www.pgyer.com/apiv2/app/upload").openConnection()
    conn.setRequestMethod('POST')
    conn.setRequestProperty("Connection", "Keep-Alive")
    conn.setRequestProperty("Charset", "UTF-8")
    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary)
    conn.setDoInput(true)
    conn.setDoOutput(true)

    //添加參數(shù):_api_key
    def sb = new StringBuilder()
    sb.append(twoHyphens).append(boundary).append(end)
    sb.append("Content-Disposition: form-data; name=_api_key")
    sb.append(end).append(end)
    sb.append("填自己的apikey").append(end)

    //添加參數(shù):buildUpdateDescription 更新日志怠晴,取值git
    sb.append(twoHyphens).append(boundary).append(end)
    sb.append("Content-Disposition: form-data; name=buildUpdateDescription")
    sb.append(end).append(end)
    sb.append(getGitVersionInfo()).append(end)

    //添加參數(shù):buildInstallType 設(shè)置密碼安裝
    sb.append(twoHyphens).append(boundary).append(end)
    sb.append("Content-Disposition: form-data; name=buildInstallType")
    sb.append(end).append(end)
    sb.append(2).append(end)

    //添加參數(shù):buildPassword 設(shè)置密碼
    sb.append(twoHyphens).append(boundary).append(end)
    sb.append("Content-Disposition: form-data; name=buildPassword")
    sb.append(end).append(end)
    sb.append("1024").append(end)

    //添加參數(shù)file: 需要上傳的apk文件
    sb.append(twoHyphens).append(boundary).append(end)
    sb.append("Content-Disposition: form-data; name=file;filename=").append(apk.getName())
    sb.append(end).append(end)

    def dos = new DataOutputStream(conn.getOutputStream())
    dos.writeBytes(sb.toString())
    dos.flush()
    sb.delete(0, sb.length())

    def fis = new FileInputStream(apk)
    byte[] bf = new byte[8192]
    int len
    while ((len = fis.read(bf)) != -1) {
        dos.write(bf, 0, len)
    }
    sb.append(end)
    sb.append(twoHyphens).append(boundary).append(end)
    dos.writeBytes(sb.toString())

    dos.flush()
    fis.close()
    dos.close()
    conn.connect()

    def text = conn.getContent().text
    def resp = new JsonSlurper().parseText(text)

    println text
    println "*************** upload finish ***************"

    if (resp.code != 0) {
        throw new RuntimeException(resp.message)
    }

    //瀏覽器中打開短連接
    def url = "https://www.pgyer.com/" + resp.data.buildShortcutUrl
    print("上傳成功,應用鏈接:" + url)

}


def getGitVersionInfo() {
    return 'git log -n 1'.execute().text.trim()
}

//打包測試環(huán)境apk 上傳蒲公英 發(fā)送郵件功能使用蒲公英自帶的郵件功能
task uploadApk(group: "upload") {
    dependsOn("assembleDebug")

    doLast {
        uploadApk()
    }
}

然后浴捆,把這個文件丟到根目錄蒜田,再在app的build里面引用一下就行。

apply plugin: 'com.android.application'

apply from: "../uploadApk.gradle"

注意地方:
1选泻、上傳目錄需要根據(jù)自己的情況來修改
2冲粤、得填上自己的key
3、可以按需根據(jù)api文檔傳不同的值來設(shè)置上傳參數(shù)(密碼安裝等)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末页眯,一起剝皮案震驚了整個濱河市梯捕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窝撵,老刑警劉巖傀顾,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碌奉,居然都是意外死亡短曾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門赐劣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫉拐,“玉大人,你說我怎么就攤上這事魁兼⊥衽牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長盖呼。 經(jīng)常有香客問我儒鹿,道長,這世上最難降的妖魔是什么塌计? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任挺身,我火速辦了婚禮,結(jié)果婚禮上锌仅,老公的妹妹穿的比我還像新娘章钾。我一直安慰自己,他們只是感情好热芹,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布贱傀。 她就那樣靜靜地躺著,像睡著了一般伊脓。 火紅的嫁衣襯著肌膚如雪府寒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天报腔,我揣著相機與錄音株搔,去河邊找鬼。 笑死纯蛾,一個胖子當著我的面吹牛纤房,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翻诉,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼炮姨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碰煌?” 一聲冷哼從身側(cè)響起舒岸,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芦圾,沒想到半個月后蛾派,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡个少,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年碍脏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稍算。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖役拴,靈堂內(nèi)的尸體忽然破棺而出糊探,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布科平,位于F島的核電站褥紫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞪慧。R本人自食惡果不足惜髓考,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弃酌。 院中可真熱鬧氨菇,春花似錦、人聲如沸妓湘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榜贴。三九已至豌研,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唬党,已是汗流浹背鹃共。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驶拱,地道東北人霜浴。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像屯烦,于是被迫代替她去往敵國和親坷随。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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