好久没写简书了,这几天终于有时间把之前项目用到了热更新整理下。由于刚入手不久,根据官方文档把热更新走了一遍后,发现官方文档对于像我这样的新手来说不是很详细,就有了本文章的出现了。
原理
热更新原理主要是服务端和本地均保存完整版本的游戏资源,每次启动游戏检查更新都是通过服务端与本地生成的manifest 先进行初步的版本比对。本地端将服务端的Manifest下载到本地后,当服务端的版本号高于本地端时,通过md5比对有差异的文件并下载,最后把更新的文件下载完成后放在某个文件夹,在入口文件main.js 设置搜索路径把更新的文件夹放置首位。当程序加载文件or脚本时,热更文件会优先于本地文件加载,从而达到更新效果。想深入了解原理,请到官方文档。
准备
进入官方文档,需要我们:
1.下载范例工程
2.安装node.js 来运行生成Manifest 文件
3.一台远程服务器(我是在本地安装web开发的集成环境wamp);
快捷生成Manifest文件
提醒下,如果还没有安装node.js是无法生成Manifest文件的。安装node.js后,打开到范例的目录新建文件,输入如下代码并保存为version_generator.bat
node version_generator.js -v 1.0.1 -u http://192.168.2.215/remote-assets/ -s build/jsb-binary/ -d assets/

打开bat文件,修改你的远程地址跟你的远程热更新目录,如图所示:

步骤
-
生成Manifest 比对文件
首先要明白Manifest文件是由version_generator.js脚本生成的。当双击version_generator.bat批处理文件时,会在assets目录生成project.manifest与version.manifest:

其中project.manifest由以下内容构成:
1.远程资源包的根路径
2.远程 Manifest 文件地址
3.远程 Version 文件地址(非必需)
4.主版本号
5.文件列表:以文件路径来索引,包含文件版本信息,使用文件的 md5 校验码来作为版本号
6.搜索路径列表
其中,1、2、5是最为重要的。其作用是生成比对文件信息,也就是说,当你生成热更文件与打原生包时,必须先执行version_generator.bat批处理文件生成Manifest文件信息,确保与打包后的src跟res里面的文件一一对应。
-
构建工程并设置搜索路径
构建工程是根据asset目录下的资源,把所有 JS 脚本打包到 src 目录中,其他 Assets 资源将会被导出到 res 目录。当构建项目后,需要进入你的工程目录下\build\jsb-binary\目录下有一个main.js。打开输入如下代码:
// 在 main.js 的开头添加如下代码
if (cc.sys.isNative) {
var hotUpdateSearchPaths = cc.sys.localStorage.getItem('HotUpdateSearchPaths');
if (hotUpdateSearchPaths) {
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
}
}

这几行代码的作用是当下载完成要更新文件后,重启游戏将缓存文件夹的搜索路径前置在搜索路径中(优先级最高)。只有添加那几行代码,才能优先执行更新的文件,否则热更失败。
-
生成热更包
先执行完生成Manifest 比对文件后,接着选择构建工程。构建完成后,把项目目录assets文件夹下的project.manifest与version.manifest取出,再把项目目录build\jsb-binary文件夹下把res与src文件夹取出。把以上四个文件放到远程热更新目录下。当原生包每次打开应用时,就会检查更新。有高版本时,就会下载project.manifest进行文件比对并下载。然后游戏重启后,就会优先执行热更资源。

-
生成原生包
当构建项目并设置好搜索路径后,就可以点击编译生成原生包。

最后
希望经过本文的讲解,希望对不懂如何操作热更新的人有所帮助。喜欢就动动手指点喜欢,关注我吧。我会不定时更新Cocos Creator教程哦~
网友评论