Egret Native项目热更新
2015-06-24 15:02
666 查看
http://docs.egret-labs.org/post/tools/native/hot-upgrade.html
概述
Egret的封装项目无论在Android还是iOS平台,均支持热更新。以下主要以Android平台为例来说明,iOS平台只需要在相应的配置和iOS入口类代码中进行不同的修改配置即可。
基本配置
首先我们先来说下native在egretProperties.json中的相关配置数据。图1 Egret项目配置文件中与热更新相关的字段
release字段:这个为项目发布目录,如果需要指定某个特定的发布目录,修改这个路径值(相对当前目录的路径)。不指定(或者没有此字段,默认为空),会发布在H5项目里的release文件夹中。
native字段下,
path_ignore字段:忽略列表,即不希望在native包里出现的文件(夹),在忽略列表里的文件(夹)必须是在H5工程目录里的且是相对于当前目录的相对路径。图1中
["release"]即为当前H5目录下的一个文件夹。
native字段下,
android_path字段:
android_path为Android项目相对当前文件夹的相对路径,其中如果没有Android,对应的
android_path将会不存在或者为空字符串。
图1中Android为一个使用egret命令创建出来的Android项目(包含proj.android、thirdparty),不是单纯的一个文件夹。如图所示:
Native更新机制原理
在Android的入口代码中,有个方法getLoaderUrl,它提供了Android以何方式来读取文件。
1、空字符串。即当前包使用最原始的格式。
egret b -e --runtime native之后的数据结构。
2、"gamecode.zip"。publish之后,会将最新的资源包拷贝到Android项目中。此时如果需要在Android项目中测试,则需要将返回值改成对应的gamecode.zip对应的名称,如图中则应该返回的字符串为"gamecode1418351650.zip"。
3、
http://www.example.com/game_code.zip(服务器方式,并且是绝对地址,包括"http://"头)。只有使用这种方式才会有热更新机制。引擎会根据提供的gamecode.zip的名称(如"gamecode1418351650.zip",而不是将路径由"http://www.example.com/1111/gamecode.zip"改成"http://www.example.com/2222/game_code.zip")来判断是否需要下载。所以如果需要更新,则返回的zip包的文件名应该每个版本都不一样。下面提供2种参考方案来实现这个需求。
[code]a)在java端请求一个服务器地址,通过服务器端返回的zip包地址来更改。 b)读取一个特定地址服务器端的文本文件,文件里写有zip包的地址。
版本发布步骤
执行egret b -e --runtime native,编译native项目。
执行
egret publish --runtime native -compile,发布最新的可更新的资源包。
执行完后将会在H5工程的release/android里生成当前发布的版本数据。图中文件夹1418351650为最新发布的版本,文件夹内资源即为需要更新的资源,将此文件夹1418351650上传到服务器就可以了。
修改服务器配置的gamecode.zip包的最新地址(绝对地址并且包括"http://"头),如"http://www.example.com/gamecode_1418351650.zip"。
自定义加载页面
有更新,必然需要更新相关的加载进度显示。在native_loader.js里,提供了一个简单的加载进度代码。egret_native.initLoadingUI()初始化加载页面。
egret_native.setProgress()修改加载进度。
egret_native.loadError()资源更新出错。
egret_native.removeUI()删除加载页面。
由于热更新是在引擎代码加载后执行的,因此可以使用引擎的类及方法(如 egret.Bitmap, egret.TextField)。
因为是js文件,所以不要有类型声明,如错误声明var textField:egret.TextField(不要加上":egret.TextField")。
注意事项
如果需要native包中拥有热更新,那么getLoaderUrl()方法返回的服务器的zip包地址就不能写死。native项目请不要在H5工程内创建。
相关文章推荐
- android开发使用fragment commit时的一些坑
- 有序表查找算法(折半,插值,斐波那契)
- 在Tomcat下指定Jsp生成的Java文件路径
- RedirectResult,RedirectToRoute
- Android HAL实例解析
- http状态码 404 200 500
- System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接
- [Javascript] IIFE
- 外企的职位等级制度
- JMeter常用测试元件
- 网络五层模型及相关协议的数据格式
- 【动态规划】【多重背包】[HDU 1059]Dividing
- ios中 继承对象模型的归档实现
- memset,memcpy,strcpy的使用与区别
- memset,memcpy,strcpy的使用与区别
- 【贪心+背包】BZOJ1334 [Baltic2008]Elect
- 【Egret】Native项目热更新
- python模拟登录有验证码的网站记录
- 阿里国际化之乱:海外自建商城违背战略被弃
- FileResult,JavaScriptResult,JsonResult