Android React Native 热更新集成 Code Push
Code Push GitHub 地址: https://github.com/Microsoft/react-native-code-push
基本安装
安装 code push cli
1
npm install -g code-push-cli
注册,成功后得到 key 后输入
1
code-push register
在 Code Push 服务器注册 app
1
code-push app add your_app_name
查找密钥,有 deployment key 和 staging key 两种
1
code-push deployment ls your_app_name -k
在项目根目录执行以下命令安装react-native-code-push模块
1
npm install –save react-native-code-push
在 Anroid project 中安装插件,CodePush提供了两种方式:RNPM 和 Manual,这里所使用的是RNPM
1
npm i -g rnpm
添加codepush配置,要求输入 deployment key ,可以 ignore
1
react-native link react-native-code-push
或者手动配置,引入项目, 在setting.gradle文件中设置:
1
2include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')在app/build.gradle文件中设置
1
2
3
4dependencies {
...
compile project(':react-native-code-push')
}在app/build.gradle文件添加项目依赖:
1
2apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"在 MainApplication 中添加如下代码:
1
2
3
4
5
6
7
8
9
10import com.microsoft.codepush.react.CodePush;
...
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
1 |
|
JS代码
1 | import CodePush from 'react-native-code-push'; |
修改versionName
在 android/app/build.gradle 中有个 android.defaultConfig.versionName 属性,我们需要把 应用版本改成 1.0.0(默认是1.0,但是codepush需要三位数)。
1 | android{ |
打包 JS Bundle
在工程目录里面新增 bundles 文件:
1
mkdir bundles
运行命令打包
1
react-native bundle --platform 平台 --entry-file 启动文件 --bundle-output 打包js输出文件 --assets-dest 资源输出目录 --dev 是否调试
例如:
1
react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --dev false
发布更新
打包bundle结束后,就可以通过CodePush发布更新了。在终端输入
1 | code-push release <应用名称> <Bundles所在目录> <对应的应用版本> --deploymentName <更新环境> --description <更新描述> --mandatory <是否强制更新> |
例如:
1 | code-push release AwesomeProject ./bundles/index.android.bundle 1.0.0 --deploymentName Staging --description "1.测试更新" --mandatory false |
注意:
Code Push 默认是更新 staging 环境的,如果是 staging ,则不需要填写 deploymentName 。
如果有 mandatory 则 Code Push 会根据 mandatory 是 true 或 false 来控制应用是否强制更新。默认情况下 mandatory 为 false 即不强制更新。
对应的应用版本(targetBinaryVersion)是指当前 app 的版本(对应build.gradle中设置的versionName “1.0.6”),也就是说此次更新的 js/images 对应的是 app 的那个版本。不要将其理解为这次 js 更新的版本。
如客户端版本是 1.0.6,那么我们对1.0.6的客户端更新js/images,targetBinaryVersion填的就是1.0.6。
对于对某个应用版本进行多次更新的情况,Code Push 会检查每次上传的 bundle ,如果在该版本下如 1.0.6 已经存在与这次上传完全一样的 bundle (对应一个版本有两个 bundle 的 md5 完全一样),那么 CodePush 会拒绝此次更新。
在终端输入
code-push deployment history your_app_name Staging
可以看到 staging 版本更新的时间、描述等等属性。
相关问题
进行编译时报错,具体的原因未知。
错误一:
1 | Execution:failed for task ':app:packageDebug' |
错误二:
1 | Execution:failed for task ':app:packageDebug' |
React Native 获取应用版本号
npm install react-native-device-info –save
react-native link react-native-device-info
import com.learnium.RNDeviceInfo.RNDeviceInfo;
获取应用版本号:DeviceInfo.getVersion()