本文将会具体解说cocos2d-js下的热更新机制。这篇内容先给大家介绍一下两个manifest文件就当热身了。

首先介绍project.manifest:  举个样例

{

"packageUrl" : "http://192.168.1.108/games/dragon_gold",

"remoteManifestUrl" : "http://192.168.1.108/games/dragon_gold/project.manifest",

"remoteVersionUrl" : "http://192.168.1.108/games/dragon_gold/version.manifest",

"version" : "1.0.2",

"groupVersions" : {

        "1" : "1.0.1",

"2" : "1.0.2"

    },

"engineVersion" : "3.6",

"assets" : {

        "update1" : {

            "path" : "dragon_gold1.zip",

            "md5" : "140caaa2a4508912424e807a941bf71",

            "compressed" : true,

            "group" : "1"

        },



"update2" : {

            "path" : "dragon_gold2.zip",

            "md5" : "140caaa2a4508912424e807a941bf7bc",

            "compressed" : true,

            "group" : "2"

        }

      },

      "searchPaths" : [

         ]

}

  • packageUrl :  远程资源的下载根路径。 (它是为“dragon_gold1.zip”服务的。没了这个根路径我们都找不到要下载的包)
  • remoteVersionUrl :远程版本号文件的路径,用来推断server端是否有新版本号的资源。
  • remoteManifestUrl :远程配置文件的路径,包括版本号信息以及全部资源信息。
  • version : 配置文件相应的版本号。

    (这个用来推断是否有新的更新包)

  • assets :这个比較重要:里面的value就是相应要更新的包,当中path是更新包的包名。md5:当在下次更新时用来比較这次与上次下载下来的manifest文件里相应的包的md5 码是否同样,不同的话须要做些处理(更新。删除操作)。

    compressed是用来决定下载下来的包是否须要解压。

    group是重中之重。它是用来实现增量跟新的。它的值与groupVersions相相应。

举个样例:有这么两个用户,第一个用户下载app之后一直没玩。第二个用户一直在玩每次有更新时第二个用户都会跟着更新,如今第二个用户当前的version为1.0.1时。他会去更新update2这个包,可是第一个用户一直没玩所以他的更新包version是1.0.0。这时他须要去更新update1和update2这两个包,
这就是一个简单的实现增量更新的样例。
(备注:当时用2.x版本号引擎没提供这个功能。自己做了个增量更新功能坑了一段时间,如今引擎已经提供这个功能方便多了)。

我一直再讲project.manifest这个文件却没有说version.manifest,它事实上是个简化版 的project.manifest。当我们版本号已经有了几十个甚至几百个更新包时。显然下载project.manifest来推断是否有无更新是不明智的(由于更新包越多project.manifest体积变得越大。对于手机这么贵的流量下载这么大的东西是不划算的),因此此时的version.manifest用处就明显了,不管project.manifest体积多大,它永远仅仅须要这么几行代码就能够了:

{

"packageUrl" : "http://192.168.1.108/games/dragon_gold",

"remoteManifestUrl" : "http://192.168.1.108/games/dragon_gold/project.manifest",

"remoteVersionUrl" : "http://192.168.1.108/games/dragon_gold/version.manifest",

"version" : "1.0.2",

"groupVersions" : {

        "1" : "1.0.1",

"2" : "1.0.2"
...

    }

}

这一节就讲到这。下次開始用我眼下做的一个项目来具体解说热更新的使用方法。(备注:这一节是用工作时间写的。有点马虎了.......)

最新文章

  1. 《C#微信开发系列(2)-自定义菜单管理》
  2. C++基础知识(4)---例外、异常处理
  3. Scala的下一步
  4. Maven项目中的run as选项介绍
  5. 图解equals与hashcode方法相等/不相等的互相关系
  6. h5上滑刷新(分页)
  7. OpenGL ES学习笔记(一)——基本用法、绘制流程与着色器编译
  8. vs2010代码注释自动生成api文档
  9. CF 322E - Ciel the Commander 树的点分治
  10. java_Cookies_1_商品浏览历史记录servlet1
  11. 转发——推荐一些国外高质量Java开发者的博客
  12. WebView的基本使用
  13. jsoncpp第二篇------API
  14. 原生javascript实现图片放大镜效果
  15. UITextField总结
  16. GET_DDL提取目标元数据:ddl
  17. 使用Python管理数据库
  18. C# 快速高效率复制对象的几种方式
  19. Spring事务管理----事物回滚
  20. Linux学习之路4——文件IO打开、创建、读写操作

热门文章

  1. hrift does not support polymorphic data types
  2. jQuery Mobile页面跳转切换的几种方式
  3. 上机题目(中级)- 两个超级大的整数相加相减 (Java)
  4. [C++设计模式]observer 观察者模式
  5. 【scikit-learn】交叉验证及其用于參数选择、模型选择、特征选择的样例
  6. 2015.04.20,外语,读书笔记-《Word Power Made Easy》 11 “如何辱骂敌人” SESSION 30
  7. tflearn中一些CNN RNN的例子
  8. Vmware VM共享
  9. 9.自己实现linux中的tree
  10. Microsoft Edge 首个 Chromium 内核版释出