前言

  不知各位遇没遇到过,刚刚发布的应用,突然发现了一个隐藏极深的“碧油鸡(BUG)”,肿么办!肿么办!肿么办!如果被老板发现,一定会让程序员哥哥去“吃鸡”。但是想要修复这个“碧油鸡”,就必须要重新打包、重新测试、重新部署等等。重点是在这个重新打包、测试、部署的时候,可能已经有用户发现了这个“碧油鸡”,接下来就是承受用户的投诉、举报 + 漫骂。如果这仅仅只是一个无关痛痒的“碧油鸡”,那还到无可厚非。怕就怕这是一个非常严重的错误,比如会泄露用户隐私等。这时候就不单单是被请“吃鸡”了,还有可能被请“吃鱼”。(ps:反正受伤的总是程序员~~~)

  那么如果我们的应用能够实现“热更新”的话,那就能很轻松+easy的修复“碧油鸡”了。

  热更新

  有同学就问了:什么是“热更新”?

  其实“热更新”说简单点就是不关软件直接更新,更新期间软件的使用不受影响,现在大部分软件是冷更新,要退出才能更新。在举个简单的例子就是:手机SD卡,可以直接在开机状态下插入或拔出,无须关机后再插拔。

  又有同学问了:怎么才能实现“热更新”?

  这就是接下来要说的内容。

  实践

  上一篇介绍了>>如何使用Cordova创建Android项目<< ,这一篇文章主要记录:如何使用Cordova实现App的热更新

  该篇文章需要用到静态文件服务器,博主使用的nginx搭建的,具体搭建方式可参考:使用nginx搭建文件服务器。

  添加chcp客户端

  # 用于编译项目文件,生成对应的hash码

  npm install -g cordova-hot-code-push-cli

  复制代码

  添加chcp自动更新的插件

  D:\zhyd-project\app\cordova-study\platforms\android>cordova plugin add cordova-hot-code-push-plugin

  Installing "cordova-hot-code-push-plugin" for android

  Installing dependency packages:

  {

  "xml2js": "^0.4"

  }

  Checking cordova-hcp CLI client...

  ---------CHCP-------------

  To make the development process easier for you - we developed a CLI client for our plugin.

  To install it, please, use command:

  npm install -g cordova-hot-code-push-cli

  For more information please visit https://github.com/nordnet/cordova-hot-code-push-cli

  --------------------------

  Android Studio project detected

  Subproject Path: CordovaLib

  Subproject Path: app

  Adding cordova-hot-code-push-plugin to package.json

  Saved plugin info for "cordova-hot-code-push-plugin" to config.xml

  复制代码

  插件安装完成后,会自动配置到app>src>main>res>xml>config.xml文件中。当前项目的config.xml如下

  

  cordova-study

  

  A sample Apache Cordova application that responds to the deviceready event.

  

  

  Apache Cordova Team

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  复制代码

  config.xml配置文件各节点介绍:

  widget:根节点。四个必填配置属性:id(创建项目时默认指定包名)、version(版本号-主.次.补丁)、xmlns、xmlns:cdv

  name:项目名

  descriptin:项目介绍

  author:项目作者(项目如果发布到应用商店后,可能会使用该联系信息)

  content*:项目启动首页(重要,如果项目的首页不是index.html,则必须要要在config.xml文件中修改成对应的文件)

  access:跨域访问设置,“*”表示允许所有

  allow-intent:白名单。控制哪些url可以让应用程序打开。默认情况下,不允许使用外部url。

  preference:项目偏好设置。sdk、日志等等

  feature:cordova插件,安装插件时自动配置

  修改config.xml

  在config.xml中添加如下配置

  

  

  

  

  

  复制代码

  注:该配置和feature节点是同级的,即:都是widget的子级节点。修改后的config文件如下:

  

  ...省略

  

  

  

  

  

  

  

  ...省略

  

  

  复制代码

  注:【1】为静态服务器的地址(下同),需要提前配置好,如果使用nginx的话可以参考>使用nginx搭建文件服务器

  该链接指向的json文件为热更新的配置文件,具体生成方式见下一步

  此时,项目的文件目录结构如图

  通过Terminal或者cmd,cd到app>src>main>assets目录下,执行cordova-hcp build

  该命令执行完毕后,会在assets>www目录下生成两个文件:chcp.json(热更新配置文件)和chcp.manifest(www目录下的所有文件的hash码清单)

  chcp.json文件内容

  {

  "autogenerated": true,

  "release": "2018.04.16-11.32.11"

  }

  复制代码

  注:如果使用cordova-hcp build命令初始化项目,则生成的chcp.json中缺少content_url(用于指向服务器端app源码)和update(app更新方式)属性。当然,可以手动添加o(╯╰)o。

  # update可选值

  start : app启动时安装更新. 默认值.

  resume : app从后台切换过来的时候安装更新.

  now : web内容下载完毕即安装更新.

  复制代码

  本地测试可以使用cordova-hcp server命令创建一个服务端,该命令生成的chcp.json文件中会有content_url和update参数。因本文主要涉及服务端的热更新,所以本地测试的具体方式不做赘述。

  虽然对cordova-hcp server命令不做过多介绍,但为了更方便的生成chcp.json文件,我们可以在asstes目录下创建一个corova-hcp.json模板文件,内容如下

  {

  "autogenerated": true,

  "update": "start",

  "content_url": "http://【1】/hot-update-app/zyd-test"

  }

  复制代码

  再次执行cordova-hcp build命令

  可以看到chcp.json中的内容已被cordova-hcp.json文件替换掉了。

  服务端配置

  每次修改完代码文件后,先执行cordova-hcp build 然后将www目录中的所有文件copy到服务器上对应的目录中(本文对应/hot-update-app/zyd-test目录下)

  Javascript调用插件

  var zyd = window.zyd || {

  // ...

  }

  zyd.bindUpdate = {

  init : function () {

  $(".update").click(function(){

  //说明:这里的使用了Framework7

  chcp.fetchUpdate(function(error, data) {

  if(!error) {

  alert("有更新");

  chcp.installUpdate(function(error) {

  alert("更新完成");

  })

  } else {

  alert("当前是最新版本");

  }

  })

  });

  }

  }

  复制代码

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

    •   手动更新APP

        

  

  

  

  

  复制代码

  打包测试

  总结

  Cordova实现热更新,必须要注意的几点:

  ①安装插件

  ②修改config.xml

  ③添加cordova-hcp.json模板

  ④cordova-hcp build

  文中的热更新为手动触发,源代码中还有定时自动更新的js实现。另外还可以集合特定程序通过后台进行控制,当然这些扩展性的实现功能,只能各位看官自己去实现了。

  源码地址

  1.我的github

  2.我的码云

  欢迎关注,欢迎Star。当然,如果你直接下载了源码并不star,我也没办法(手动滑稽o(╯╰)o)。

