Egret Native项目热更新
来源:互联网 发布:免费ppt模板 知乎 编辑:程序博客网 时间:2024/06/03 14:26
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种参考方案来实现这个需求。
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工程内创建。
- Egret Native项目热更新
- react native热更新
- React Native热更新
- react-native 热更新(android)
- React Native 热更新实现
- React Native-Pushy热更新
- React Native热更新方案
- React-Native 热更新 CodePush
- React-Native 热更新以及增量更新
- Android React Native 热更新 自己搭建热更新平台
- React-Native热更新部署/热更新CodePush集成详解
- 利用CodePush对react-native项目热更新(以android为例)
- CodePush 热更新React-Native(ios)
- React Native 热更新 注意点1
- react-native热更新闪屏问题
- React-Native 热更新尝试(Android)
- react native搭建私有热更新服务器
- 微软的React Native热更新
- 外企的职位等级制度
- 欢迎使用CSDN-markdown编辑器
- 【动态规划】【多重背包】[HDU 1059]Dividing
- Android HAL实例解析
- adb 命令之appt
- Egret Native项目热更新
- Install Cassandra 2.1 on Mac OS X
- Ubuntu14.04 Android 源码编译
- 句子的编辑距离
- Linux类似迅雷的下载利器uGet
- android开发使用fragment commit时的一些坑
- 7.找出矩阵中行最大列最小的数
- 计时器
- Python中file.close()方法的使用与否