//dependsOn关联打包任务 即执行上传前先打包
task uploadFir(dependsOn: ['assembleDebug']) {
def fir_api_token = "fir后台的api token"
doLast {
println "即将上传到fir..."
//获取fir上传凭证的各个字段
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解析对象拿到的是Map, 集合对应的是array, 按照这个规则取出我们需要的数据
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"]
//执行上传命令 注意apk路径不能包含中文、空格
//applicationVariants[0]对应的是某个buildType 具体可打印查看 默认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提交次数 作为测试包版本后缀
" -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 "上传完成"
}
}
说明:
1、x:version参数使用了git rev-list --count HEAD获取当前分支提交次数,方便测试人员区分手中已安装的是否为最新包;app内可以通过buildType判断测试环境下拼接此版本号 用于与fir版本对比
2、x:changelog参数使用git log --no-merges --pretty=format:%s_____by__%cn
HEAD -5命令拿到git最新的五次提交日志,具体格式可自定义 参考git log命令(注意该参数必须用“”包裹 否则影响curl参数识别及换行)
注意:
win10自带的curl有中文乱码问题 两种解决方式:
1、修改系统编码(不建议,会导致部分软件乱码)
控制面板->时钟和区域->区域->管理->更改系统区域设置->勾选使用utf-8支持 重启即可
2、官网下载curl 并放置到项目目录中使用(建议)
地址:(https://curl.se/download.html)
注意修改脚本中的curl位置为项目中放置的curl位置 如放置到了项目根目录下lib目录中 则修改为lib/curl 同目录直接引用