热更新更新版本完,关掉应用重开,又回到旧版本

  • Creator 版本:1.9.1

  • 目标平台: android和ios

  • 详细报错信息,包含调用堆栈:

  • 重现方式:

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:

  • 额外线索:

main.js里面设置搜索路径没有

有设置,奇怪的是,更新完不是会自动重启吗,自动重启后,是新版本。如果我把游戏关掉,后台也关了,重新打开,就又回到旧版本,又提示我更新

看看下载下来的资源被删掉了没有, AssetsManager 有些情况下会删除掉热更新的资源.

请问解决了吗?我用的版本是v2.3.3
跟你情况一样

这样试试吧,第一句就是设置路径

路径有设置也有值,但还是开起旧版本
照理说更新完自动重启成功,就代表 jsb.fileUtils.setSearchPaths 这里的路径是没毛病的
但是退出应用在开启就不行,感觉是路径问题他抓不到更新档,但是为什么自动重启就没问题

重启我也是用官网的方式写

this._am.setEventCallback(null);
this._updateListener = null;
// Prepend the manifest’s search path
var searchPaths = jsb.fileUtils.getSearchPaths();
var newPaths = this._am.getLocalManifest().getSearchPaths();
Array.prototype.unshift.apply(searchPaths, newPaths);
// This value will be retrieved and appended to the default search path during game startup,
// please refer to samples/js-tests/main.js for detailed usage.
// !!! Re-add the search paths in main.js is very important, otherwise, new scripts won’t take effect.

    cc.sys.localStorage.setItem('HotUpdateSearchPaths', JSON.stringify(searchPaths));
    jsb.fileUtils.setSearchPaths(searchPaths);

    cc.audioEngine.stopAll();
    cc.game.restart();

1赞

你打印一下设置好的路径,看看第一搜索路径是啥

解决了,发现每次开启app 时路径会改变,要重新设定,还要放在array 里面才能执行
main.js
if (typeof window.jsb === ‘object’) {
var hotUpdateSearchPaths = localStorage.getItem(‘HotUpdateSearchPaths’);
if (hotUpdateSearchPaths) {
var path = ((jsb.fileUtils ? jsb.fileUtils.getWritablePath() : ‘/’) + “filename/”);
var paths = [];
paths.push(path);
jsb.fileUtils.setSearchPaths(paths);
}
}

1赞

我也出现你这样的问题,但是main.js 无法改变,因为热更新插件问题。热更新插件在构建项目的时候 就自动修改了main.js 导致我之前修改的无效了


第一张图 输出路径是更新完成重启后的,是正确的

第二张图 是关掉程序 在打开读取到的路径

hotupdate 更新后代码
if (needRestart) {
this._am.setEventCallback(null);
this._updateListener = null;
// Prepend the manifest’s search path
var searchPaths = jsb.fileUtils.getSearchPaths();
var newPaths = this._am.getLocalManifest().getSearchPaths();
console.log(JSON.stringify(newPaths));
Array.prototype.unshift.apply(searchPaths, newPaths);
// This value will be retrieved and appended to the default search path during game startup,
// please refer to samples/js-tests/main.js for detailed usage.
// !!! Re-add the search paths in main.js is very important, otherwise, new scripts won’t take effect.
cc.sys.localStorage.setItem(‘HotUpdateSearchPaths’, JSON.stringify(searchPaths));
jsb.fileUtils.setSearchPaths(searchPaths);

        cc.audioEngine.stopAll();
        cc.game.restart();
    }

main.js 是v2 插件自动生成的

main.js第一句应该就把搜索路径设置好. 别在中间设置

经过无数次改动 , 你是对的。其实这是V2版插件的小bug 再2.3.4 版本下 应该加在引入基础包后面就OK了 避免大家踩坑 我发出来,以后做参考 main.js 最下面

if (window.jsb) {
var isRuntime = (typeof loadRuntime === ‘function’);
if (isRuntime) {
require(‘src/settings.js’);
require(‘src/cocos2d-runtime.js’);
if (cc && cc.sys.isNative) {
var hotUpdateSearchPaths = cc.sys.localStorage.getItem(‘HotUpdateSearchPaths’);
if (hotUpdateSearchPaths) {
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
console.log(’[main.js] 热更新SearchPath: ’ + JSON.parse(hotUpdateSearchPaths));
}else {
console.log(’[main.js] 未获取到热更新资源路径!’);
}
}else {
console.log(’[main.js] 不是native平台!’);
}
if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
require(‘src/physics.js’);
}
require(‘jsb-adapter/engine/index.js’);
}
else {
require(‘src/settings.js’);
require(‘src/cocos2d-jsb.js’);
if (cc && cc.sys.isNative) {
var hotUpdateSearchPaths = cc.sys.localStorage.getItem(‘HotUpdateSearchPaths’);
if (hotUpdateSearchPaths) {
jsb.fileUtils.setSearchPaths(JSON.parse(hotUpdateSearchPaths));
console.log(’[main.js] 热更新SearchPath: ’ + JSON.parse(hotUpdateSearchPaths));
}else {
console.log(’[main.js] 未获取到热更新资源路径!’);
}
}else {
console.log(’[main.js] 不是native平台!’);
}
if (CC_PHYSICS_BUILTIN || CC_PHYSICS_CANNON) {
require(‘src/physics.js’);
}
require(‘jsb-adapter/jsb-engine.js’);
}

cc.macro.CLEANUP_IMAGE_CACHE = true;
window.boot();

}

3赞