1 Star 13 Fork 7

jiajun / Egret-Hotupdate

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
WTFPL

Egret-Hotupdate 白鹭热更新-增量更新方案

介绍

白鹭官方提供的热更新方案中只提供了一种整包更新的方案,但是对于资源量较大的游戏,这种方案就非常不可取了。此方案是根据增量更新的思路设计编写。暂时只有Android 案例。 热更新的版本管理一般分两种:一种是完全前端管理,后端不参与,需要前端独立完成与远程版本库的版本比对和下载最新,优点是简单,缺点是版本控制不灵活;第二种是后端管理,前端从后端获取版本信息,再比对更新,优点是版本控制灵活,后端随意控制,缺点是多一点点运维工作。本案例采用的是后端管理版本的方式编写,想改成前端管理的方式也很容易,只需要把获取最新版本信息的途径从后端转移到前端即可。

设计思路

1.启动APP

2.读取 APP 数据存储 SharedPreferences

current_version=[current version]
new_version=[new version]
new_version_state=0:incomplete/1:update complete
remote_url=http://zzzzzz/[new version]

3.如果 SharedPreferences不存在, 首次读取会自动创建,并根据assets路径下的最初始的版本文件(version.manifest或者project.manifest)记录的当前版本号和资源下载地址,编辑SharedPreferences,保存如下键值对.

current_version=[original version]
new_version=[original version]
new_version_state=1:update complete
new_version_remote_url=http://zzzzzz/[original version]

4.根据SharedPreferences存储的[current_version], 设置EgrestNative预加载目录并启动EgretNative。向后端发送http请求,获取最新发布的版本信息hdConfig(版本号和资源地址)。

hdConfig ={
	remote_url:url,
	current_version:xxx
}

5.比对本地当前版本号与最新版本号.

  • 如果 SharedPreferences[current_version] >= hdConfig[current_version], 表示没有更新,继续进入游戏。
  • 否则表示有更新,并根据新版本信息更新SharedPreference的new_version 和 new_version_state 和 new_version_remote_url。
new_version=[new version]
new_version_state=0:incomplete
new_version_remote_url=http://zzzzzz/[new version]

6.开始更新。首先复制本地当前版本的资源文件夹,如果不存在(初次更新),就复制原始assets文件夹,复制到以最新版本号为名的文件夹内。

7.根据SharedPreference记录的new_version_remote_url,加载project.manifest。

8.比较本地资源文件夹内的project.manifest和最新的project.manifest。

  • 比对查找出本地所有不再使用的文件,等待删除。
  • 比对查找出所有有修改的文件和新增文件,等待下载。

9.从之前复制的最新版本文件夹内删除所有不再使用的文件。

10.下载所有有更新或者新增文件到之前复制的最新版本文件夹内,并派发下载进度。

11.当所有删除和下载任务完成之后,更新SharedPreference如下,并删除上一版本资源文件夹(初次更新除外)。

current_version=[new version]
new_version_state=1:update complete

12.重新初始化 Egret Native(参照step-4).

案例操作

1.进入游戏界面,查看当前版本号,输入最新版本号 和 远端资源服务器地址(这里手动输入版本信息实际上是模拟从服务器端获取来的版本信息),点击检查更新。

图片1

2.当前端判断有版本更新之后,就可以点击开始更新按钮。

图片2

3.更新开始后,会有进度变化,知道完成度达到100%,就可以点击重启Egret。

图片3

4.重启Egret,会在不关闭App的状态下完成Egret重启,重启后游戏版本号已经更新成最新版本。

图片4

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO.

简介

白鹭官方提供的热更新方案中只提供了一种整包更新的方案,但是对于资源量较大的游戏,这种方案就非常不可取了。此方案是根据增量更新的思路设计编写。暂时只有Android 案例 展开 收起
JavaScript 等 4 种语言
WTFPL
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/jjflora/egret-hotupdate.git
git@gitee.com:jjflora/egret-hotupdate.git
jjflora
egret-hotupdate
Egret-Hotupdate
master

搜索帮助