- 精通Cocos2d-x游戏开发(进阶卷)
- 王永宝
- 762字
- 2020-11-28 22:36:59
3.3 Manifest文件详解
AssetsManagerEx使用Manifest配置文件来描述增量更新的详细信息,Manifest意为清单,文件内容是JSON格式。在增量更新中会用到两种Manifest文件,即ProjectManifest和VersionManifest, ProjectManifest文件描述了详细的增量更新信息,如版本信息、要下载的资源文件列表、文件的MD5,以及它们的下载路径等。我们需要有两个ProjectManifest文件,即一个本地的和一个远程的Manifest,在检查更新时,根据本地的Manifest和远程的Manifest进行判断,从而判断是否需要更新。
VersionManifest是ProjectManifest的简化版,这个文件是可选的,VersionManifest文件仅仅记录了版本信息以及ProjectManifest的下载路径等信息,因为并不是每次启动都有内容要更新,所以通过VersionManifest文件就可以判断。当有更新时才去下载详细的ProjectManifest,如果ProjectManifest文件的内容不多,也可以忽略VersionManifest文件,如果不配置VersionManifest文件,则每次检查更新时都会直接下载服务器的ProjectManifest进行判断。下面是一个简单的VersionManifest文件示例。
{ "packageUrl": "http://localhost/test/", "remoteManifestUrl": "http://localhost/test/project.manifest", "remoteVersionUrl": "http://localhost/test/version.manifest", "version": "1.0.2", "groupVersions": { "1": "1.0.1", "2": "1.0.2" } }
VersionManifest中包含了增量更新的版本信息,其中版本号和版本组是需要注意的,因为AssetsManagerEx是同时根据这两个字段来判断是否需要更新的。版本组包含了很多小的版本号,如1.0.1、1.0.2等,在版本号字段相同的情况下,只要服务器的Manifest中版本组字段中有一个版本号是本地没有的,那么就需要更新,当需要更新时,会获取服务器的ProjectManifest进行进一步的判断,如图3-2所示为版本信息结构。
图3-2 版本信息结构
下面是一个完整的ProjectManifest示例。
{ "packageUrl": "http://localhost/test/", "remoteManifestUrl": "http://localhost/test/project.manifest", "remoteVersionUrl": "http://localhost/test/version.manifest", "version": "1.0.2", "groupVersions": { "1": "1.0.1", "2": "1.0.2" }, "assets": { "1.0.1": { "path": "release1.0.1.zip", "md5": "01621650ddc23821709efd68e3786d2c", "compressed": true }, "1.0.2": { "path": "release1.0.2.zip", "md5": "596d892583761b91d910ecd45f473725", "compressed": true } } "searchPaths" : [ "res/" ] }
ProjectManifest完全包含了VersionManifest中的全部内容,除了版本信息之外,ProjectManifest还包含了详细的资源信息,最主要的是资源列表信息。资源列表信息由一个个资源信息组成,每个资源信息都包括下载路径、MD5、是否被压缩、分组等属性。如果资源信息下没有path属性,会将自定义的资源名作为path的默认值,如上面的1.0.1资源没有配置path,那么path就会被设置为1.0.1。如图3-3所示为资源信息结构。
图3-3 资源信息结构
关于Manifest文件的生成,需要自己实现一个小工具按照AssetsManagerEx的规则来生成Manifest文件。