Python实现优雅打包
2018-04-26 本文已影响168人
jiantaocd
大家在开发过程中,是否也有这样的场景,测试同学跑过来说,给我打个包吧;可能这时你正在“写bug”,好嘛,为了团队,停下来,stash本地修改,Studio打个包,整个过程6分钟左右,然后继续编码;过一会儿老板又来了。。。
本文就分享如何用Python打包来拯救你的时间。
说下思路
- 首先用Python封装gradle打包脚本,配置server环境参数(兼容windows)
- 打包前同步git远程仓库代码
- 打包后上传蒲公英
- 上传后获取apk相关信息,发送通知邮件
ps: 其实可以使用Jenkins集成环境来搞定上述所有需求。之前我们也用过Jenkins,整体都不错,唯一劣势是,当出现因为开发环境导致打包失败时,需要去打包服务器处理;但与其带来的效率来比,这些是值得的。本文介绍的Python打包就没更新打包环境的困扰,但不支持离线打包。
最终效果

邮件内容主要有几个:
- build版本号 ,方便下载时选择正确版本
- api环境
- App发布详情页及下载二维码
- 最近20条git提交日志(在发版前夕,测试团队尤其关心这个)
代码实现
# python入口函数
if __name__ == '__main__':
print (sys.argv)
# 同步远程仓库代码
updateGitRepo()
# 执行打包
exeGradleCmd()
# 上传蒲公英并发送邮件
uploadPgyer()
# 看看git同步函数
def updateGitRepo():
print('update git repo start')
# 当前目录时rn仓库
ret = exeShellCmd('git pull')
hasError = 'error' in ret
# 如果更新失败,就抛异常(类似Java的throw),停止任务
if(hasError):
raise ValueError('git pull failed')
# 进入Android项目同步
ret = exeShellCmd('cd android && git pull')
hasError = 'error' in ret
if(hasError):
raise ValueError('git pull failed')
print('update git repo end')
return
# 执行shell命令并返回执行结果
def exeShellCmd(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
cmdRetBytes = popen.stdout.read()
cmdRetStr = str(cmdRetBytes, encoding='utf-8')
print(cmdRetStr)
return cmdRetStr
以上只贴了主函数和git同步函数代码实现,如果想了解代码细节及剩下的打包、上传和发送邮件等功能实现,请点击这里获取。
如何打包(终端执行以下命令)
# 默认打qa环境的包
$ python3 releaseApk.py
# 打线上环境的包
$ python3 releaseApk.py online
# 指定不发送邮件
$ python3 releaseApk.py noemail
小结
作为一名安卓开发人员,打包是工作内容之一,尤其在测试阶段,频率还很高。为了节约时间和提高效率,就想着能否使用Python来打包,于是就尝试着实现了该想法,才有了这篇文章。由于我对Python不是很熟悉,可能实现还有不少问题,如果您有好的建议,请告诉我;有如何问题都可联系我,与君共勉~
本文为原创内容,转载请说明出处,文章首发及更新,请前往我的博客浏览。