Android开发经验谈Android开发程序员

Python实现优雅打包

2018-04-26  本文已影响168人  jiantaocd

大家在开发过程中,是否也有这样的场景,测试同学跑过来说,给我打个包吧;可能这时你正在“写bug”,好嘛,为了团队,停下来,stash本地修改,Studio打个包,整个过程6分钟左右,然后继续编码;过一会儿老板又来了。。。

本文就分享如何用Python打包来拯救你的时间。

说下思路

ps: 其实可以使用Jenkins集成环境来搞定上述所有需求。之前我们也用过Jenkins,整体都不错,唯一劣势是,当出现因为开发环境导致打包失败时,需要去打包服务器处理;但与其带来的效率来比,这些是值得的。本文介绍的Python打包就没更新打包环境的困扰,但不支持离线打包。

最终效果

邮件内容截图

邮件内容主要有几个:

代码实现

 # 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不是很熟悉,可能实现还有不少问题,如果您有好的建议,请告诉我;有如何问题都可联系我,与君共勉~

本文为原创内容,转载请说明出处,文章首发及更新,请前往我的博客浏览

推荐

上一篇 下一篇

猜你喜欢

热点阅读