日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir

發(fā)布時(shí)間:2024/9/27 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android渠道包自动发布市场,Android Gradle实现打包指定渠道后自动上传到fir 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。