前言
上一篇博客中,我们已经讲到,如果静默安装apk
但是,这个特性只能用来安装其它APP,是不可能用来更新自己的
APP不可能在自身启动时,同时替换自己
所以这篇博客,我们再次基础上,再变通一下,得到一个设备静默升级的方案
智能硬件一般需求
- 开机自启动
- 后台长期运行
- 静默升级
- 无人值守
APK升级方案
- 准备两个APP,一个用于管理,一个用于业务,因为APP不能在运行的同时静默更新自己
- 将管理APP设置为桌面应用,这样就能开机自动启动,最好是在烧录镜像时,就移除系统自带的桌面Launcher,这样就不用自己去选择默认的桌面了
- 两个APP都要使用系统用户id和系统签名,以保证可以使用特殊权限
- 两个APP都要在Manifest中对application设置persist=true,以保证可以后台永久运行
- 业务APP注册静态广播,以接收来自升级APP的通知
- 升级前,管理APP先向业务APP发送一个广播,通知业务APP退出
- 延时2秒后,管理APP以静默方式安装新版业务APP,完成升级
- 延时2秒后,管理APP发送一个外部广播,唤起业务APP,完成重启
设备运维方案
- 设备和管理工具,通过MQTT或WebSocket进行通信,如果用WebSocket,需要通过一个共用后台进行数据中转
- 业务APP定时将设备状态参数,以广播的方式转发给管理APP,管理APP再将数据转发给管理工具
- 设备管理工具,每次启动时,随机生成一个会话标识SessionID,以广播的方式,定时发送一个会话开始消息给所有设备,通知设备该管理工具在线
- 设备收到新会话时,将SessionID保存起来,并定时向该SessionID发送设备状态信息
- 当设备超过30秒没有收到某个SessionID的消息时,便将该SessionID从会话队列中移除
- 设备升级时,先通过管理工具通知设备安装包地址,然后设备切换到升级状态,开始下载安装APK
- 设备状态包括离线、空闲、下载中、安装中等状态,只有空闲状态下,管理工具才能控制该设备
- 下载失败、开始下载、尝试重新下载、开始安装、升级失败、应用重启等,都向管理工具推送事件消息
- 如果业务APP包含设备的序列号、名称、位置等信息,则业务APP将这些信息推给管理APP,管理APP再转发给管理工具。如果业务APP不包含这些信息,则管理APP可提供设置功能,在出厂时设置这些信息。或者通过管理工具去设置设备信息,管理APP保存这些信息
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)