公司在大力推广我们组开发的APK,高兴的同时发现我们的打包同学每天都将时间消耗在了打包工作上面,
在了解了下他打包的内容后,发现每次打包只是进行如下更改:
- 修改应用名称
- 修改应用图标
- 修改应用的渠道名称
- 修改应用中的DataEye标识符
- 修改应用的ID,也就是包名
很明显的重复劳动,作为一个合格的工程师,自然要想法子让打包自动化起来。
在调研了下网络上的解决方案后,我觉得在办周时间内写一个自动化打包的工具是没问题,
于是马上提出方案,并且大家也觉得非常coool。
开发过程
鉴于现在的应用使用Android Studio开发的,而它又是用Gradle来管理自己的编译行为,
于是乎我决定在内网的Linux机器上先搞一个编译环境,步骤很简单:
安装JDK,安装安卓SDK管理工具,安装gradle
安装好了之后,从git上把项目代码拉下来,试着打包成功了,进入到下一步:修改参数,
在与应用开发人员沟通之后,确定了要修改的配置的位置,然后就是写python脚本进行替换了。
在替换完之后,直接起一个子进程调用gradle进行编译,过一会儿就看到自己的APK编译成功。
到此,一个打包工具基本雏形就完成了,接下来就是自动签名了,我采取的方法是:
每次打包一个新应用的时候使用keytools重新生成一个key,然后将签名配置在build.gradle中配置好。
还有个小尾巴,就是需要把apk上传到CDN上,使用人家的库,也容易搞定。
另外编译后的包,如果没有上传到CDN,使用者怎么获取呢?
我永乐一个很偷懒的方法,那就是把编译完后的包拷贝到指定的目录,
然后在该目录下开一个SimpleHTTPServer服务,需要的自己去里面拿就好了,哈哈。
最后,怎么向外提供服务?当然是使用我最爱的Tornado了,搭建一个网站分分钟的事情,
这里我还使用了网上一个大牛写的使用进程实现异步的库,
这样就不会因为一个编译任务而卡住整个网站。
最后
开发完毕后将工具给同事们使用,现在还在内测中,这个只是一个简化版的自动打包工具,
其实还有很多要完善的地方。
- 需要和应用开发人员订好开发规范,比如需要替换的字段放到哪里,
build.gradle文件中需要添加哪些配置,
这些确定下来了我的自动打包工具使用场景才可以泛化 - 打包日志需要记录
- 代码混淆等当前版本并没有做
- 也没有用户权限控制
不过这个版本已经足以应付打包需求了,毕竟公司人还不多。