Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir
fir分三個(gè)主要步驟1.獲取fir上傳憑證
2.上傳APK+APP logo圖標(biāo)
3.獲取最新的下載地址供別人下載
注:python使用的是requests網(wǎng)絡(luò)請(qǐng)求庫(kù)
1.獲取fir上傳憑證
image.png
代碼如下:#?第一步:獲取fir上傳憑證
print("get?fir?upload?certificate")
icondict?=?{}??#?后面上傳圖標(biāo)和apk需要使用的參數(shù),這里保存下來(lái)
binarydict?=?{}????????try:
req?=?requests.post("http://api.fir.im/apps",
{'type':?'android',?'bundle_id':?apppackage,?'api_token':?apitoken})
resjson?=?req.json()
icondict?=?(resjson["cert"]["icon"])
binarydict?=?(resjson["cert"]["binary"])????????????print("get?fir?upload?certificate?success")
except?Exception:????????????print("get?fir?upload?certificate?error")
traceback.print_exc()
2.上傳APK+logo圖標(biāo)
image.png
代碼如下:#?第二步:上傳APK
try:????????????print("uploading?apk......")
apkfile?=?{'file':?open(apkpath,?'rb')}
param?=?{"key":?binarydict["key"],?????????????????????"token":?binarydict["token"],?????????????????????"x:name":?appname,?????????????????????"x:version":?appversion,?????????????????????"x:build":?appbuild,?????????????????????"x:changelog":?apkchangelog}
req?=?requests.post(url=binarydict["upload_url"],?files=apkfile,?data=param,?verify=False)
except?Exception?as?e:????????????print("upload?apk?error")
traceback.print_exc()#?第三步:上傳APK?logo
try:
apklogofile?=?{'file':?open(apklogo,?'rb')}
param?=?{"key":?icondict["key"],?????????????????????"token":?icondict["token"]}
req?=?requests.post(url=icondict["upload_url"],?files=apklogofile,?data=param,?verify=False)
except?Exception:????????????print("upload?apk?error")
traceback.print_exc()
3.獲取最新的下載地址
image.png
代碼如下:#?第四步:獲取APK最新下載地址
queryurl?=?'http://api.fir.im/apps/latest/%s?api_token=%s&type=android'?%?(apppackage,?apitoken)????????try:
req?=?requests.get(queryurl)
update_url?=?(req.json()["update_url"])????????????print("upload?apk?success,?update?url?is?"?+?update_url)
except?Exception:????????????print("upload?apk?error")
traceback.print_exc()
代碼里面如下參數(shù)都是動(dòng)態(tài)傳入的,配合AndroidStudio自帶的gradle使用
appname = sys.argv[1] ?# app名稱(chēng)
apppackage = sys.argv[2] ?# 唯一包名,也即是bundle_id
appversion = sys.argv[3] ?# app版本號(hào)
appbuild = sys.argv[4] ?# app build號(hào)
apitoken = sys.argv[5] ?# fir token
apklogo = sys.argv[6] ?# 等待上傳的APK logo路徑
apkpath = sys.argv[7] ?# 等待上傳的APK路徑
apkchangelog = sys.argv[8] ?# 等待上傳的APK更新日志(可能沒(méi)有填寫(xiě))
完整代碼#?encoding?=?utf-8import?sysimport?tracebackimport?requests
requests.packages.urllib3.disable_warnings()def?uploadtofir():
#?參數(shù)檢查
paramnum?=?8
syslen?=?len(sys.argv)????if?syslen?
print("please?input?param")????????return
else:????????#?基礎(chǔ)參數(shù)
appname?=?sys.argv[1]??#?app名稱(chēng)
apppackage?=?sys.argv[2]??#?唯一包名,也即是bundle_id
appversion?=?sys.argv[3]??#?app版本號(hào)
appbuild?=?sys.argv[4]??#?app?build號(hào)
apitoken?=?sys.argv[5]??#?fir?token
apklogo?=?sys.argv[6]??#?等待上傳的APK?logo路徑
apkpath?=?sys.argv[7]??#?等待上傳的APK路徑
apkchangelog?=?syslen?==?9?and?sys.argv[8]?or?""??#?等待上傳的APK更新日志(可能沒(méi)有填寫(xiě))
#?第一步:獲取fir上傳憑證
print("get?fir?upload?certificate")
icondict?=?{}??#?后面上傳圖標(biāo)和apk需要使用的參數(shù),這里保存下來(lái)
binarydict?=?{}????????try:
req?=?requests.post("http://api.fir.im/apps",
{'type':?'android',?'bundle_id':?apppackage,?'api_token':?apitoken})
resjson?=?req.json()
icondict?=?(resjson["cert"]["icon"])
binarydict?=?(resjson["cert"]["binary"])
print("get?fir?upload?certificate?success")????????except?Exception:
print("get?fir?upload?certificate?error")
traceback.print_exc()????????#?第二步:上傳APK
try:
print("uploading?apk......")
apkfile?=?{'file':?open(apkpath,?'rb')}
param?=?{"key":?binarydict["key"],?????????????????????"token":?binarydict["token"],?????????????????????"x:name":?appname,?????????????????????"x:version":?appversion,?????????????????????"x:build":?appbuild,?????????????????????"x:changelog":?apkchangelog}
req?=?requests.post(url=binarydict["upload_url"],?files=apkfile,?data=param,?verify=False)????????except?Exception?as?e:
print("upload?apk?error")
traceback.print_exc()????????#?第三步:上傳APK?logo
try:
apklogofile?=?{'file':?open(apklogo,?'rb')}
param?=?{"key":?icondict["key"],?????????????????????"token":?icondict["token"]}
req?=?requests.post(url=icondict["upload_url"],?files=apklogofile,?data=param,?verify=False)????????except?Exception:
print("upload?apk?error")
traceback.print_exc()????????#?第四步:獲取APK最新下載地址
queryurl?=?'http://api.fir.im/apps/latest/%s?api_token=%s&type=android'?%?(apppackage,?apitoken)????????try:
req?=?requests.get(queryurl)
update_url?=?(req.json()["update_url"])
print("upload?apk?success,?update?url?is?"?+?update_url)????????except?Exception:
print("upload?apk?error")
traceback.print_exc()if?__name__?==?'__main__':
uploadtofir()
Android Gradle配置
將上面寫(xiě)好的.py文件復(fù)制到項(xiàng)目的app目錄下(非project目錄),同時(shí)在app級(jí)別下的gradle文件中添加如下代碼(添加到android{}里面)//自定義一個(gè)任務(wù),實(shí)現(xiàn)打包meisha渠道自動(dòng)上傳到fir
task?assembleWithFir{
dependsOn?'assembleXXXXRelease'//打包自己需要的渠道
doLast{
def?appname="你的APP名稱(chēng)"
def?apppackage=project.android.defaultConfig.applicationId
def?appversion=project.android.defaultConfig.versionName
def?appbuild=project.android.defaultConfig.versionCode
def?apitoken="你的fir?ApiToken"
def?apklogo="你的APK?LOGO"
def?apkpath="你的APK本地地址"
def?apkchangelog=""
//調(diào)用python腳本??這個(gè)腳本需要放在app工程目錄下,不要放在project目錄下
def?process="python?UploadToFir.py?${appname}?${apppackage}?${appversion}?${appbuild}?${apitoken}?${apklogo}?${apkpath}?${apkchangelog}".execute()????????????//打印Python腳本日志,便于出錯(cuò)調(diào)試
ByteArrayOutputStream?result?=?new?ByteArrayOutputStream()
def?inputStream?=?process.getInputStream()????????????byte[]?buffer?=?new?byte[1024]????????????int?length????????????while?((length?=?inputStream.read(buffer))?!=?-1)?{
result.write(buffer,?0,?length)
}
println(result.toString("utf-8"))
}
}
至此全部搞定,同步一下gradle后發(fā)現(xiàn)多了一個(gè)assembleWithFir命令
image.png
雙擊assembleWithFir開(kāi)始打包剛才指定的渠道,之后自動(dòng)上傳APK到fir,如下點(diǎn)擊該連接就能查看相關(guān)了
image.png
注意事項(xiàng):.py python文件要放在app級(jí)別的目錄下(非project)
確保電腦已安裝python運(yùn)行環(huán)境,requests網(wǎng)絡(luò)請(qǐng)求庫(kù)
作者:CKTim
鏈接:https://www.jianshu.com/p/833cc4d0c0ae
總結(jié)
以上是生活随笔為你收集整理的Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机控制系统笔记,笔记型计算机的电源控
- 下一篇: android文件读取工具类,Andro