电商企业网站建设情况,成都百度seo代理,贡井区建设局网站?,深圳做网站的公司有哪些fir分三个主要步骤1.获取fir上传凭证2.上传APKAPP logo图标3.获取最新的下载地址供别人下载注#xff1a;python使用的是requests网络请求库1.获取fir上传凭证image.png代码如下#xff1a;# 第一步#xff1a;获取fir上传凭证print(get fir upload certificate…fir分三个主要步骤1.获取fir上传凭证2.上传APKAPP logo图标3.获取最新的下载地址供别人下载注python使用的是requests网络请求库1.获取fir上传凭证image.png代码如下# 第一步获取fir上传凭证print(get fir upload certificate)icondict {} # 后面上传图标和apk需要使用的参数这里保存下来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.上传APKlogo图标image.png代码如下# 第二步上传APKtry: 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(urlbinarydict[upload_url], filesapkfile, dataparam, verifyFalse)except Exception as e: print(upload apk error)traceback.print_exc()# 第三步上传APK logotry:apklogofile {file: open(apklogo, rb)}param {key: icondict[key], token: icondict[token]}req requests.post(urlicondict[upload_url], filesapklogofile, dataparam, verifyFalse)except Exception: print(upload apk error)traceback.print_exc()3.获取最新的下载地址image.png代码如下# 第四步获取APK最新下载地址queryurl http://api.fir.im/apps/latest/%s?api_token%stypeandroid % (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()代码里面如下参数都是动态传入的配合AndroidStudio自带的gradle使用appname sys.argv[1] # app名称apppackage sys.argv[2] # 唯一包名也即是bundle_idappversion sys.argv[3] # app版本号appbuild sys.argv[4] # app build号apitoken sys.argv[5] # fir tokenapklogo sys.argv[6] # 等待上传的APK logo路径apkpath sys.argv[7] # 等待上传的APK路径apkchangelog sys.argv[8] # 等待上传的APK更新日志(可能没有填写)完整代码# encoding utf-8import sysimport tracebackimport requestsrequests.packages.urllib3.disable_warnings()def uploadtofir():# 参数检查paramnum 8syslen len(sys.argv) if syslen print(please input param) returnelse: # 基础参数appname sys.argv[1] # app名称apppackage sys.argv[2] # 唯一包名也即是bundle_idappversion sys.argv[3] # app版本号appbuild sys.argv[4] # app build号apitoken sys.argv[5] # fir tokenapklogo sys.argv[6] # 等待上传的APK logo路径apkpath sys.argv[7] # 等待上传的APK路径apkchangelog syslen 9 and sys.argv[8] or # 等待上传的APK更新日志(可能没有填写)# 第一步获取fir上传凭证print(get fir upload certificate)icondict {} # 后面上传图标和apk需要使用的参数这里保存下来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() # 第二步上传APKtry: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(urlbinarydict[upload_url], filesapkfile, dataparam, verifyFalse) except Exception as e:print(upload apk error)traceback.print_exc() # 第三步上传APK logotry:apklogofile {file: open(apklogo, rb)}param {key: icondict[key], token: icondict[token]}req requests.post(urlicondict[upload_url], filesapklogofile, dataparam, verifyFalse) except Exception:print(upload apk error)traceback.print_exc() # 第四步获取APK最新下载地址queryurl http://api.fir.im/apps/latest/%s?api_token%stypeandroid % (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配置将上面写好的.py文件复制到项目的app目录下(非project目录)同时在app级别下的gradle文件中添加如下代码(添加到android{}里面)//自定义一个任务实现打包meisha渠道自动上传到firtask assembleWithFir{dependsOn assembleXXXXRelease//打包自己需要的渠道doLast{def appname你的APP名称def apppackageproject.android.defaultConfig.applicationIddef appversionproject.android.defaultConfig.versionNamedef appbuildproject.android.defaultConfig.versionCodedef apitoken你的fir ApiTokendef apklogo你的APK LOGOdef apkpath你的APK本地地址def apkchangelog//调用python脚本 这个脚本需要放在app工程目录下不要放在project目录下def processpython UploadToFir.py ${appname} ${apppackage} ${appversion} ${appbuild} ${apitoken} ${apklogo} ${apkpath} ${apkchangelog}.execute() //打印Python脚本日志便于出错调试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后发现多了一个assembleWithFir命令image.png双击assembleWithFir开始打包刚才指定的渠道之后自动上传APK到fir如下点击该连接就能查看相关了image.png注意事项.py python文件要放在app级别的目录下(非project)确保电脑已安装python运行环境requests网络请求库作者CKTim链接https://www.jianshu.com/p/833cc4d0c0ae