本身是带热更新的,当发布新包时,如何清空原有热更资源,从新包的默认资源启动?

本身是带热更新的,当发布新包时,如何清空原有热更资源,从新包的默认资源启动?

我尝试这样做,再发现build编号不一致时,就清空资源,更改资源路径回到包中自带的资源。但发现还是自动更新了资源。这应该如何处理呢?

    checkBuild() {
    // var hotUpdateSearchPaths = localStorage.getItem('HotUpdateSearchPaths');
    // this.log('checkBuild: hotUpdateSearchPaths', hotUpdateSearchPaths);
    // var searchPaths = (<any>jsb).fileUtils.getSearchPaths();
    // this.log('checkBuild: searchPaths', searchPaths);

    let lastBuild = cc.sys.localStorage.getItem('currentBuild');
    let currentBuild = globalThis.AppInfoManager.getInstance().getBuild();
    cc.sys.localStorage.setItem('currentBuild', currentBuild);

    if (Common.MyString.isNullOrEmpty(currentBuild)) {
        this.log('没有之前的版本,当前的版本是:', currentBuild, 'storagePath', this._storagePath);
        jsb.fileUtils.removeDirectory(this._storagePath);
    }
    else {
        this.log('比较版本:', lastBuild, currentBuild);
        if (lastBuild != currentBuild) {
            this.log('构建编号更新,删除缓存资源', this._storagePath);
            jsb.fileUtils.removeDirectory(this._storagePath);

            // jsb.fileUtils.setSearchPaths(["@assets/"]);
            jsb.fileUtils.setSearchPaths([]);

            cc.sys.localStorage.removeItem('HotUpdateSearchPaths');
            // 重启一下
            // cc.audioEngine.stopAll();
            // cc.game.restart();
            // return true;
        }
    }
    return false;
}

资源根据md5来的

那如何清空,或者说如何变更到没有资源路径再本地包的状态呢?
就想一开始的状态一样。

几个点:

  1. 版本号本身是要能够区分是否是同一个商店包;比如 2.0.1 和 2.0.0 是同一个商店包下的,而 3.0.1 是需要到应用商店更新的。
  2. 新包安装后,需要删除热更缓存的情况只有一种:

本地之前是从 2.0.0 更新到 2.0.1,然后从应用商店更新了一个包 3.0.0
那么你要做的事情,就是在运行 3.0.0 版本,进行热更新检测的时候,查找下上次记录的更新版本(比如上次在更新2.0.1的时候,把2.0.1记录了下来),发现当前是一个跨商店版本的包,于是删除热更缓存后重启。

是的,描述的和我的需求是一样的。我是靠build号,只要不同,就认为是玩家新安装的,便要删掉资源。
我也发现我的代码走到了 「构建编号更新,删除缓存资源」这里。结果checkBuild这个函数过后,依然采用了原热更包的版本,认为这个原热更包的版本低于远端版本,进而还是从远端进行了一次热更新。

好像是这样的:
如果构建之后直接调用version_generator进行发布,工程里面的两个manifest使用的version号,没有更新进入热更包。

应该先使用version_generator发布一次,然后构建,然后再使用version_generator发布一次相同的version号。这样才能保证热更资源包里的manifest号相同。

构建需要两次,不是好像,就是这样。如果只是发布热更文件,一次就行,因为两个文件会发布到服务器做版本比对。如果要发布apk ipa,则在需要构建一次,把版本文件也构建到发布包里