1.前言
我们前段时间实现了安卓和ios的自动打包,可以每天把最新的代码制作成安装包,放到下载目录,让产品,测试等人员进行下载,以便每日验证产品开发进度以及及时反馈开发功能的方向是否正确。
但是这样新的问题出现了,实现每日打包之后,那就意味着测试、产品等人员每天都需要删除旧的软件包,重新安装新的软件包,整个过程还是比较烦得,那么能不能实现每天自动化安装打出来的包到手机上呢?答案是当然可以的,而且这周我已经研究出来了。
2.实现介绍
由于我自己的手机是安卓系统,所以这里只介绍安卓,如果想了解IOS是如何实现的,请给我提供个苹果手机。没办法苹果设备太贵了,前段时间刚研究除了黑苹果技术,安装了mac os系统,但是不知道朕的小米能不能刷成苹果,如果有朋友知道如何实现,请联系我,谢谢。好了废话不多说,我们看安卓如何实现自动安装apk应用包。
实现思路:一般做运维的同学,jdk肯定都知道,而且里面的一些小工具大家都玩过,但是adk很多人就不知道了,那么什么是adk?adk就是安卓开发工具包,里面提供了一个adb的命令可以进行手机软件的安装卸载。既然可以通过命令进行安装卸载手机软件,那么我们是不是就可以写成一个脚本,自动把最新的apk安装包下载到本地,然后调用命令进行安装。答案是必须的,我们的实现环境是windows(主要是给测试、产品使用),所以我这里使用python写了一个apk的自动下载安装脚本,给大家参考。
3.环境搭建
环境介绍:
电脑:Windows 7 旗舰版 64位
手机:小米5
3.1.电脑环境搭建:
(1)安装jdk。jdk下载地址
(2)安装adk。adk下载地址
(3)配置好jdk和adk的path环境变量
(4)环境配置好之后,打开cmd页面,验证jdk和adk环境配置,如果能够正常输入版本信息,说明电脑环境ok。
3.2.手机环境配置
(1)打开手机的开发者选项和usb调试模式
(2)使用USB将手机和电脑连接,打开cmd终端,输入adb devices可以看到已经有一个设备连接上了。
注意:电脑调试手机的时候,手机会提示是否允许这台电脑调试,选择信任即可,不然电脑没法控制手机。
4.我的安装包获取方式
注意事项:自动打包的apk文件不能包含中文,不然使用命令安装会报错。
(1)每日打包在凌晨2点进行,打完包之后放到nginx服务器提供下载,不同目录代表不同的环境,分别开发(dev),alpha(测试),beta(预生产),生产(pro)。
(2)nginx服务器每日打包目录结构如下
[root@node1 html]# tree /data/www/Android/everyday_pack/ /data/www/Android/everyday_pack/ ├── alpha │ ├── hehe-release-2016-12-10.apk │ ├── hehe-release-2016-12-6.apk │ ├── hehe-release-2016-12-7.apk │ ├── hehe-release-2016-12-8.apk │ └── hehe-release-2016-12-9.apk ├── beta │ ├── hehe-release-2016-12-10.apk │ ├── hehe-release-2016-12-6.apk │ ├── hehe-release-2016-12-7.apk │ ├── hehe-release-2016-12-8.apk │ └── hehe-release-2016-12-9.apk ├── dev │ ├── hehe-release-2016-12-10.apk │ ├── hehe-release-2016-12-6.apk │ ├── hehe-release-2016-12-7.apk │ ├── hehe-release-2016-12-8.apk │ └── hehe-release-2016-12-9.apk └── pro ├── hehe-release-2016-12-10.apk ├── hehe-release-2016-12-6.apk ├── hehe-release-2016-12-7.apk ├── hehe-release-2016-12-8.apk └── hehe-release-2016-12-9.apk
5.手动安装apk应用
在使用python进行自动化安装之前,我们应该使用知道如何使用命令行进行apk应用的安装和卸载。
(1)下载apk安装包到电脑的指定目录下
(2)使用adb install命令进行安装
这里再说两个参数:
-s:指定设备进行安装,如果电脑同时连接了多个手机就非常有用了
-r:如果之前安装过则覆盖安装
比如我电脑同时连接了两个手机,一个想安装测试环境的最新包,一个想安装生产环境的最新包,可以通过-s指定设备进行安装,方法如下
如果我之前安装过这个应用,再次安装会提示应用已经存在不允许安装,我们就可以直接使用-r选项进行覆盖安装
(3)使用adb uninstall命令进行卸载
语法:adb uninstall [-k]
-k:卸载不删除数据和缓存文件
注意:使用adb卸载apk应用的package参数,是应用的包名。包名获取有两种方式。
(1)询问公司app开发人员。
(2)使用app测试工具获取:比如我要获取微信的包名,我是用GT(一款app性能测试工具)打开需要卸载的应用,就可以看到包名,如下图。
6.Python 自动安装apk应用
在windows安装python的运行环境,并设置环境变量,就可以使用下面的脚本进行安装了。
#!/usr/bin/pyenv python import urllib.request import os import time def download_apk(env="alpha"): ctime = time.strftime("%Y-%m-%d") apk_name = "hehe-release-%s.apk" % (ctime) global apk_name url = "http://192.168.100.10/Android/everyday_pack/{0}/{1}".format(env,apk_name) response = urllib.request.urlopen(url) apk = response.read() with open(apk_name,'wb') as f: f.write(apk) def install_apk(): install_command = "adb install -r %s" % (apk_name) os.system(install_command) download_apk() install_apk()
脚本执行效果如下:
那我们就可以通过这个脚本来自动安装apk程序包了。比如我们每日打包是凌晨2点执行,那么我们就可以在windows上面配置定时任务3点执行apk程序的安装。也可以每天来运行一下脚本进行安装。