安卓底包更新后,仍然加载旧的project.manifest

我发现安卓下当更新底包后,仍然加载就的project.manifest,导致之前的热更内容没有被清空。查看源码发现,安卓底包更新后assets目录并不会更新
http://stackoverflow.com/questions/33469330/assets-not-replaced-by-version-upgrade

所以此处加载的project.manifest仍然是旧的

FileUtils下并没有使用android原始代码去加载assets文件,如果使用AssetsManager来加载没问题。

@panda

没有人遇到吗?还是我配置的不正确?求解

正常的,你需要清空之前的下载目录

现在不是清空目录的问题,关键问题是project.manifest获取到的是老的,AssetsManager并不会清空目录,这不算bug吗?需要开发者写代码清空?

有些时候人家就是不需要清空啊,获取到老的是对的呀,要你自己清空。

既然更新底包,脚本包括资源应该是最新的,为什么不清空之前的热更部分?我不太明白。再者,这不是我问题的关键点,是project.manifest使用的还是旧的,导致在js并不能正确指向新的更新地址,我觉得这部分是bug

这里说的project.manifest是assets下的,并不是热更目录中的

热更新实际上没有改变assets里面的东西,只是修改了加载时的目录而已。

我知道,我是更新底包,也就是apk更新,assets里的project.manifest是新的

你在安卓上用es文件浏览器看,肯定变了,你用代码加载没变估计是路径已经被热更新适配过了。

这是很正常的,我们推荐的更新方式是这样的,从 1.0 更新底包到 2.0,将 manifest 路径改为 project_v2.manifest,然后匹配服务端的 project_v2.manifest,这样可以隔离大版本之间的匹配问题。否则没有更新底包的 1.x 用户,更新到 2.x 的资源一样会出问题。

有几点都是需要热更新使用者来控制的:

  1. 更新包的匹配关系
  2. 更新底包后下载路径的清理
  3. 搜索路径优先级控制

这些代码都是 100% 在用户代码中的,引擎提供的热更新逻辑只负责某个 manifest 指定的资源更新

从引擎设计的角度考虑,引擎做得太多,难免就会特化某些需求场景,会被骂得更惨,你遇到的问题好歹是完全可以在用户代码层面解决的,我们觉得被骂完解释一下,只要用户能理解都还可以接受

ok,明白了

感谢panda大神百忙之中回复:grin: