检查热更新了一个jsb.EventAssetsManager.UPDATE_PROGRESSION的事件码。预期的事件 应该是 NEW_VERSION_FOUND 或者 ALREADY_UP_TO_DATE
Creator 2.2.0
平台,模拟器
输出log
log, 如图。
,全部代码如下,大佬帮忙看看`const { ccclass, property } = cc._decorator;
@ccclass
export default class UpgradeManager extends cc.Component {
public static Instance: UpgradeManager = null;
@property({
type: cc.Asset
})
private manifestUrl: cc.Asset = null;
private storagePath: string = null;
private isUpdating: boolean = false;
private isCanRetry: boolean = false;
private fileProgress: number = 0;
private byteProgress: number = 0;
private failCount: number = 0;
private assetsManager: jsb.AssetsManager = null;
onLoad() {
UpgradeManager.Instance = this;
}
start() {
this.init();
}
public init() {
Debugger.isDebug = true;
if (!CC_JSB) {
Debugger.warn('仅 Native(Android/iOS) 平台支持热更新');
return;
}
this.storagePath = (jsb.fileUtils ? jsb.fileUtils.getWritablePath() : '/') + 'remote-asset';
Debugger.log('Storage path for remote asset : ' + this.storagePath);
this.assetsManager = new jsb.AssetsManager("", this.storagePath);
if (cc.sys.os == cc.sys.OS_ANDROID) {
this.assetsManager.setMaxConcurrentTask(3);
}
this.checkUpdate();
}
private checkUpdate() {
if (this.isUpdating) {
Debugger.error('正在更新中 ...');
return;
}
if (this.assetsManager.getState() == jsb.AssetsManager.State.UNINITED) {
let url = this.manifestUrl.nativeUrl;
if (cc.loader.md5Pipe) {
url = cc.loader.md5Pipe.transformURL(url);
}
Debugger.log("url:", url);
this.assetsManager.loadLocalManifest(url);
}
if (!this.assetsManager.getLocalManifest() || !this.assetsManager.getLocalManifest().isLoaded()) {
Debugger.error('加载本地 manifest 文件失败');
}
this.assetsManager.setEventCallback(this.onCheckUpdateCallBack.bind(this));
this.assetsManager.checkUpdate();
this.isUpdating = true;
}
private execUpdate() {
if (this.assetsManager && !this.isUpdating) {
this.assetsManager.setEventCallback(this.onUpdateCallBack.bind(this));
if (this.assetsManager.getState() == jsb.AssetsManager.State.UNINITED) {
let url = this.manifestUrl.nativeUrl;
if (cc.loader.md5Pipe) {
url = cc.loader.md5Pipe.transformURL(url);
}
this.assetsManager.loadLocalManifest(url);
}
this.failCount = 0;
this.assetsManager.update();
this.isUpdating = true;
}
}
private onCheckUpdateCallBack(event) {
// let totalBytes = 0;
console.log("onCheckUpdateCallBack:", event.getEventCode(), event.getMessage());
// console.log("ERROR_NO_LOCAL_MANIFEST:", jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST);
// console.log("ERROR_DOWNLOAD_MANIFEST:", jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST);
// console.log("ERROR_PARSE_MANIFEST:", jsb.EventAssetsManager.ERROR_PARSE_MANIFEST);
// console.log("ALREADY_UP_TO_DATE:", jsb.EventAssetsManager.ALREADY_UP_TO_DATE);
// console.log("NEW_VERSION_FOUND:", jsb.EventAssetsManager.NEW_VERSION_FOUND);
// console.log("UPDATE_PROGRESSION:", jsb.EventAssetsManager.UPDATE_PROGRESSION);
// console.log("UPDATE_FINISHED:", jsb.EventAssetsManager.UPDATE_FINISHED);
// console.log("UPDATE_FAILED:", jsb.EventAssetsManager.UPDATE_FAILED);
// console.log("UPDATE_NEEDRESTART:", jsb.EventAssetsManager.UPDATE_NEEDRESTART);
// console.log("ERROR_UPDATING:", jsb.EventAssetsManager.ERROR_UPDATING);
// console.log("ERROR_DECOMPRESS:", jsb.EventAssetsManager.ERROR_DECOMPRESS);
let code = event.getEventCode();
let msg = '';
switch (code) {
case jsb.EventAssetsManager.NEW_VERSION_FOUND:
// totalBytes = event.getTotalBytes();
Debugger.error("发现新版本, 开始更新...");
this.fileProgress = 0;
this.byteProgress = 0;
this.onNewVersionFound();
break;
case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
Debugger.error("已经更新到最新版本");
break;
case jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
Debugger.error("没有加载到本地 Manifest 文件,跳过更新");
break;
case jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
case jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
Debugger.error("下载 Manifest 文件失败, 跳过更新");
break;
case jsb.EventAssetsManager.UPDATE_PROGRESSION:
this.byteProgress = event.getPercent();
this.fileProgress = event.getPercentByFile();
Debugger.error("files:" + `${event.getDownloadedFiles()}/${event.getTotalFiles()}`);
Debugger.error("bytes:" + `${event.getDownloadedBytes()}/${event.getTotalBytes()}`);
if (event.getMessage()) {
Debugger.error('Updated file: ' + event.getMessage());
}
break;
default:
break;
}
this.assetsManager.setEventCallback(null);
this.isUpdating = false;
}
private onUpdateCallBack(event) {
let needReStart = false;
let failed = false;
switch (event.getEventCode()) {
case jsb.EventAssetsManager.ALREADY_UP_TO_DATE:
Debugger.error("已经更新到最新版本");
break;
case jsb.EventAssetsManager.ERROR_NO_LOCAL_MANIFEST:
Debugger.error("没有加载到本地 Manifest 文件,跳过更新");
failed = true;
break;
case jsb.EventAssetsManager.UPDATE_PROGRESSION:
this.byteProgress = event.getPercent();
this.fileProgress = event.getPercentByFile();
Debugger.error("files:" + `${event.getDownloadedFiles()}/${event.getTotalFiles()}`);
Debugger.error("bytes:" + `${event.getDownloadedBytes()}/${event.getTotalBytes()}`);
if (event.getMessage()) {
Debugger.error('Updated file: ' + event.getMessage());
}
break;
case jsb.EventAssetsManager.ERROR_DOWNLOAD_MANIFEST:
case jsb.EventAssetsManager.ERROR_PARSE_MANIFEST:
Debugger.error("下载 Manifest 文件失败, 跳过更新");
break;
case jsb.EventAssetsManager.UPDATE_FINISHED:
Debugger.error("更新完成. " + event.getMessage());
needReStart = true;
break;
case jsb.EventAssetsManager.UPDATE_FAILED:
Debugger.error("更新失败. " + event.getMessage());
this.isUpdating = false;
this.isCanRetry = true;
break;
case jsb.EventAssetsManager.ERROR_UPDATING:
Debugger.error("资源更新失败:" + event.getAssetId() + ', ' + event.getMessage());
break;
case jsb.EventAssetsManager.ERROR_DECOMPRESS:
break;
default:
break;
}
if (failed) {
this.assetsManager.setEventCallback(null);
this.isUpdating = false;
let searchPaths = jsb.fileUtils.getSearchPaths();
var newPaths = this.assetsManager.getLocalManifest().getSearchPaths();
Array.prototype.unshift.apply(searchPaths, newPaths);
cc.sys.localStorage.setItem('HotUpdateSearchPaths', JSON.stringify(searchPaths));
jsb.fileUtils.setSearchPaths(searchPaths);
cc.audioEngine.stopAll();
cc.game.restart();
}
}
/**
* 检测到新版本
*/
private onNewVersionFound() {
// 执行更新
this.execUpdate();
}
private onAlreadyUpToDate() { }
private onUpdateProgression(data) { }
private onUpdateFailed() {
// retry
}
private onDownError() { }
}
`
输出了下 code 为 5, 对应 jsb.EventAssetsManager.UPDATE_PROGRESSION
你这代码自己写的还是在网上找的,明显有问题啊!
onCheckUpdateCallBack里面的case jsb.EventAssetsManager.UPDATE_PROGRESSION: 去掉
ok了记得回复一下哟
确实明显有问题, 一下子点醒。 非常感谢大佬
参考一下https://forum.cocos.org/t/topic/101219?u=ghlupup 