[Android教程] Cordova开发App入门(二)使用热更新插件的更多相关文章

  1. [Android教程] Cordova开发App入门(一)创建android项目

    前言 Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的A ...

  2. Cordova开发App入门之创建android项目

    Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑 ...

  3. Cordova开发App使用USB进行真机调试

    在使用cordova开发app时,不像浏览器中可以直接使用浏览器的开发者工具进行调试.为了看到app的显示效果, 一种是使用模拟器进行展示,一种是使用真机进行展示. 模拟器:可以使用Android s ...

  4. 【Android】快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表[申明:来源于网络]

    [Android]快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表[申明:来源于网络] 地址:http://blog.csdn.net/zxt0601/article/de ...

  5. Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接

      Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 )购买链接: 推荐给你高品质的实战课程 https://laravel-china.org/courses?rf=158 ...

  6. Vue+cordova开发App

    Vue+cordova开发App https://www.imooc.com/article/70062

  7. Cordova - XCode10编译热更新插件错误解决方法!

    操作系统:OSX10.14 XCode:10.1 热更新插件:https://github.com/nordnet/cordova-hot-code-push 这个热更新插件,在安卓下编译,没有问题, ...

  8. Cordova 开发 App

    Cordova 是一个开源的移动开发框架.允许你用标准的 Web 技术——HTML5,CSS3 和 JavaScript 做跨平台开发.应用在每个平台的具体执行被封装了起来,并依靠符合标准的 API ...

  9. Android教程2020 - RecyclerView使用入门

    本文介绍RecyclerView的使用入门.这里给出一种比较常见的使用方式. Android教程2020 - 系列总览 本文链接 想必读者朋友对列表的表现形式已经不再陌生.手机上有联系人列表,文件列表 ...

随机推荐

  1. 用python实现websocket请求遇到的问题及解决方法。

    想要实现python的ws库功能,实时获取对方服务器ws协议返回的数据,查了下百度,用如下流程: ws = create_connection("wss://ws.xxxxxxx.info/ ...

  2. presto 0.166概述

    presto是什么 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 是一种Massively parallel processing (MPP)架构,多个节点管道式执⾏ ...

  3. quartz-job实现定时任务配置

    使用quartz开源调度框架,写服务实现在一些指定场景发送特定短信,创建一个实现org.quartz.Job接口的java类.Job接口包含唯一的方法: public void execute(Job ...

  4. python的os模块和sys模块

    os模块 os.getcwd()  获取当前的工作目录 os.chdir('绝对路径/相对于当前工作目录的路径')  改变工作目录,相当于shell的cd命令,例如Windows平台下os.chdir ...

  5. Python3 itchat微信获取好友、公众号、群聊的基础信息

    Python3 itchat微信获取好友.公众号.群聊的基础信息 一.简介 安装 itchat pip install itchat 使用个人微信的过程当中主要有三种账号需要获取,分别为: 好友 公众 ...

  6. c/c++的typedef/using类型别名

    久而久之,发现c/c++的typedef给类型自定义别名的语法糖就保证设计的一致性而言,确实是个相当不错的特性,跟oracle pl/sql的rowtype或type一样,可惜java.mysql均不 ...

  7. Linux 进程学习笔记

    1.什么是程序?什么是进程?它们有什么区别? 定义: 程序:程序(Program)是一个静态的命令集合,程序一般放在磁盘中,然后通过用户的执行来触发.触发后程序会加载到内存中成为一个个体,就是进程. ...

  8. 20145304 Exp6 信息搜集与漏洞扫描

    20145304 Exp6 信息搜集与漏洞扫描 实验后回答问题 (1)哪些组织负责DNS,IP的管理. NSI负责Internet顶级域名系统的注册.协调与维护,IAIA负责Internet的地址资源 ...

  9. 20145204《网络对抗》逆向及bof基础实践

    20145204<网络对抗>逆向及bof基础实践 实践目的说明 实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...

  10. 关于STM32 MDK中USE_STDPERIPH_DRIVER问题的解释

    初学STM32,在RealView MDK 环境中使用STM32固件库建立工程时,初学者可能会遇到编译不通过的问题.出现如下警告或错误提示: warning: #223-D: function &qu ...