Cordova热更新(一、流程与原理篇)

2023-05-16

最近需要上线app,所以需要对cordova热更新的整个流程整理下,防止出现问题,

项目的结构大致如下:

一个是vue开发的工程叫Vue-mobile,一个是cordova打包app的工程叫Cordova-app

Vue-mobile工程:


Cordova-app工程:


cordova-app工程中的www文件夹里面的html等文件是软链接的Vue-mobile工程中的dist文件夹的

链接方法:比如这两个工程都在桌面上

cd /Users/mac005/Desktop/Cordova-app
ln -s ../Vue-mobile/dist ./www

好了工程准备好了,接下来正式来搞热更新了。

热更新准备工作如下:

1,Vue-mobile工程中生成cordova-hcp.json文件,内容如下:

{
  "name": "iplay",
  "update": "now",
  "min_native_interface": 2,
  "content_url": "http://app.xiaoyu.cn"
}

name:就是一个标示,没什么作用

update:是更新的策略now就是立即更新,或者resume,就是app杀死重新打开后更新等等

min_native_interface:是app的版本必须是2及以上才会热更新

content_url:需要热更新的html页面真正放置的地方这里是放在了http://app.xiaoyu.cn服务器上了

2,Vue-mobile工程需要打包出html等文件到dist以供打包,正常就

npm run build

就可以了,但这里需要支持热更新,需要多执行一条命令

cordova-hcp build dist
上面这条命令的主要作用是把Vue-mobile工程中cordova-hcp.json文件中的信息copy到dist文件夹中的chcp.json文件了,并且在chcp.json文件中添加了release版本时间,如下:
{
  "name": "iplay",
  "update": "now",
  "min_native_interface": 2,
  "content_url": "http://app.xiaoyu.cn",
  "release": "2018.05.07-17.48.31"
}
 同时生成chcp.manifest这个文件(chcp.manifest文件主要是摘要文件,记录变更了哪些内容的,app本地放一个,后台放一个)
如果觉得麻烦,每次都要执行两条命令的话,可以在webpack中配置下,每次npm run build,就自动做上面的操作也行,我们项目中也是这么做的。如果不清楚 cordova-hcp.json这个文件怎么来的参考

3,将刚刚生成的dist文件整个内容放在http://app.xiaoyu.cn根目录下,能够http://app.xiaoyu.cn/访问到里面的内容

4,Cordova-app工程中需要在config.xml中配置
  <chcp>
        <auto-download enabled="true" />
        <auto-install enabled="true" />
        <native-interface version="2" />
        <config-file url="http://app.xiaoyu.cn/chcp.json" />
    </chcp>
native-intetrface指的是当前app的版本号,热更新有要求app外壳的版本号的,如果不符合要求的版本号是不会热更新的

config-file中的url:对应的就是上面生成的chcp.json,只不过这个chcp.json现在是放在http://app.xiaoyu.cn服务器上的(这样做简便,正常可以将chcp.json放在另一台服务器的专门对应于app的config-file中的url,然后chcp.json中的content_url真正地指向页面)


接下来走下热更新流程:

1,用户打开app,Update loader从config.xml中取config-file配置(一个url),并从此url载入一段json配置,然后把这段json配置中的release版本和当前app已经安装的进行比较,假设不同,进入下一步

2,Update loader使用刚刚下载下来的json配置中的content_url,去载入清单文件manifest(原理:将本地app中的mainfest文件中的hash值一一与下载下来的manifest中的hash值做比较,如果不同就说明文件改变了),它会找出自上次升级以来哪些文件需要更新。

3,Update loader从content_url(下载下来的json配置中的content-url)下载更新文件(只会去下载并更新manifest中变化的的文件部分)








