Bootstrap

[应用案例]APP如何更新的

目录

1.如何知道需要更新

2.更新过程

下载安装包

安装更新

3.更新包包含的文件


      我们平时使用的APP程序常常一段时间就需要进行更新处理,那么是如何进行更新的呢?更新的时候如果失败了呢?以及APP如何知道自己需要更新呢?

1.如何知道需要更新

        在APP内部往往会存在着软件远程升级管理组件,他会在启动时或者后台允许的时候,定期的向服务器发送一个包含自身版本号等标识信息的请求(这个请求是由开发者设置决定的),服务端通常会有一个数据库或者配置文件来存储APP的各个版本信息的内容,当接受到客户端发来的检查更新的请求报文之后,会和数据库进行对比判断是否是最新的版本,然后把结果响应给客户端。除了定期检查,一般的APP还会提供一个检查版本更新的按钮,手动的触发上述的操作。

2.更新过程

下载安装包

        当服务端检测到客户端发来的版本号不是最新版本之后,会将安装包的地址、文件名、文件大小以及校验和等信息发送给客户端。客户端根据服务器提供的地址,构建更新请求的报文发送给服务器。服务器就会将安装包发送给客户端了。一般下载的安装包数据会放到临时目录中,之后根据具体的操作放到具体的目录或者文件当中。

        一般下载的过程中,会有进度条的显示,进度条的滚动依据来自于,服务端响应客户端需要更新的报文,该报文内部有安装包的一些信息,例如文件大小、文件名以及数据的校验和等内容。也可能是服务端在发送安装包之前,向客户端单独发送了一个安装包信息的报文。

        当下载完毕安装包,需要进行传输校验,也就是在传输的过程中统计接收到的数据的字节数,与服务器提供的更新信息进行对比,保证下载的安装包的完整性。之后还需要进行文件校验,将文件内容根据例如MD5或者SHA-256算法,计算下载文件的校验和,与服务器提供的校验和对比,来保证数据的安全性。

安装更新

        在更新之前,需要将原有的数据进行备份操作,防止更新升级失败之后,APP无法正常使用了,所以要考虑应用程序的回退机制问题。对于普通文件可以使用cp备份,对于数据库文件可以使用mysqldump命令备份。之后才可以进行更新升级操作。

        更新包内一般会有python或者一些脚本文件,里面记录着需要执行的操作,操作系统运行这个文件之后,就会执行内部记录的具体的更新操作了。

        对于更新的内容,可能涉及一下内容:

  • 文件替换操作:包括可执行文件的替换,该文件是更新的核心部分,对于APP来说,可执行文件包含了应用的主要逻辑和功能;资源文件的更新,包括一些图片,音频,视频,布局文件,文本文件等等内容;还要就是配置文件的更新,配置文件中包含APP的各种设置,例如服务器地址,API密钥,用户权限等。
  • 数据库更新:可能涉及到表结构的修改。例如,增加新的列来存储用户的新属性(如增加一个 “用户会员等级” 列),或者修改列的数据类型(如将一个存储用户年龄的列从int类型修改为smallint类型以节省空间)。也可能涉及到数据库的迁移和更新操作。例如,当 APP 更新了用户积分系统,可能需要根据新的规则更新用户的积分数据。这可能涉及到复杂的 SQL 操作,将旧的数据按照新的算法进行转换并更新到数据库中。
  • 缓存更新:APP 为了提高性能,常常会缓存一些数据,如用户的登录信息、经常访问的页面数据、常用的图标图片等等。在更新时,可能需要清除旧的缓存数据或者更新缓存中的部分内容。例如,当 APP 更新了用户界面显示的数据格式,旧的缓存数据可能不符合新的格式要求,此时需要清除缓存,让 APP 重新获取和缓存符合新格式的数据。

3.更新包包含的文件

        二进制文件、配置文件、数据库SQL脚本文件、校验和文件(内部存放着更新包中的各个文件名以及文件内容的哈希校验和)以及升级说明文件等内容。

;