每次做整包更新的时候删除一下缓存目录
jsb.fileUtils.getWritablePath()是可写目录,别的游戏也会用到,你这是在给别的游戏挖坑啊,666
我也遇到了这个问题。你删除掉之后,可以了正确使用最新的更新文件嘛?
新版本需要强制清除热更新缓存目录。 这是很多人容易忽略的点。
getWritablePath 是基于自己游戏APP目录下的。 比如 android上就是 mnt/data/com.ooxx.ooxx/目录, IOS上就是 app/ewer-5432f-2rfedcv3…/ducuments/.
大概是这个意思。 就是说,是基于自己目录下的, 不会影响到其它应用
就是要自己删一次?坑爹
对 可以了
判断有整包更新的时候删除一下就可以了
对 是酱紫
main.js 会去根据 local storage 获取之前热更新下来的目录,这样的话可能会造成安装好的新版本资源被覆盖的情况。
也不是一定要删除原来的,你也可以每个发布 app 包的主版本用不同的 local storage key 来保存本地路径,这样就不会冲突了
panda大大这个方法好,比较不容易出错,而且方便操作。
每一个IPA,APK,都有一个对应的版本号。。 写入到缓存目录中。 启动时,先检查这个版本号与缓存中的是否一致。 如果不一致。则删除缓存目录,再cc.game.restart 收工!
AssetManagerEx里其实是做了的,把包里的project.manifest传进去,跟缓存的比较,比缓存大会删掉全部缓存,HotUpdate里有一句this._am.loadLocalManifest(this.manifestUrl); 自行提前调用
bool localNewer = _localManifest->versionGreater(cachedManifest, _versionCompareHandle);
if (localNewer)
{
// Recreate storage, to empty the content
_fileUtils->removeDirectory(_storagePath);
_fileUtils->createDirectory(_storagePath);
CC_SAFE_RELEASE(cachedManifest);
}
如果是两个相同的app 覆盖安装 该怎么办?
挖坟见谅。
分享一下结论。
用2.1.3验证,确实如层主所说,新版本App覆盖安装旧版本,只要版本号比他大,会自动清空缓存目录。
而如果版本号比他小,也不会再去下载更新文件,而是直接用本地的。
这个利用好,应该可以解决很多问题了。
旧包热更新后 main,js 就报错了 main.js 内要加什么代码判断为大版本更新
在请求热更版本的时候把最新的apk版本号返回,对比本地的apk版本号判断是否要大版本更新,如果没有大版本更新在去验证是否有资源热更新
我现在并非这个问题 我现在是旧版本热更新过 现在大版本从商店更新下来 main,js启动就去寻找原来的旧版本的热更新文件 直接报错黑屏 我必须在main.js文件中判断已经安装了新的整包 直接清缓存重启、但main.js内无法执行cc.game.restart()…
但是你可以在boot前,删除缓存啊
大版本更新前先把缓存路径下的缓存资源删掉