為了方便打包給測試部的同學測試晌端,我們會把測試包上傳到蒲公英平臺,蒲公英平臺又提供了上傳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ù)(密碼安裝等)