热更新-生成project.manifest的时机

creator版本 1.3.2
目前按照21点的例子可以检测到更新,但是场景没有变
一直很疑惑 什么时候运行 version_generator.js 生成project.manifest
先点构建 然后build\jsb-default 目录下就有了 res文件夹和 src文件夹,然后把这两个文件夹拷贝到一个目录
比如 remote-assets 下面,再运行version_generator.js 得到了 project.manifest 和version.manifest
然后把project.mainfest 拷到程序目录 assets下面,热更新组件需要这个文件,但此时程序还没有编译,是直接把
res,src,project.mainfest,version.mainfest 上传到服务器,还是需要编译后,再生成一次project.mainfest 再上传了

构建之后就可以生成 manifest 了

  1. 在初始版本中生成了本地的 manifests 之后放到项目中打包,作为发布包发布到 app store 中
  2. remote assets 的生成并不是从 remote-assets 中生成的,而是在你的项目更新到新版本之后,重新 build,再生成一次 manifest,然后将 build 出来的 res/, src/, manifests 作为远程资源上传到服务器

可以了,感谢panda

@panda
感觉这个 manfiest 的生成还是有问题
先build 再 生成 manifest, 这时 project.manifest 里包含的 version.manifest 和 project.manifest 是生成之前 的hash,这导致setVerifyCallback 这个方法没法验证
既使 再重新 build 一遍还是不行,感觉这是个死循环了如果manifests 放到 Assets的话,但是不放到 Assets 里loadLocalManifest又没法加载。

1赞

:joy:
同样感觉死循环。 怎么破。

觉得是死循环是因为你没有仔仔细细把热更新的流程想明白。

疑问

我也感觉这个步骤是有点问题,发布app整包的时候,会导致强制去编译两次资源代码

  • 1 步:编译资源和脚本(这里面就是旧的 manifest 文件)
  • 2 步:执行 version_generator.js 生成出 manifest 文件(这里才是新的文件)

当第 2 步生成出来新的 manifest 文件后,第 1 步打包到 build/jsb-default 却是旧的 manifest 文件

那么是不是需要继续第 1 步的编译流程,才能保证这次出包本地的 manifest 文件才是和 /src/res 对应的 MD5 文件呢?

1赞

第2步生成的 manifest 替换第一步编译生成的 .manifest 文件就可以了
(注意新版本引擎生成的 .manifest文件改名了,你需要查找到该资源进行替换).

当然你也可以替换掉工程目录下的 manifest ,再走一遍第1步

思路

根据上面我提的疑问,这两天困扰着我,我走了 第 1 步,第 2 步,再反过来走第 1 步,发现 manifestMD5 不一致,甚至同一份资源发布两次 version_generator.js 操作后得到的 manifest 文件大小都不一样,我开始换一种思路去考虑,用 python 去找到 version_generator.js 生成出来的最新 manifest 文件内容,替换掉 build/jsb-defautlt 下生成的 manifest 文件,并修改 manifest 文件里面的 MD5,出现了死循环。原来楼上说的死循环是这样来的。

  • 是现有鸡还是先有蛋

假设你要在(A 文件里面)存一个 A 的 MD5 码字符串,你该怎么办?
现要在 version_generator.js 生成的 manifest 文件里面替换掉这个 manifest 文件的 MD5 是行不通的。


如果不把 project.manifest 这个文件放在 Creator 编辑器里面加载引用,project.manifest 就不能随着热更新文件一同被更新,就得自己写一个只针对 project.manifest 文件更新的方案,大家有更好的解决方案吗?

如果本地的 project.manifest 存放在一个固定的 Native 路径下的话,操作就方便多了,不用多重复的去生成两次,不用在场景或者预制上拖动 manifest 到组件的形式去获取 nativeURL

  • 1.固定一个 manifest 路径后,就不会有 dc88e88d-4cbb-441e-a6ad-2844708fd7fd.manifes 文件,project.manifest 不包含在版本控制的配置当中,通过本地固定的 manifest nativeURL,初始化 jsb.AssetsManager
  • 2.更新完成后把最新的 project.manifest 文件替换到本地去,下次用最新的 project.manifest 文件对比版本更新
3赞

:smile:不能赞同更多