版本:2.4.2
参考:
csdn:Cocos Creator 热更新(动态修改热更地址)
demo下载:
这里用cocos2.4.2版本,从零实现android热更新,从1.0.0版本热更到2.0.0版本的demo操作流程。从而了解热更新的基本环境搭建和原理。
一 看官方教程
首先浏览下官方的教程热更新范例教程和热更新管理器。知道热更新大概的原理流程。
更新流程大致如下:
- 基于原生打包目录中的 assets 和 src 目录生成本地 Manifest 文件。
- 创建一个热更新组件来负责热更新逻辑。
- 游戏发布后,若需要更新版本,则生成一套远程版本资源,包含 assets 目录、src 目录和 Manifest 文件,将远程版本部署到服务端。
- 当热更新组件检测到服务端 Manifest 版本不一致时,就会开始热更新
本地资源和远程资源文档结构如下:
assets和src:代码和图片等资源
project.manifest:版本配置文件
version.manifest:project.manifest的一部分,因为project.manifest保存了资源配置导致过大,每次加载影响体验,所以抽离了远程资源地址和版本号到version.manifest中,以方便快速加载比对版本。
project.manifiest文件:
二 从零新建项目,实现android热更新
1. 搭建原生开发环境,新建空项目,并构建-编译-运行android。
2. 下载官网Demo
下载地址:https://github.com/cocos-creator/tutorial-hot-update
下载下来就有了疑问,demo是什么年代的版本,都几年几个月没更新了,要配置什么环境怎么样才能跑起来,要用到当下新版本里要怎么修改,api过时了怎么办,跑起来各种报错怎么整。
所以demo我就不跑了,新建一个项目跑。
3. 复制热更新插件
复制demo里的packages到新项目中相同位置。packages里是热更新插件,会在构建项目时,在main.js里插入一段热更新相关代码。
4. 本地搭建远程资源目录
在新项目中创建remote-assets文件夹,用于存放远程版本资源。
安装python2.7.5+版本,我用的是2.7.13,在新项目中创建一个python_server.bat文件
文件内容如下:
python -m SimpleHTTPServer 8000
双击bat,相当于以新项目为根目录搭建了一个简易服务器。
浏览器输入如下,则相当于访问新项目远程资源remote-assets文件夹 (192.168.0.60替换成你电脑本地IP)
http://192.168.0.60:8000/remote-assets/
5. 复制并修改热更新组件
从demo中找到HotUpdate.js,cocos提供的是js的,里面是热更新UI和逻辑的代码,我新项目用的是ts,显然不行。
所以要把demo的HotUpdate.js的代码复制到新项目的HotUpdate.ts里,并做相应的修改。
修改1:
demo里的版本文件ManifestStr是直接写死在HotUpdate.js里,这肯定是不行的。
修改将customManifestStr值从版本文件manifest获取
修改2:
cc.loader已经过时,将两处使用cc.loader转换md5的地方都注释掉。
修改3:
将demo里用到的组件UI和变量都重新写过,新项目用的UI丑点无所谓,组件重命名了也没关系,反正只要和官方demo的匹配上就行。
另外的修改可以参考新项目源码,把HotUpdate.ts组件挂到新项目场景组件上,这样新项目加载场景后就可以执行热更新了。
6. 复制版本生成器
复制version_generator.js到新项目中相同位置,这个版本生成文件会生成当前版本的project.manifest和version.manifest配置文件。
新项目中新建热更新.bat文件,这个用于执行version_generator.js。
热更新.bat内容如下:
@ECHO OFF @node version_generator.js -v 1.0.0 -u http://192.168.0.60:8000/remote-assets/ -s build/jsb-link/ -d assets/ pause
参数说明:
-v
指定 Manifest 文件的主版本号。-u
指定服务器远程包的地址,这个地址需要和最初发布版本中 Manifest 文件的远程包地址一致,否则无法检测到更新。-s
本地原生打包版本的目录相对路径。-d
保存 Manifest 文件的地址。
总结下新项目现在都做了什么:
1. 新建项目,并能够正常构建-编译-运行,在真机上可以跑起来这个空项目。
2. 下载官方热更新demo
3. 复制了热更新插件package
4. 本地搭建了远程版本资源目录remote-assets
5. 热更新组件HotUpdate.js改成了ts
6. 复制了版本生成器version_generator.js
做完以上的操作,基本环境就准备好了。
三 版本从1.0.0热更新到2.0.0
大致操作流程如下:
1. 构建2.0.0项目
2. 将2.0.0项目资源和版本配置放到远程资源文件夹remote-assets
3. 构建1.0.0项目
4. 运行1.0.0项目,热更新到2.0.0
1. 构建项目
不要勾选md5 Cache,这是得到2.0.0版本
2.执行热更新.bat
将热更新.bat的-v修改成2.0.0,双击执行一次。这是根据当前2.0.0项目,生成了2.0.0版本文件project.manifest和version.manifest。
3. 再次构建项目
这是将上一步新生成的project.manifest和version.manifest打包进去
将assets下project.manifest赋值给HotUpdate.ts热更组件的ManifestUrl
将assets下project.manifest和version.manifest复制到remote-assets下
将build/js-link下assets和src文件夹复制到remote-assets下
4. 修改场景,构建项目
这是构建1.0.0版本项目,任意修改项目场景,比如增加一个图片,增加一个label文本等,能看出来和2.0.0不一样。
5. 执行热更新.bat
将热更新.bat的-v修改成1.0.0,双击执行一次,这是根据项目生成1.0.0版本的project.manifest和version.manifest
6. 构建项目
这是将新生成的1.0.0版本文件project.manifest和version.manifest打包进去
7. androd studio 真机运行项目(也可以cocos模拟器先跑跑)
真机运行时,是1.0.0版本
点击检查更新,提示有新版本
点击立即更新,则更新到2.0.0版本
四 Demo下载和使用
demo:下载地址
版本:2.4.2
1. 在搭建好原生开发环境下,打开demo,构建-编译。
2. 用android studio打开构建编译后原生项目,hotUpdatedemouildjsb-linkframeworks untime-srcproj.android-studio, 等待android studio编译完成。
3. 执行python_server.bat
4. 编辑热更新.bat的-v为2.0.0,ip为本机地址,修改完后构建一次项目,将hotUpdatedemoassets下project.manifest和version.manifest复制到根目录hotUpdatedemo emote-assets下
将build/jsb-link下assets和src文件夹复制到remote-assets下
5. 修改项目场景任意地方,编辑热更新.bat的-v为1.0.0,构建一次项目
6. 连上手机,android studio点绿色三角运行项目,则可以手机上运行demo。
再次运行项目时,需要删除手机上apk,这样才能删除原apk的版本文件缓存。