//这个task 需要放在 app/build.gradle文件中的android 代码块里
task assemblewithlog {
dependsOn 'assembleDebug'
doLast {
//这个需要配置一下,app的图标
def appicon = "app/src/main/res/drawable/icon.png"
//这个需要配置一下,app的输出到fir.im的名称
def outId = "yitiji_Debug"
//取 apk的版本名和apk的输出文件目录
def verName = project.android.defaultConfig.versionName;
def apkpath = applicationVariants.first().outputs.first().outputFile
//调用python脚本 这个脚本需要放在工程目录下
def process = "python3 uploadfirim.py ${outId} ${verName} ${appicon} ${apkpath}".execute()
// Wait till the process completes before continuing
println("上传apk中")
//将python代码里面打印的内容在gradle窗口中打印出来
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代码直到python代码执行结束
int exitValue = process.waitFor()
println "上传结束 with value $exitValue"
}
}
调用示例
curl -X "POST" "http://api.fir.im/apps" \
-H "Content-Type: application/json" \
-d "{\"type\":\"android\", \"bundle_id\":\"xx.x\", \"api_token\":\"aa\"}"
响应示例
# status: 201
{
"id": "5592ceb6537069f2a8000000",
"type": "ios",
"short": "yk37",
"cert": {
"icon": {
"key": "xxxxx",
"token": "xxxxxx",
"upload_url": "http://upload.qiniu.com"
},
"binary": {
"key": "xxxxx",
"token": "xxxxxx",
"upload_url": "http://upload.qiniu.com"
}
}
}
#encoding = utf-8
import traceback
from urllib import request
from urllib import parse
import requests
import pycurl
import json
from io import BytesIO
import time
import sys
def uploadtofirim():
minlen = 5
#检查参数传递,定义好按照 name version 图标路径 apk路径 apitoken 的顺序传递参数
syslen = len(sys.argv)
if syslen < minlen:
print("传递参数有误")
return
if syslen > 5:
apitoken = sys.argv[5]
else:
#这是一个无效的token,只是为了展示用,需要替换为你自己的fir.imtoken
apitoken = "7a15a28c75005akkkklllle051c71"
appname = sys.argv[1]
appversion = sys.argv[2]
iconpath = sys.argv[3]
apkpath = sys.argv[4]
#利用urllib 请求并获取响应,数据格式见fir.im文档
data = parse.urlencode({'type': 'android', 'bundle_id': appname, 'api_token': apitoken})
datas = data.encode('utf-8')
req = request.Request(url='http://api.fir.im/apps', data=datas, method='POST')
icondict = {}
binarydict = {}
try:
with request.urlopen(req) as f:
strdec = f.read().decode('utf-8')
resjson = json.loads(strdec)
#将请求的结果存起来后面用
icondict = (resjson["cert"]["icon"])
binarydict = (resjson["cert"]["binary"])
except:
print("读取地址失败")
pass
调用示例
curl -F "key=xxxxxx" \
-F "token=xxxxx" \
-F "file=@aa.apk" \
-F "x:name=aaaa" \
-F "x:version=a.b.c" \
-F "x:build=1" \
-F "x:release_type=Adhoc" \ #type=ios 使用
-F "x:changelog=first" \
https://up.qbox.me
响应示例
# status: 201
{ "is_completed": true }
#接上面的py代码,复制时注意下格式和缩进
try:
local_filename = iconpath
c = pycurl.Curl()
print("上传图片")
files = {'file': open(local_filename, 'rb')}
paramdata = {'key': icondict["key"],"token":icondict["token"]}
#用 requests库上传图标文件并读取响应,verify=False是因为上传地址是https,不这样写会报错
res = requests.post(icondict["upload_url"], files=files, data=paramdata,verify=False)
print(res.text)
local_apkfilename = apkpath
timenow = str('time :' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
#用 pycurl库上传apk文件并读取响应
c.setopt(c.URL, binarydict["upload_url"])
c.setopt(c.HTTPPOST, [
("file", (c.FORM_FILE, local_apkfilename)),
("key", binarydict["key"]),
("token", binarydict["token"]),
("x:name", appname),
("x:version", appversion),
("x:build", '1'),
("x:changelog", timenow)
])
print("上传apk")
c.perform()
c.close()
print("上传成功")
except Exception as e:
print(e)
print("上传文件失败,请检查")
return
请求示例
curl http://api.fir.im/apps/latest/xxx?api_token=xxx #使用 `id` 请求
curl http://api.fir.im/apps/latest/im.fir.xxx?api_token=xxx&type=android #根据`bundle_id` 获取更新
响应数据
# status: 200
{
"name": "fir.im",
"version": "1.0",
"changelog": "更新日志",
"versionShort": "1.0.5",
"build": "6",
"installUrl": "http://download.fir.im/v2/app/install/xxxxxxxxxxxxxxxxxxxx?download_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"install_url": "http://download.fir.im/v2/app/install/xxxxxxxxxxxxxxxx?download_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx", # 新增字段
"update_url": "http://fir.im/fir", # 新增字段
"binary": {
"fsize": 6446245
}
}
#接上面的py代码,复制时注意下格式和缩进
queryurl='http://api.fir.im/apps/latest/%s?api_token=%s&type=android'%(appname,apitoken)
print(queryurl)
req = request.Request(url=queryurl,method="GET")
try:
with request.urlopen(req) as f:
strdec = f.read().decode('utf-8')
resjson = json.loads(strdec)
print("apk下载地址 " + resjson["update_url"])
except Exception as e:
print(e)
traceback.print_exc()
print("读取地址失败")
pass
#encoding = utf-8
import traceback
from urllib import request
from urllib import parse
import requests
import pycurl
import json
from io import BytesIO
import time
import sys
def uploadtofirim():
minlen = 5
syslen = len(sys.argv)
if syslen < minlen:
print("传递参数有误")
return
if syslen > 5:
apitoken = sys.argv[5]
else:
apitoken = "7akkkkkkkkkkkk1c71"
appname = sys.argv[1]
appversion = sys.argv[2]
iconpath = sys.argv[3]
apkpath = sys.argv[4]
data = parse.urlencode({'type': 'android', 'bundle_id': appname, 'api_token': apitoken})
datas = data.encode('utf-8')
req = request.Request(url='http://api.fir.im/apps', data=datas, method='POST')
icondict = {}
binarydict = {}
try:
with request.urlopen(req) as f:
strdec = f.read().decode('utf-8')
resjson = json.loads(strdec)
icondict = (resjson["cert"]["icon"])
binarydict = (resjson["cert"]["binary"])
except:
print("读取地址失败")
pass
try:
local_filename = iconpath
c = pycurl.Curl()
print("上传图片")
files = {'file': open(local_filename, 'rb')}
paramdata = {'key': icondict["key"],"token":icondict["token"]}
res = requests.post(icondict["upload_url"], files=files, data=paramdata,verify=False)
print(res.text)
local_apkfilename = apkpath
timenow = str('time :' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
c.setopt(c.URL, binarydict["upload_url"])
c.setopt(c.HTTPPOST, [
("file", (c.FORM_FILE, local_apkfilename)),
("key", binarydict["key"]),
("token", binarydict["token"]),
("x:name", appname),
("x:version", appversion),
("x:build", '1'),
("x:changelog", timenow)
])
print("上传apk")
c.perform()
c.close()
print("上传成功")
except Exception as e:
print(e)
print("上传文件失败,请检查")
return
queryurl='http://api.fir.im/apps/latest/%s?api_token=%s&type=android'%(appname,apitoken)
print(queryurl)
req = request.Request(url=queryurl,method="GET")
try:
with request.urlopen(req) as f:
strdec = f.read().decode('utf-8')
resjson = json.loads(strdec)
print("apk下载地址 " + resjson["update_url"])
except Exception as e:
print(e)
traceback.print_exc()
print("读取地址失败")
pass
# appid vesion icon apk apitoken
if __name__ == '__main__':
uploadtofirim()
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有