先说下我的需求,就是生成的project.manifest里并没有填真实的packageurl,这个需要更新时在逻辑里动态修改。
先从自己的服务器接口获取是否应该更新,以及线上的更新packageurl。然后使用loadManifet(manifest,updateRootDir)来加载。
目前遇到几个坑。
1.使用loadManifest(localManifest,updateRootDir)来加载的,但这个方法里面又会自行去读取tempManifest(上次更新一半中断的临时文件),如果我传入的和这个temp版本号一样,他会直接把我传的丢掉,然后使用了tempManifest,但tempManifest可能是有问题的(比如packageUrl不对)。 我觉得这个做法完全是多此一举,我都自己构建manifest了,你干嘛 还要自己去取别的。
2.如果第1步成功(首次更新,没有tempManifest,可以成功)。因为从服务端下载下来的project.manifest里的packageurl是不对的(仅仅是个占位符),下次再loadManifest时,我也是自行构建正确的manifest传入,但loadLocalManifest方法里面又自作主张去读了上次更新下来的manifest文件,然后对比后发现版本一样,又把我传的丢掉的,用了错误的manifest。
3.应该是为了中断后能继续,把单文件的更新状态直接写入到了tempManifest文件里面,但如果更新失败,那意味着这个文件本身可能是有问题的。可是下次更新依然优先使用了这个文件,那可能永远不会成功。
如果只是想继续更新,完全可以不保留这个文件,仅保留下载的资源文件,继续更新时使用verify接口验证一下就可以了啊。
其实要解决这几个问题很简单。
如果手动构建的manifest,那直接用就好了,不要再搞其他的逻辑。
或者assetmanager提供一个setPackageUrl的方法,全部使用这个就行了。