多语言展示
当前在线:583今日阅读:155今日分享:35

安卓增量更新怎么实现?

随着android应用体积的不断增大,以及应用版本发布的不断更迭,用户的升级成了一个问题,google也意识到不断更新应用对用户流量的损耗,在Google I/O 上提及的 Smart App update,即应用增量升级,或者叫做差分升级的做法,并在新版本的Google Play中得到支持。增量升级的原理很简单,即首先将应用的旧版本Apk与新版本Apk做差分,得到更新的部分的补丁,例如旧版本的APK有5M,新版的有8M,更新的部分则可能只有3M左右(这里需要说明的是,得到的差分包大小并不是简单的相减,因为其实需要包含一些上下文相关的东西)。使用差分升级的好处显而易见,那么你不需要下载完整的8M文件,只需要下载更新部分就可以,而更新部分可能只有3、4M,可以很大程度上减少流量的损失。目前,增量更新已经广泛应用于手游APP更新。下面,就由我为大家介绍一下如何实现手游的增量更新。
工具/原料
1

手游apk

2

CDN服务器

步骤
1

OTA系统差分包的制作,使用命令:[html] view plaincopyprint?./build/tools/releasetools/ota_from_target_files -n -i <旧包> <新包> <差分包名>

2

在查阅ota_from_target_files 的代码可知,是在函数WriteIncrementalOTAPackage里生成差分包的,在这个函数里边创建了common.Difference这个类,我们继续跟进,在common.py中的类   class Difference(object):里可以看到: [html] view plaincopyprint?diff_program = DIFF_PROGRAM_BY_EXT.get(ext, 'bsdiff')  注:'bsdiff',这是一个很牛X开源的二进制差分工具。

3

将生成的补丁包 xx.patch放置在升级服务器上,供用户下载升级,对应多版本需要对不同的版本进行差分,对于版本跨度较大的,建议整包升级。用户在下载了 xx.patch补丁包后,需要用到补丁所对应的apk,即原来系统安装的旧版本apk和补丁合成的bspatch工具。系统旧版本的apk可以通过copy系统data/app目录下的apk文件获取,而补丁合成的bspatch可以通过将bspatch源码稍作修改,封装成一个so库,供手机端调用。[html] view plaincopyprint?bspatch的命令格式为:  bspatch oldfile newfile patchfile

不足
1

增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。

2

增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好在补丁合成前对旧版本的apk进行sha1sum校验,保证基础包的一致性。

改善
1

手游CP联系爱加密,提供原始包,经过CDN云服务器处理,得到处理过后的apk包。

2

自动提交渠道,游戏上架,用户开始下载。

3

若更新是非强制更新,手游会在玩家在WiFi环境下完成静默更新。若更新是强制更新,可以通过CDN加速更新。无需繁琐的渠道-CP-发行配合流程,也不需要停服,玩家在更新过程当中毫无感知。

注意事项
1

改善之前需要联系服务商

2

此经验仅供参考,详细情况需要具体分析

推荐信息