手游增量更新的实现步骤
浏览:783|更新:2016-01-12 09:38随着手游的质量越来越高,手游APP的体积越来越大,如果每次更新迭代都是全量更新,无疑会耗费相当多的资源和成本。手游增量更新的目的就是,当游戏需要更新时,不必让用户下载新的完整包,只需要通过游戏内部的更新系统自动更新差异包,达到节约用户流量和时间的目的。那么手游增量更新是如何做到的呢?下面就由我为大家介绍一下手游增量更新的逻辑与步骤,希望对各个手游开发者有所帮助。
步骤
更新服务器:
一个简单的支持http协议的web服务器,所有的版本差异包都放在里面,当客户端请求更新时,将对应的版本差异包所在位置的
url返回给客户端,客户端通过这个url从此服务器上下载差异包。比如客户端发送如下请求http://xxx/version/update/1.2
意思是客户端需要下载从1.1升级到1.2的差异包。
客户端更新模块:
整个客户端程序结构应该是这个样子,(java部分)+(c++编写的更新模块部分)+(c++编写的游戏逻辑部分),其中前两个部分组成客户端更新模块,
两个c++部分的代码分别对应两个.so文件,其中(c++编写的游戏逻辑部分)的so文件将包含着差异包内,这样游戏逻辑就能被更新。
更新具体流程:客户端更新模块读取当前版本号,将版本信息发送给更新服务器检查,如果是不是最新版本,则下载更新包。
a)java部分,所有跟平台登录和支付相关的模块必须全部放在这里面
b)c++编写的更新模块部分,它负责连接更新服务器下载差异包,解压,启动游戏核心逻辑。注:因为游戏核心逻辑不在这个so文件里面,所以通过更新模块
调用核心逻辑的入口函数时,需要用到c++的动态函数调用技术,例如dlopen,dlsym这些函数。
文件差异对比生成工具,可以自己写,也可以用现成的,比如Beyond Compare:
这里说一下版本差异包管理的两种方式,
第一种是每次出新版本时,只需要生成与之前一个版本的差异包,玩家需要跨多个版本更新时,需要下载多个差异包,
举例来说,现在游戏的最新版本是1.3,某一个玩家的游戏版本是1.1,那么他需要先更新到1.2,再更新到1.3,不过整个过程应该是更新模块自动完成。这种方式
的优点是每次出版本只需要出一个差异包,缺点就是玩家如果跨很多个版本更新时,将会耗费更多的时间和流量。
第二种是每次出新版本时,将最新版本和之前每一个版本都做对比,生成多个差异包,例如现在要出1.3的新版,那么开发团队需要做得就是生成一个1.3与1.1的差异包,
再生成一个1.3和1.2的差异包,这样玩家就可以从任何一个版本一次性升级到最新版本,优点是玩家跨版本更新的时间和流量都减少,缺点是每次出版本需要耗费的时间更长。
END
不足
1
增量升级是以两个应用版本之间的差异来生成补丁的,你无法保证用户每次的及时升级到最新,所以你必须对你所发布的每一个版本都和最新的版本作差分,以便使所有版本的用户都可以差分升级,这样操作相对于原来的整包升级较为繁琐,不过可以通过自动化的脚本批量生成。
2
增量升级成功的前提是,用户手机端必须有能够让你拷贝出来且与你服务器用于差分的版本一致的apk,这样就存在,例如,系统内置的apk无法获取到,无法进行增量升级;对于某些与你差分版本一致,但是内容有过修改的(比如破解版apk),这样也是无法进行增量升级的,为了防止合成补丁错误,最好在补丁合成前对旧版本的apk进行sha1sum校验,保证基础包的一致性。
END
改良
1
手游CP联系爱 加 密,提供原始包,经过CDN云服务器处理,得到处理过后的apk包。
2
自动提交渠道,游戏上架,用户开始下载。
3
若更新是非强制更新,手游会在玩家在WiFi环境下完成静默更新。若更新是强制更新,可以通过CDN加速更新。无需繁琐的渠道-CP-发行配合流程,也不需要停服,玩家在更新过程当中毫无感知。
END
注意事项
改良之前需要联系服务商
此经验仅供参考,详细情况需要根据具体情况制定更新方案
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。