本例主要實現App的熱更新技術,不需要打安卓包或者蘋果包,直接實現app內容的更新,前提是沒有安裝插件或者修改原生底層的部分,只更新web content的內容。主要借助cordova框架實現
1.安裝插件
執行下面2個腳本
1 // cordova熱更新插件 2 cordova plugin add cordova-hot-code-push-plugin 3 4 // 熱更新工具 5 npm install -g cordova-hot-code-push-cli
2.生成配置文件 cordova-chcp.json
// 終端執行下面命令,項目根目錄生成cordova-chcp.json cordova-hcp init
// 執行此命令,在終端會有引導步驟,有些可直接enter跳過,后面可以在生產的文件在做修改
說明:配置文件簡介
{ "name": "cpcg", "autogenerated": true, "ios_identifier": "", "android_identifier": "", "update": "resume", "content_url": "http://192.168.5.17:1010/www/", "min_native_interface": 1 } name: 項目名稱,可以隨便 autogenerated:這個字段原先沒有,需要復制過去,不然不會自動更新app update:app更新方式,有3種: "update": "start" // 在啟動應用程序時安裝更新 "update": "resume" // 在恢復應用程序(從背景移動到前景狀態)或啟動時,安裝更新;默認使用 "update": "now" // 從服務器加載更新后立即安裝 content_url:"http:// ...../www/" //靜態文件服務器地址
min_native_interface: 1 //可用以做App升級(可以不填)
3.config.xml
<widget>
...
...
...
<chcp> <auto-download enabled="true" /> <auto-install enabled="true" /> <config-file url="http://........./www/chcp.json" /> <native-interface version="1" /> </chcp> /** config-file:配置文件 chcp.json 從服務器上加載的路徑(必須的配置項) auto-download:是否自動下載熱更新代碼,默認是 true auto-install:是否自動安裝熱更新代碼,默認是 true native-interface:當前 native side 的版本號
**/
</widget>
4.在www文件夾中生成chcp.json和chcp.manifest
// 執行下面命令 cordova-hcp build
// 執行該命令會在chcp.json文件中增加"release":"當前時間"
字段,用於和服務器文件比較,是否進行熱更新
總結:上面基本配置全部完成后,具體的熱更新操作流程是,首先,編譯修改后的代碼(cordova build 或者 框架其他的命令),會生成一個www的文件夾,然后執行cordova-hcp build,此命令會修改chcp.json的時間,然后將www文件夾替換到服務器上面,app會根據設定的熱更新方式進行自動更新。
問題與其他:
1. 執行 cordoca-hcp init時,可能會報一個js證書驗證的錯誤,在c盤的一個文件里面,只需要找到這個js文件並刪除即可
2. https://github.com/nordnet/cordova-hot-code-push/wiki/JavaScript-module, 可以用js邏輯自己控制app熱更新