利用Gradle+Python3自动打包Android APK上传到蒲公英。
面对每次都要打包一个版本发布给测试,都要手动打包签名~然后登录上传文件。这些繁琐的事情。于是就想到一句很经典的话,(人生苦短,我用Pyhton),我本身也不是熟悉Python,写的都是小玩小闹的小白,但是功能是实现的了。能自己在开发的时候用上,自己还是感到挺欣慰的。
首页感谢蒲公英官方Api地址提供这个平台。
开始
第一步:
首页需要在你工程build.gradle下面配置你打包的签名。如图下图所示,如果你不需要签名(可以忽略这一步)
在build.gradle的android{}里面配置你的App 签名,此处配置的release版本。
好,到这里你工程的配置已经完毕。接下来第二步是利用gradle打包。gradle命令。没有用过gradle命令的小伙伴可以自行去补给一下知识哦。
第二步:
利用gradle打包。进入打包工程目录你会找到一个gradlew的文件,你以后会它来进行打包。
利用终端进入跟这个文件同等目录,执行 ./gradlew -v,检查你的gradle配置是否可以运行。
下面列举一些Mac电脑下使用的命令,windows电脑执行命令的时候(去掉前面的./):
./gradlew clean (clean project)
./gradlew assembleDebug ( 打包测试版本)
./gradlew assembleRelease (打包正式版本)
./gradlew installDebug ( 安装测试版本)
./gradlew installRelease (安装正式版本)
注:如果执行上面的命令出现了bash: ./gradlew: Permission denied的问题,说明权限有问题,这时候直接执行命令 chmod +x gradlew
好的,到这里你已经可以利用gradle打包啦!!!打包好的apk默认路径在工程app目录下的build下的outputs下面。如下图:
第三步:
开始写Python文件将之前打包好的文件长传到蒲公英平台。先配置好你点的Python的环境。下图是上传的代码,是不是很简单。
python,利用file读取到本地的文件,使用requests post上传文件。
apk_file_path:是你build生成.apk的路径,例如(/Users/Bingo/APK/Test.apk)
key:是你蒲公英给你的key值
等待结果,到此结束啦。
# -*- coding:UTF-8 -*-
import os
import os.path
import requests
import json
#配置项目地址
#配置项目地址
#projectPath = "/home/bingo/xxx"
#配置项目地址
#配置项目地址
api_key = "xxx"
url = "https://www.pgyer.com/apiv2/app/upload"
print("开始执行文件apk上传到蒲公英")
os.chdir(projectPath)
os.system('pwd')
#防止没有权限,授权
os.system('chmod +x gradlew')
#build项目
print("开始build工程...请稍等.")
os.system('./gradlew clean')
os.system('./gradlew assembleMagicboxDebug')
buildPath = projectPath + "/app/build/outputs/apk/magicbox/debug"
print(buildPath)
#得到该文件夹下所有的文件
dir_files=os.listdir(buildPath)
for f in dir_files:
print(f)
if f.endswith('.apk'):
print("包含apk文件")
outFilePath = buildPath + '/' + f
print(outFilePath)
fileHas = os.path.isfile(outFilePath)
if fileHas:
print("build生成的文件存在.")
print("开始执行文件apk上传到蒲公英,请耐心等待~~")
apkFile = {'file':open(outFilePath,'rb')}
param = {"_api_key":api_key,
"buildInstallType":'2',
"buildPassword":'123465',
"buildUpdateDescription":''}
req = requests.post(url, files=apkFile, data=param, verify=False)
#res = req.content
res = req.text
print(res)
try:
print("开始执行返回解析的数据")
result = json.loads(res)
print("===================================")
print("===================================")
print(result)
code = result['code']
except Exception as e:
print(e)
print("sorry data param error")
else:
print("解析数据成功")
if(code == 0):
print("上传文件成功啦~")
else:
print("对不起,上传文件失败")
finally:
print("脚本执行完毕")
else:
print("文件不存在~~~")