自动更新

quick-cocos2d-x基于源码加密打包功能的更新策略(3)

一笑奈何 提交于 2019-12-02 04:20:06
前篇: quick-cocos2d-x基于源码加密打包功能的更新策略(1) quick-cocos2d-x基于源码加密打包功能的更新策略(2) 三、更新流程说明及特性分析 A.更新流程 加载初始安装包,载入旧资源列表 取最新资源列表文件,载入新资源列表 比较两个资源列表版本,如果一致,跳到第8步;以下流程中如果有误也跳到第8步 根据新资源列表检查现有文件,逐一下载新增或者有变化的文件,并加.upd后缀保存 每个下载的文件在保存后马上进行一次校验 所有文件下载完成,更新本地资源列表文件,用新列表替换旧列表 将下载的文件去掉.upd后缀,覆盖旧的文件 根据资源列表再校验一遍资源文件 第8步正确,则按资源列表的指示载入相关资源,启动程序(新版本) 第8步有错,说明资源列表与资源文件不匹配,删除本地资源列表文件(保证下次启动时重新更新资源),启动程序(原始安装版本) B.安全性 可以看出在第6步之前,即使出错,也不会破坏原来的文件。跳到第8步后,一般能够以上一个更新成功的版本启动,除非上一个版本被用户破坏。 第6步和第7步出错,会造成资源列表与资源文件不匹配,跳到第8步后,肯定只有从原始版本启动了。 第8步错误,有可能是因为前面出错,也有可能是用户自己破坏了本地文件。无论如何,还是能从原始版本启动,并保证下次进入能再次更新。 第8步正确,并不一定说明这次更新是成功的

quick-cocos2d-x基于源码加密打包功能的更新策略(1)

≯℡__Kan透↙ 提交于 2019-11-30 23:31:49
Quick-cocos2d-x 增加了 编译及加密源代码 的功能(具体可参考 这篇文章 )。以此功能为基础,我实现了一个 版本更新 模块,解决了自己项目中的版本更新需求。现抛砖引玉,与大家分享。 从基本原理和方案讲起比较枯燥,直接从介绍具体 用法开始吧。 要能够在线更新文件,一个服务器是必须的。我目前实现的是用HTTP协议取文件,只需要有一个基本的web服务器,能通过类似http://<server>/<filename>的链接取到文件即可。当然,如果需要根据平台和版本进行文件的分发,服务器端还需要进行相应配置。 要调试下面的例子,自己在内网甚至就在本机上搭建一个最简单的web服务器就可以了。 一、基本更新功能 1.创建一个可以自动更新的程序 首先准备好我们的quick-x工程。作为例子,我们直接使用create_project来创建一个新工程helloworld来使用。这一步不用我多说。 接下来,请到 这里 下载我写的更新模块。只需要根目录下的update.lua文件即可,其他的目录下只是我的一些例子和工具。 (2014.5.30加注:quick-x的2.2.3版本里的sample/2048使用了这一更新模块,可以使用例子中的update.lua文件) 将update.lua文件加到helloworld工程的scripts目录下。修改文件中“local server =

quick-cocos2d-x基于源码加密打包功能的更新策略(2)

ⅰ亾dé卋堺 提交于 2019-11-30 23:31:35
前一篇: quick-cocos2d-x基于源码加密打包功能的更新策略(1) 二、更新原理讨论及更复杂的更新功能 1.更新原理 在前面的更新过程中,从服务器取文件列表,并根据文件列表再更新相关的文件,这都是很好理解的。当然其中还有些流程细节关系到健壮性、续传、文件版本分发等,我们可以后面再讨论。 对于一些刚开始学习Quick-x的朋友来说,可能希望了解的是,这一更新机制的替换原理是什么,为什么新的文件下载后能够替代原来的代码生效呢? 从前面我们参考的源文件编译及加密的相关文章,可以清楚的看到,初始代码打包成的game.zip文件,是在AppDelegate.ccp中,在程序启动前通过loadChunksFromZIP载入的。这一载入工作实际上已经将所有代码都加载了,之后调用require时,将会直接 调用而不会再去找代码文件来载入。也正因为如此,一些朋友会感到迷惑,即使下载了新的代码文件,又如何让它生效呢? 其实很简单,loadChunksFromZIP是可以多次调用的,而且如果第二次载入的包中的代码模块与之前载入的模块有重名,新的模块会覆盖旧的模块。 在Quick-x的Lua代码中,对应的调用接口是CCLuaLoadChunksFromZIP。有了这个接口,我们下载新的代码包后,就可以自己加载了。在update.lua里,在下载完成后,会自动将act标记为load的文件加载一次