mark一下
上边其实只讲了原理和可行性. 具体如何控制只更新一次并未讲到.
目前自己在本地已经完善了这部分功能,大概代码如下:
// 引擎启动前需要记录一下当前版本的bundle列表.(main.js修改)
// 暂存当前版本的md5. 用于更新patch.
let currentBundles = settings.bundleVers;
const currentVer = cc.sys.localStorage.getItem("currentVers");
if (!currentVer) {
cc.sys.localStorage.setItem("currentVers", JSON.stringify(currentBundles));
}
// 启动后,在loading过程中检测需要下载的bundle,并异步进行下载. (业务代码中添加执行.)
private async doLoadBundles() {
const updateInfo = cc.sys.localStorage.getItem("updateInfo");
const currentVer = cc.sys.localStorage.getItem("currentVers");
if (!updateInfo || !currentVer) return;
let updateInfoObj = JSON.parse(updateInfo).bundles;
let currentVerObj = JSON.parse(currentVer);
for (let b in updateInfoObj) {
if (updateInfoObj[b] != currentVerObj[b]) {
console.log(">>>更新Bundle:", b);
await Context.get().getBundle(b);
currentVerObj[b] = updateInfoObj[b];
cc.sys.localStorage.setItem("currentVers", JSON.stringify(currentVerObj));
console.log("<<<Bundle更新完成:", b);
}
}
}
哦哦,这样的话确实比以前的热更新简单易懂得多。
感谢大神分享,这思路看着应该原生端都可以通用吧,ios上使用会有什么问题吗
mark一下,学习了
本来就是为原生端做的. 通用逻辑.
战略插眼战略插眼
mark 动态热更方案
Mark···
支持一下!!!!
loadbundle能显示下载进度么
loadBundle 本身只是下载了bundle的 一个config.json文件,需要得到bundle对象后,执行preloadDir() 等接口进行资源下载操作。这些接口是有进度回调的。
下载进度是可以获取的
/**下载某个 远程Bundle */
private loadRemoteBundle() {
//options是可选参数,引擎会根据保留字段 进行对应的操作,这里添加了version和onFileProgress,可用来记录热更资源版本和下载进度
let url = "http://127.0.0.1:8080/sub";
let version = "12145"
const options = {
version: version,
onFileProgress: (loaded: number, total: number) => {
cc.log(`已经下载资源数:"${loaded} 总资源数:${total}`);
// this.progressBar.progress = loaded / total;
}
}
cc.assetManager.loadBundle(url, options, (err, bundle) => {
if (!err) {
// this.txtState.string = "加载远程bundle完毕"
cc.log("time" + new Date().toTimeString())
cc.log(cc.assetManager.assets)
// 查询缓存路径。
// cc.assetManager.cacheManager.getCache(bundle.base)
}
})
}
mark mark
挺好的,就是没有md5校验。。。 可能有未知的问题
mark~
怎么提前写入到update.json里面去?怎么知道目前设置bundle的文件夹里面大小多少,通过自己看文件夹手动写入到里面吗?
这个是资源数,不是多少MB,不能知道多少兆
以前做2dx的时候热更新方案:
在版本文件中列举了文件的md5和对应的大小 
这样在下载某个文件完成的时候就记录完成了多少kb多少mb
原生平台不建议勾选md5,我这几天看了热更新,而且热更新的文件是那两个manifest大小。拿取不了bundle文件的大小