# Egret-Hotupdate **Repository Path**: jjflora/egret-hotupdate ## Basic Information - **Project Name**: Egret-Hotupdate - **Description**: 白鹭官方提供的热更新方案中只提供了一种整包更新的方案,但是对于资源量较大的游戏,这种方案就非常不可取了。此方案是根据增量更新的思路设计编写。暂时只有Android 案例 - **Primary Language**: Unknown - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 7 - **Created**: 2021-05-10 - **Last Updated**: 2025-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 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](step-1.jpg "") ### 2.当前端判断有版本更新之后,就可以点击开始更新按钮。 ![图片2](step-2.jpg "") ### 3.更新开始后,会有进度变化,知道完成度达到100%,就可以点击重启Egret。 ![图片3](step-3.jpg "") ### 4.重启Egret,会在不关闭App的状态下完成Egret重启,重启后游戏版本号已经更新成最新版本。 ![图片4](step-4.jpg "")