安卓平台上app热更新之后无法再进行覆盖安装

判断有整包更新的时候删除一下就可以了

对 是酱紫

main.js 会去根据 local storage 获取之前热更新下来的目录,这样的话可能会造成安装好的新版本资源被覆盖的情况。

也不是一定要删除原来的,你也可以每个发布 app 包的主版本用不同的 local storage key 来保存本地路径,这样就不会冲突了

panda大大这个方法好,比较不容易出错,而且方便操作。:+1:

1赞

每一个IPA,APK,都有一个对应的版本号。。 写入到缓存目录中。 启动时,先检查这个版本号与缓存中的是否一致。 如果不一致。则删除缓存目录,再cc.game.restart 收工!

2赞

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前,删除缓存啊

大版本更新前先把缓存路径下的缓存资源删掉

更新前?哪里可以判断到? 哪个方法可以 :man_facepalming:。。

我是热更前通过http请求热更地址顺便把apk最新版本号返回回来

挖坟见谅。
经验证ios会自动清空,安卓不行。

监听覆盖安装的广播,再调用 jsb.fileUtils.removeDirectory(jsb.fileUtils.getWritablePath()),,是这样解决的吗?

俺记一下!

你能贴一下全部代码吗

每次启动时 检查本地保存的 版本号 与当前apk的版本号是否一致
否则就删除 缓存目录数据 帐号密码可以保留