Egret Native项目热更新
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项目热更新相关推荐
- vue项目热更新内存溢出问题
vue项目启动后,每次修改部分代码,再编译和打包时会频繁内存溢出,都会导致项目运行中断.有的同事是时不时会中断,我是每次都会中断 报错信息如下: > node –max_old_space_si ...
- vue项目 热更新慢
vue项目 --- 热更新慢 一.查找热更新慢是哪里慢---分析原因 二.解决办法 1.安装babel-plugin-dynamic-import-node插件 2..babelrc文件里添加配置dy ...
- React Native 实现热更新方案CodePush过程中遇到的问题 ( 搭建自己的CodePush服务器 )
前言 CodePush官方: https://github.com/Microsoft/react-native-code-push 自搭建CodePushServer: https://github ...
- Vite创建的Vue3.0项目热更新失效,写的代码没效果
一.项目技术栈:Vue3+TypeScript+Vite 二.问题描述: 项目之前好好的,突然代码热更新失效,即:每次写完 CSS 代码,怎么刷新都不行,需要重新 npm run dev,新增的代码才 ...
- React Native 热更新方案
转载: https://blog.csdn.net/xiangzhihong8/article/details/73201421 随着 React Native 的不断发展完善,越来越多的公司选择使用 ...
- React Native热更新方案
随着 React Native 的不断发展完善,越来越多的公司选择使用 React Native 替代 iOS/Android 进行部分业务线的开发,也有不少使用 Hybrid 技术的公司转向了 Re ...
- quarkus 入门教程(二) -项目开发模式热更新及项目断点调试方法
quarkus 入门教程(二) -项目断点调试方法 1.项目热更新 quarkus:dev runs 方式启动,项目会以开发者模式启动,当修改了java文件或者resource文件后,项目会在后台编译 ...
- IDEA SpringBoot项目配置热更新,无需每次手动重启服务器
IDEA SpringBoot项目配置热更新的步骤 在pom.xml中添加依赖: <dependency><groupId>org.springframework.boot&l ...
- cordova打包app热更新问题
定义: 基于 cordova 框架能将web应用 (js, html, css, 图片等) 打包成 App.当 App 在终端上安装后,不需要重新下载app,实现内壳更新. 原理:1.在项目根目录的c ...
最新文章
- 血亏 1.5 亿、华为断供、Linux 之父怒删代码,2020 IT 大事记盘点
- oracle在日期区间分页查询,Oracle 日期分页
- mysql字节对齐_结构体字节对齐-位域及其对齐
- 一、从零创建VUE项目
- 紫书 例题8-10 UVa 714 (二分答案)
- yum配合rpm查看软件包安装位置
- 洛谷——P1319 压缩技术
- Mongoose的增删改查
- 时间格式转变 android,Android开发日期时间格式的转化
- 最爱的文本编辑器_VS Code——插件推荐整理
- 虚拟机安装教程(VM15.5+Ubuntu16.04)
- 矩阵求导及其链式法则
- 五款优秀重复文件查找工具
- 钉钉安装需要管理员权限报错解决办法
- 网站关键词密度多少会比较合适?
- 海思芯片中VPSS的group和channel的概念.
- 成都个人公司不注销有什么后果?
- Excle 取前几位数、中间几位数、后几位数的方法
- [附源码]java毕业设计校园超市进销存管理系统
- 七大视频剪辑软件,达人必备,你用过几个?
热门文章
- 利用对象字面量创建对象
- 注册事件的两种方式(传统注册事件、方法监听注册事件)
- 拳魂觉醒服务器维护怎么办,拳魂觉醒 哪些不为人知的的小秘密
- java doget 返回json_HttpClient调用doGet、doPost、JSON传参及获得返回值
- python的dataframe的groupby_python pandas.DataFrame.groupby()方法详解
- CSS解决无空格太长的字母,数字不会自动换行的问题
- tempdb相关文章
- ajax传回的数据做表格,Datatables ajax返回的数据顺序与表格中的数据顺序不一致...
- mysql 恢复同步_常见MySQL同步错误恢复方法
- 【菜鸡学算法】用最笨最直观的方法讨论递归取中值时是不是陷入死循环