Android端APP增量升级技术实现方案
AndroidAndroid 端端 APPAPP 增量升级技术实现方案增量升级技术实现方案 文件状态: [√] 草稿 [ ] 正式发布 [] 正在修改 文件标识: 当前版本: 作者: 完成日期: Android 端 APP 增量升级技术实现方案 1.0 杨月峰 1.1. 文档简介文档简介 本文档帮助读者对本文档建立基本印象,并为阅读后续内容扫清障碍。 1.11.1 文档目的文档目的 本文档主要的读者包括: 1、本系统的设计人员:包括模块设计人员(理解用户需求,在设计时把握用户需求) 。 2、本系统的系统开发人员:编码人员(了解用户需求,为编码提供模版) 3、本系统的测试人员(了解用户需求,为测试提供参考) 1.21.2 文档范围文档范围 概要架构设计文档的目的是描述本项目的技术架构和基础设施, 以便项目组有足够的信 息开始进行应用系统的详细设计。 1.31.3 定义、缩写词和缩略语定义、缩写词和缩略语 文档中的定义、缩写词和缩略语。 2.2.总体技术框架实现总体技术框架实现 2.12.1 增量升级原理增量升级原理 首先将应用的旧版本 Apk 与新版本 Apk 做差分,得到更新的部分的补丁,例如旧版 本的 APK 有 5M,新版的有 8M,更新的部分则可能只有 3M 左右(这里需要说明的是, 得到的差分包大小并不是简单的相减,因为其实需要包含一些上下文相关的东西 ),使 用差分升级的好处显而易见,那么你不需要下载完整的8M 文件,只需要下载更新部分 就可以,而更新部分可能只有3、4M,可以很大程度上减少流量的损失。在用户下载了 差分包之后,需要在手机端将他们组合起来。如果不出意外的话,这个生成的apk 和你 之前做差分的 apk 是一致的。 2.22.2 增量升级优缺点增量升级优缺点 优点:减少流量,下载更新更快。 缺点: 1.增量升级是以两个应用版本之间的差异来生成补丁的, 你无法保证用户每次的及时 升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分, 以便使所有 版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐 例如: 你的 apk 已经发布了 3 个版,V1.0、V2.0、V3.0,这时候你要在后台发布 V4.0, 那么,当你在服务器上传最新的 V4.0 包时,服务器端就应该立即生成以下差分包: 1)V1.0 —— V4.0 的差分包; 2)V2.0 —— V4.0 的差分包; 3)V3.0 —— V4.0 的差分包; 不过可以通过自动化的脚本批量生成。 2.增量升级成功的前提是, 用户手机端必须有能够让你拷贝出来且与你服务器用于差 分的版本一致的 apk,这样就存在,例如,系统内置的 apk 无法获取到,无法进行增量 升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版 apk),这样也是 无法进行增量升级的,为了防止合成补丁错误,最好在补丁合成前对旧版本的apk 进行 sha1sum 校验,保证基础包的一致性。 2.32.3 增量升级主要流程图增量升级主要流程图 2.42.4 增量升级步骤及技术实现增量升级步骤及技术实现 1 1、服务器端对新旧、服务器端对新旧 apkapk 进行对比做差分,生成进行对比做差分,生成 patchpatch 文件文件 apk 文件的差分、合成,可以通过 开源的二进制比较工具 bsdiff 来实现,又因为 bsdiff 依赖 bzip2,所以我们还需要用到 bzip2 开源的二进制比较工具地址: bzip2 地址:http://www.bzip.org/downloads.html bsdiff 中,bsdiff.c用于生成差分包,bspatch.c用于合成文件。 以服务器代码编写语言为 java 为例,我们需要将下载的这些 C 文件,build 输出为动态 链接库,以供 Java 通过 jni 调用(Window 环境下生成的文件名为*.dll,linux 系统下为 *.so。其他语言依此类推 调用 bsdiff.c中的 main 方法即可生成 patch 文件. 2 2、终端合成、终端合成 patchpatch 生成新版本生成新版本 APKAPK 文件文件 将上述 bsdiff 和 bzip2 中的 C 文件拷贝到自己的 NDK 项目中,添加 jni 方法后编译成 so 库 给移动端调用,或者直接将 C 文件拷贝到终端项目中,建立 NDK 编译,在 java 层通过 jni 调 用 bspatch.c 文件合成新的 apk.