React Native 熱更新實現(Code push - Android)


1, 安裝code-push (windows)

npm install -g code-push-cli

安裝后執行

code-push

安裝完成

2,創建code push 賬號

code-push register

然后會彈出一個注冊頁面,建議設置默認瀏覽器為chrome,可以選擇github或微軟賬號登入,登入成功后會顯示你的access-key,我們直接copy一下

輸入復制的access-key

 

3,code push 注冊app

以haowanyou-yc-proxy為例

 code-push app add haowanyou-yc-proxy android react-native

我們把Production和Staging的key復制下來

 

4,集成Android開發環境

進入項目根目錄,執行

npm install --save react-native-code-push

安裝完成后,執行命令集成Android環境

react-native link react-native-code-push

一路回車,因為沒有ios工程所以跳過了。

用Android studio打開Andorid 工程,發現../app/build.gradle多幾行代碼:

(如果沒有的話,請手動添加,本人就沒有下面apply的那行)

setting.gradle也多了幾行

MainApplication.java也多了行代碼,需要替換下deploymentkey

修改../app/build.gradle,添加deployment key

MainApplication.java 修改deployment key:

 

到此,android集成code push完成

5, 配置React Native環境

更新app當然要選擇app的入口處更新,所以我們修改app.js,添加如下方法

為了判斷熱更是否成功,我們在app.js添加一個Text表示版本

打個生產包,在項目根目錄執行:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

這樣在android工程的assets文件夾下會生成index.android.bundle文件

然后到我們android studio中把 buildtype改為release:

運行app

6,發布jsbundle到codepush

比如我們現在要升級了,我們模擬一下,把rn頁面的當前版本1.0.0的提示改為1.0.1:

然后我們在項目根目錄創建一個bundles文件夾,然后打一個jsbundle包到bundles文件夾中:

react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --dev false

發布到code push

code-push release haowanyou-yc-proxy ./bundles/index.android.bundle 1.0.0 --deploymentName Production --description "更改版本為1.0.1" --mandatory true
// code-push release/debug <應用名稱> <Bundles所在目錄> <對應的應用版本> [--deploymentName <更新環境>] [--description <更新描述>] [--mandatory <是否強制更新>]

可以通過命令查看發布的版本

code-push deployment ls haowanyou-yc-proxy

我們再運行下app,就會看到先顯示1.0.0,然后頁面閃一下變成了1.0.1

再看下日志:

到此,熱更新完成。

 

Tips:

如果熱更希望彈出dialog提示,發布時可以設置 --mandatory false,以下幾種方式可以使用:

installMode對應三種更新策略:

  • IMMEDIATE 立即更新APP
  • ON_NEXT_RESTART 到下一次啟動應用時
  • ON_NEXT_RESUME 當應用從后台返回時


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM