参考
http://blog.youkuaiyun.com/lovelyelfpop/article/details/50848524
安装
热更新插件
地址:https://github.com/nordnet/cordova-hot-code-push.git
注意:工程插件目录plugins下的三个json文件为可读写属性,否则安装将失败
Cordova Hot Code Push 命令行客户端
地址:https://github.com/nordnet/cordova-hot-code-push-cli
全局安装命令npm install -g cordova-hot-code-push-cli 已安装请忽略
项目中新建hotUpdate目录,用来生成服务器更新文件。
切换到hotUpdate目录,初始化命令:cordova-hcp init
Enter project name:项目名称
1-4全部回车
Ios app identifier:打开app stroe下载地址
Android app identifier :下载apk的地址
Update method:热更新方式(start、now、resume)
start - app启动时安装更新. 默认值
resume - app从后台切换过来的时候安装更新
now - web内容下载完毕即安装更新
执行完后将产生cordova-hcp.json,打开文件修改
"ios_identifier": "https://itunes.apple.com/cn/app/id123456789",
"android_identifier": "http://10.7.0.88:8001/AppVersion/android.apk",
配置
config.xml
loadUrlTimeoutValue:热更新连接超时毫秒,不填默认30秒
<chcp>
<config-file url="http://10.7.0.88:8001/HotUpdate/chcp.json"/>
<auto-download enabled="true" />
<auto-install enabled="true" />
<native-interface version="18" />
</chcp>
config-file
定义了一个 URL,指定了需要从哪里加载app配置(application config,就是chcp.json)。url 属性中声明. 此项必须
auto-download
自动下载web内容更新,默认true是自动, 如果你想手动下载web内容更新,你可以使用 JavaScript 模块.
auto-install
自动安装. web内容更新. 默认true是自动, 如果你想手动安装web内容更新,你可以使用 JavaScript 模块
native-interface
所需最小的外壳app版本. 这是app的build版本号,是个整型数字, 不是应用商店中看到的形如"1.0.0"字符串,在 config.xml中,这样指定build版本号:
1.version - app字符串版本号, 也就是用户在商店中看到的版本
2.android-versionCode - 安卓的build版本号. 这个应该用于 min_native_interface
3.ios-CFBundleVersion - iOS的build版本号.这个应该用于 min_native_interface
重要: 因为cordova的一个奇葩现象, 生成的 .apk 的build版本号会被当成字符串补0, 导致了变成了形如 10, 12, 14,18 or 19 根据不同平台 (arm/x86/etc),后面的0、2、4、8、9不同. 为了绕过这个也给 iOS build版本号手动加成一样, 这样 min_native_interface (比如 18) 就可以对安卓和iOS都有效, 大致是这样:
<widget id="io.cordova.hellocordova"
version="1.0.1"
android-versionCode="1"
ios-CFBundleVersion="18">
部署
部署服务器,网站目录直接指向www目录。
如果项目没有混淆,直接拷贝project/www到服务器即可,但项目有混淆情况,按以下步骤:
生成chcp.manifest,因为混淆后的文件md5不一样
1.vs生成项目,此步只是为了生成混淆文件而已,因为热更新需要的chcp.json与chcp.manifest文件还没有生成,所以此时的项目还不具备热更新功能
2.platforms\android\assets\www目录下的css、js、img、page、lib目录及index.html至(hotUpdate/www)。如下图:
3.运行编译命令:cordova-hcp build 将利用cordova-hcp.json模板在(buildHot\www)录生成chcp.json与chcp.manifest文件
注意:运行命令前先保证有platforms文件夹,否则会出现如下提示:
4.拷贝chcp.json与chcp.manifest回项目www目录中
5.vs再生成一次项目,此步的生成的apk是具备热更新功能的
6.(hotUpdate)目录下www所有文件拷贝至热更新服务器
服务器增加json的MIME类型
如果下次只热更新js,html之内的,重复部署步骤1、2、3、6
如果APP需要引导用户跳转到商店下载,那么只需要chcp.json文件设置"min_native_interface"的值与新发布apk versionCode 必须保持一致
本地开发
热更新插件的原因,导致开发时,改了代码运行起来看不到效果,三种解决方式
1、删除APP,config.xml <auto-download enabled="false" /> 改false 不自动下载服务器文件,然后再编译运行
2、不删除APP,config.xml <auto-download enabled="false" /> 改false 不自动下载服务器文件, android-versionCode +1 然后再编译运行
3、安装插件https://github.com/nordnet/cordova-hot-code-push-local-dev-addon
参考文章:http://blog.youkuaiyun.com/lovelyelfpop/article/details/50848524#local-development-add-on
欢迎关注公众号,每天为您推送“人生感悟、说话技巧、职场规则、职场成长”