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文件。