//dependsOn關(guān)聯(lián)打包任務(wù) 即執(zhí)行上傳前先打包
task uploadFir(dependsOn: ['assembleDebug']) {
def fir_api_token = "fir后臺(tái)的api token"
doLast {
println "即將上傳到fir..."
//獲取fir上傳憑證的各個(gè)字段
def appInfo = ("curl -X POST -d type=android&" +
//獲取app applicationId
"bundle_id=$project.android.defaultConfig.applicationId&" +
"api_token=$fir_api_token " +
"http://api.bq04.com/apps").execute().text
//json解析對(duì)象拿到的是Map, 集合對(duì)應(yīng)的是array, 按照這個(gè)規(guī)則取出我們需要的數(shù)據(jù)
def appInfoBean = new groovy.json.JsonSlurper().parseText(appInfo)
def key = appInfoBean["cert"]["binary"]["key"]
def url = appInfoBean["cert"]["binary"]["upload_url"]
def token = appInfoBean["cert"]["binary"]["token"]
//執(zhí)行上傳命令 注意apk路徑不能包含中文砌滞、空格
//applicationVariants[0]對(duì)應(yīng)的是某個(gè)buildType 具體可打印查看 默認(rèn)0為debug 1為release
def apkFile = project.android.applicationVariants[0].outputs.first().outputFile
def upload = ("curl -X POST --form file=@$apkFile" +
" -F token=$token" +
" -F key=$key" +
//git提交次數(shù) 作為測(cè)試包版本后綴
" -F x:version=$project.android.defaultConfig.versionName"
+ "." + ("git rev-list --count HEAD").execute().text +
" -F x:build=$project.android.defaultConfig.versionCode" +
" -F \"x:changelog=" +
(("git log --no-merges --pretty=format:%s_____by__%cn<br> HEAD -5")
.execute().text).replace("\n", "") + "\"" + " $url")
println upload
upload.execute().text
println "上傳完成"
}
}
說(shuō)明:
1、x:version參數(shù)使用了git rev-list --count HEAD獲取當(dāng)前分支提交次數(shù)坏怪,方便測(cè)試人員區(qū)分手中已安裝的是否為最新包贝润;app內(nèi)可以通過(guò)buildType判斷測(cè)試環(huán)境下拼接此版本號(hào) 用于與fir版本對(duì)比
2、x:changelog參數(shù)使用git log --no-merges --pretty=format:%s_____by__%cn
HEAD -5命令拿到git最新的五次提交日志铝宵,具體格式可自定義 參考git log命令(注意該參數(shù)必須用“”包裹 否則影響curl參數(shù)識(shí)別及換行)
注意:
win10自帶的curl有中文亂碼問(wèn)題 兩種解決方式:
1打掘、修改系統(tǒng)編碼(不建議,會(huì)導(dǎo)致部分軟件亂碼)
控制面板->時(shí)鐘和區(qū)域->區(qū)域->管理->更改系統(tǒng)區(qū)域設(shè)置->勾選使用utf-8支持 重啟即可
2鹏秋、官網(wǎng)下載curl 并放置到項(xiàng)目目錄中使用(建議)
地址:(https://curl.se/download.html)
注意修改腳本中的curl位置為項(xiàng)目中放置的curl位置 如放置到了項(xiàng)目根目錄下lib目錄中 則修改為lib/curl 同目錄直接引用