manifest文件是不是一定要一开始就在本地端,不能动态产生或下载?
我试着产生一个一样的文件,但是jsb.AssetsManager似乎不接受我的路径。
manifest文件是不是一定要一开始就在本地端,不能动态产生或下载?
我试着产生一个一样的文件,但是jsb.AssetsManager似乎不接受我的路径。
你出现的问题是什么样的,具体做法是什么?
万分感谢你的回答。
先动态产生.manifest file:
cc.loader.load(this.projectManifest,function (err,res) {
if (err)
console.log("err " + err);
else {
this.url_npm = ((jsb.fileUtils ? jsb.fileUtils.getWritablePath() : '/hotupdateFunc') + "manifestfolder/newproject.manifest");
var obj = JSON.parse(res);
jsb.fileUtils.writeToFile(obj,this.url_npm);
this.onLoaderFinish();
}
}.bind(this));
再利用路径去创建AssetsManager:
this._am = new jsb.AssetsManager(this.url_npm,storagePath);
执行this._am.checkUpdate后,在Android Studio的log看到的讯息是:
AssetsManagerEx : No local manifest file found error.
你那个 url_npm 打印出来看看?
应该是 cc.url.raw('resources/manifest') 才能传入 new AssetsManager
url_npm 路径打印出来是 /data/data/org.cocos2d.HotUpdate_FUNC/files/manifestfolder/newproject.manifest
我试着用jsb.fileUtils.isFileExist(this.url_npm)检查,发现是false。
是不是jsb.fileUtils.writeToFile 是异步执行所以没有完成?
有没有办法修改本地端.manifest的内容呢?
我建议你用 writeStringToFile,而且这个函数会返回写入成功与否,所以应该是同步的吧。你看看返回结果,然后在 setTimeout(f, 1000) 中执行 isFileExist。
最后,传给 AssetsManager 构造器的路径,可以是绝对路径,或者是 cc.url.raw 获得的 resources 下的路径
万分感谢你的回答。
我也需要你的测试结果。
我现在在做游戏大厅下载更新子游戏方案,所以你或许能给我的想法以实践保证。
不过我不是手动修改 manifest,而是更新游戏后,同时更新 manifest 文件。
我修正了我没有成功动态产生.manifest file的问题,jsb.AssetsManager 成功checkUpdate,不再有 ‘ No local manifest file found error’的错误。
写入档案失败的原因是由于jsb.fileUtils.writeToFile的路径中,我在jsb.fileUtils.getWritablePath() 后面加的folder并没有生成。
之后你准备做什么呢?
你动态生成 manifest 文件内容的目的是什么?
动态生成manifest是希望热更新的档案名称可以有变动时间戳记,我们的热更新档案放在cdn server上有缓存的问题。
热更新的功能我已经测试完毕,之后希望热更新可以不需要执行重启游戏。
楼主最终如何实现的? 能否告知下 昨天也在折腾这个 无法实现 都是加载本地manifest失败。也是为了解决cdn缓存问题 和多次打包的问题。。