- 参考官方文档
热更新管理器 AssetsManager
https://docs.cocos.com/creator/manual/zh/advanced-topics/assets-manager.html?h=%E7%83%AD%E6%9B%B4%E6%96%B0
看完后 基本明白了热更新机制
下载官方示例 怎么做也跑不起来
参考其他人的教程
https://www.cnblogs.com/lyonwu/p/10432822.html
https://www.jianshu.com/p/cec263b6b9ac反复验证 1.0.0.0 升级 1.0.0.1 再升级 1.0.0.2 流程
有时候会热更新失败 具体原因还不知道 可能需要每次都重新构建
后期拷贝main.js 考虑用ipc方案 或者 改原生引擎底层的main.js 使每次热更新之后 都有热更新的main.js代码
(ipc貌似是插件的工作方式了 没空研究了 为了避免 我改了底层的C:\CocosCreator\resources\static\build-templates\shares\main.js) 并且我把原生的main.js拷贝出来 我做了备份
还有几个关键的点
-
cmd运行
catalina startup
catalina start
启动tomcat服务器
tomcat 存放服务器资源的完整路径
F:\cocos\apache-tomcat-9.0.16\webapps\ROOT\remote-assets
正式上线 这里填正式服务器路径即可
-
关于官方提供的version_generator.js
范例
node version_generator.js -v 1.0.0 -u http://your-server-address/tutorial-hot-update/remote-assets/ -s native/package/ -d assets/
实际
node version_generator.js -v 1.0.0 -u http://localhost:8080/tutorial-hot-update/remote-assets/ -s build/jsb-default/ -d assets/
node version_generator.js -v 1.7.0 -u http://192.168.1.161:8080/remote-assets/ -s build/jsb-default/ -d assets/最终
node version_generator.js -v 1.7.0 -u http://192.168.1.161:8080/remote-assets/ -s build/jsb-link/ -d assets/生成了
E:\MyCreator209\tutorial-hot-update-master\assets\version.manifest
文件内容
{"packageUrl":"http://localhost:8080/tutorial-hot-update/remote-assets/","remoteManifestUrl":"http://localhost:8080/tutorial-hot-update/remote-assets/project.manifest","remoteVersionUrl":"http://localhost:8080/tutorial-hot-update/remote-assets/version.manifest","version":"1.0.0"}本地
http://127.0.0.1:8080/remote-assets/project.manifest
实际
http://192.168.1.161:8080/remote-assets/project.manifest
手机浏览器需要能够通过以上网址查到文件数据
才能保证热更(路径正确)
3.项目构建 需要先安装android studio 并且安装sdk 和 ndk
期间可能还需要安装java
sdk路径
C:\Users\Administrator\AppData\Local\Android\Sdk
ndk路径 C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle
- 一段windows版本的代码 但是我没试过
if(cc.sys.os == "Windows"){
console.log("getDefaultResourceRootPath:"+jsb.fileUtils.getDefaultResourceRootPath());
jsb.fileUtils.setWritablePath(jsb.fileUtils.getDefaultResourceRootPath());
}