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项目热更新相关推荐

  1. vue项目热更新内存溢出问题

    vue项目启动后,每次修改部分代码,再编译和打包时会频繁内存溢出,都会导致项目运行中断.有的同事是时不时会中断,我是每次都会中断 报错信息如下: > node –max_old_space_si ...

  2. vue项目 热更新慢

    vue项目 --- 热更新慢 一.查找热更新慢是哪里慢---分析原因 二.解决办法 1.安装babel-plugin-dynamic-import-node插件 2..babelrc文件里添加配置dy ...

  3. React Native 实现热更新方案CodePush过程中遇到的问题 ( 搭建自己的CodePush服务器 )

    前言 CodePush官方: https://github.com/Microsoft/react-native-code-push 自搭建CodePushServer: https://github ...

  4. Vite创建的Vue3.0项目热更新失效,写的代码没效果

    一.项目技术栈:Vue3+TypeScript+Vite 二.问题描述: 项目之前好好的,突然代码热更新失效,即:每次写完 CSS 代码,怎么刷新都不行,需要重新 npm run dev,新增的代码才 ...

  5. React Native 热更新方案

    转载: https://blog.csdn.net/xiangzhihong8/article/details/73201421 随着 React Native 的不断发展完善,越来越多的公司选择使用 ...

  6. React Native热更新方案

    随着 React Native 的不断发展完善,越来越多的公司选择使用 React Native 替代 iOS/Android 进行部分业务线的开发,也有不少使用 Hybrid 技术的公司转向了 Re ...

  7. quarkus 入门教程(二) -项目开发模式热更新及项目断点调试方法

    quarkus 入门教程(二) -项目断点调试方法 1.项目热更新 quarkus:dev runs 方式启动,项目会以开发者模式启动,当修改了java文件或者resource文件后,项目会在后台编译 ...

  8. IDEA SpringBoot项目配置热更新,无需每次手动重启服务器

    IDEA SpringBoot项目配置热更新的步骤 在pom.xml中添加依赖: <dependency><groupId>org.springframework.boot&l ...

  9. cordova打包app热更新问题

    定义: 基于 cordova 框架能将web应用 (js, html, css, 图片等) 打包成 App.当 App 在终端上安装后,不需要重新下载app,实现内壳更新. 原理:1.在项目根目录的c ...

最新文章

  1. 血亏 1.5 亿、华为断供、Linux 之父怒删代码,2020 IT 大事记盘点
  2. oracle在日期区间分页查询,Oracle 日期分页
  3. mysql字节对齐_结构体字节对齐-位域及其对齐
  4. 一、从零创建VUE项目
  5. 紫书 例题8-10 UVa 714 (二分答案)
  6. yum配合rpm查看软件包安装位置
  7. 洛谷——P1319 压缩技术
  8. Mongoose的增删改查
  9. 时间格式转变 android,Android开发日期时间格式的转化
  10. 最爱的文本编辑器_VS Code——插件推荐整理
  11. 虚拟机安装教程(VM15.5+Ubuntu16.04)
  12. 矩阵求导及其链式法则
  13. 五款优秀重复文件查找工具
  14. 钉钉安装需要管理员权限报错解决办法
  15. 网站关键词密度多少会比较合适?
  16. 海思芯片中VPSS的group和channel的概念.
  17. 成都个人公司不注销有什么后果?
  18. Excle 取前几位数、中间几位数、后几位数的方法
  19. [附源码]java毕业设计校园超市进销存管理系统
  20. 七大视频剪辑软件,达人必备,你用过几个?

热门文章

  1. 利用对象字面量创建对象
  2. 注册事件的两种方式(传统注册事件、方法监听注册事件)
  3. 拳魂觉醒服务器维护怎么办,拳魂觉醒 哪些不为人知的的小秘密
  4. java doget 返回json_HttpClient调用doGet、doPost、JSON传参及获得返回值
  5. python的dataframe的groupby_python pandas.DataFrame.groupby()方法详解
  6. CSS解决无空格太长的字母,数字不会自动换行的问题
  7. tempdb相关文章
  8. ajax传回的数据做表格,Datatables ajax返回的数据顺序与表格中的数据顺序不一致...
  9. mysql 恢复同步_常见MySQL同步错误恢复方法
  10. 【菜鸡学算法】用最笨最直观的方法讨论递归取中值时是不是陷入死循环