本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cordova热更新(一、流程与原理篇) 的相关文章

  • 嵌入式linux物联网毕业设计项目智能语音识别基于stm32mp157开发板

    stm32mp157开发板FS MP1A是华清远见自主研发的一款高品质 高性价比的Linux 43 单片机二合一的嵌入式教学级开发板 开发板搭载ST的STM32MP157高性能微处理器 xff0c 集成2个Cortex A7核和1个Cort
  • CMake(一)

    CMake xff08 一 xff09 简述 在之前的文章中介绍了 qmake的使用 相比qmake xff0c CMake稍微复杂一点 xff0c 它使用CMakeList txt文件来定制整个编译流程 同时 xff0c CMake会根据
  • LTE网元功能

    LTE 网元功能 2015 03 30 22 33 31 分类 xff1a NetworkProtocols 举报 字号 订阅 下载LOFTER 我的照片书 主要网元功能 eNodeB Radio Resou
  • [C++] 32位C++程序,计算sizeof的值

    sizeof str 61 6 字符串数组 xff0c 大小是六个字节 加上 39 0 39 共六个 sizeof p 61 4 指针的内容就是一个指向目标地址的整数 xff0c 所以不管指向char int还是其他 xff0c 32位机指
  • 串口打印printf

    串口打印printf 1 配置串口2 添加代码3 使用MDK勾选Mircro LIB 1 配置串口 打开STM32CubeMX xff0c 创建工程 xff0c 配置串口 2 添加代码 重写fputc函数 xff0c 需要包含头文件 inc
  • 22.Ubuntu出现“由于没有公钥,无法验证下列签名”

    由于没有公钥 xff0c 无法验证下列签名 1 无公钥错误2 输入命令导入公钥3 注意 1 无公钥错误 使用sudo apt update时出现以下错误 xff1a 我图中的公钥就是 xff1a 3B4FE6ACC0B21F32 xff08
  • nyist 27 水池数目(dfs搜索)

    xfeff xfeff 水池数目 时间限制 xff1a 3000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 南阳理工学院校园里有一些小河和一些湖泊 xff0c 现在 xff0c 我们把它们通一看成水池 xff
  • XTUOJ 1176 I Love Military Chess(模拟)

    xfeff xfeff I Love Military Chess Accepted 45 Submit 141Time Limit 1000 MS Memory Limit 65536 KB 题目描述 陆军棋 xff0c 又称陆战棋 xf
  • 数据结构课程设计之一元多项式的计算

    数据结构不是听会的 xff0c 也不是看会的 xff0c 是练会的 xff0c 对于写这么长的代码还是心有余也力不足啊 xff0c 对于指针的一些操作 xff0c 也还是不熟练 xff0c 总出现一些异常错误 xff0c 对于数据结构掌握还
  • Unity官方文档(英文)

    地址 xff1a https docs unity3d com Manual UnityManual html
  • 数据结构课程设计之通讯录管理系统

    数据结构的第二个课程设计 xff0c 在c语言课程设计的基础上加以改进 xff0c xff08 加强版 xff09 xff0c 保存一下代码 xff0c 对文件的处理 xff0c 还是有一点一问题 xff0c 还有待改进 include l
  • 在网页中添加音乐

    最近在折腾一个网页 xff0c 对于一个有强迫症的人来说 xff0c 就想在网页中插入音乐 xff0c xff08 当做背景音乐 xff09 xff0c 然后自己百度了好多资料 xff1b 就在这里总结一下 xff1a 第一步 xff1a
  • nyist oj 214 单调递增子序列(二) (动态规划经典)

    单调递增子序列 二 时间限制 xff1a 1000 ms 内存限制 xff1a 65535 KB 难度 xff1a 4 描述 给定一整型数列 a1 a2 an xff08 0 lt n lt 61 100000 xff09 xff0c 找出
  • 思科CCNA第一学期期末考试答案

    1 第 3 层头部包含的哪一项信息可帮助数据传输 xff1f 端口号 设备物理地址 目的主机逻辑地址 虚拟连接标识符 2 IP 依靠 OSI 哪一层的协议来确定数据包是否已丢失并请求重传 xff1f 应用层 表示层 会话层 传输层 3 请参
  • hexo博客出现command not found解决方案

    由于前一段时间忙于考试 xff0c 也有好久没有去更新博客了 xff0c 今天去添加友链的时候 xff0c 突然发现用不了了 xff0c 出现了conmand not found的提示 xff1a 按照字面上的翻译就是 找不到所使用的命令
  • 思科CCNA第二学期期末考试答案

    1 关于数据包通过路由器传输时的封装和解封的叙述 xff0c 下列哪三项是正确的 xff1f xff08 选择三项 xff09 路由器修改 TTL 字段 xff0c 将其值减 1 路由器将源 IP 更改为送出接口的 IP 路由器保持相同的源
  • Hexo版本升级和Next主题升级之坑

    缘起 差不多用了一年hexo的3 2 0版本 xff0c next主题版本也用的5 0的 xff0c 本来用的好好的 xff0c 但是最近访问其他人的博客 xff0c 发现访问速度比我的提升了不止一点点 xff0c 遂决定折腾一番 过程 H
  • Python中JSON的基本使用

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 Python3 中可以使用 json 模块来对 JSON 数据进行编解码 xff0c 它主要提供了四个方法 xff1a dumps dump loa
  • 卷积和快速傅里叶变换(FFT)的实现

    卷积运算 卷积可以说是图像处理中最基本的操作 线性滤波通过不同的卷积核 xff0c 可以产生很多不同的效果 假如有一个要处理的二维图像 xff0c 通过二维的滤波矩阵 xff08 卷积核 xff09 xff0c 对于图像的每一个像素点 xf
  • 每个程序员和设计师可做的10项运动

    本文转载自 码农网 程序员 和设计师大部分时间都坐在电脑前 有效的锻炼有助于他们更好地工作 传统的 xff1a 当坐在电脑桌前的时候 脚触地 双手在肘部弯曲 打字时手应搁在桌子上 键盘和鼠标应在触手可及的地方 显示屏应在视线水平上 xff0

随机推荐