React-Native Android集成Code-Push 热更新
2016-11-29 16:42
661 查看
React-Native Android集成Code-Push 热更新
开篇题外话,作为Android原生,对React-Native的态度不算太友好,做出来的应用有些性能是真的卡….卡….卡,所以有的人说只会JS就可以做移动端个人是不敢苟同,在性能爆炸的地方还是得原生来做,进行混合开发。 OK,我们看看React-Native的好处:1、缩短开发周期,一套JS代码完成逻辑
2、热更新部署,适合电商类活动
一般的APK,打包一次,遇到更新就要到Appstore或者各大应用商店更新。对于初创团队,自身没有时间自行研发热更新的情况大多采用第三方的热更新,微软的Code-Push很好的为我们提供了支持。
下面我们看看如何集成Code-Push.
Code-Push主要特点
支持JS代码与图片资源更新只能全量更新,暂时不支持增量更新
支持dev, Production, Staging三个环境
安装 CodePush CLI
在终端输入:npm install -g code-push-cli PS. npm为NodeJS的包管理器,如果没安装NodeJS请先安装。
若提示权限不够如下图:
加上sudo即可:
sudo npm install -g code-push-cli
安装完毕以后提示输入:
code-push -v确认是否安装成功
创建Code-Push账号
在终端输入:code-push register,会打开注册页面让你选择授权账号。
完成相应注册后将会获得一个key,复制到终端即可登录(code-push login)。
PS. code-push logout后再code-push login 也会跳转到网页获得一个key,复制后到终端即可登录成功。 账号相关命令: code-push login 登陆 code-push logout 注销 code-push access-key ls 列出登陆的token code-push access-key rm <accessKye> 删除某个 access-key
CodePush服务器注册app
在终端输入:code-push app add appName PS.相关命令 code-push app add 在账号里面添加一个新的app code-push app remove 或者 rm 在账号里移除一个app code-push app rename 重命名一个存在app code-push app list 或则 ls 列出账号下面的所有app code-push app transfer 把app的所有权转移到另外一个账号
集成CodePush SDK
Android:参考地址
Andorid有 RNPM和Manual两种更继承方式。这里采用
Manual方式。
1、在 主项目/android/settings.gradle文件下添加如下内容:
include ':react-native-code-push' project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')
2、在主项目/android/app/build.gradle
文件下添加如下依赖:
... dependencies { ... compile project(':react-native-code-push') }
3、在主项目/android/app/build.gradle文件下添加如下依赖:
apply from: "../../node_modules/react-native/react.gradle" apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
4、终端运行
code-push deployment ls appName获取密钥。
创建部署
在终端输入:code-push deployment add appName deploymentName 查看列出所有部署:code-push deployment ls appName PS. code-push deployment rename appName 重命名 code-push deployment rm appName 删除部署 code-push deployment ls appName 列出应用的部署情况 code-push deployment ls appName -k 查看部署的key code-push deployment history appName deploymentNmae
5、将获取的密钥配置在MainApplication下。
public class MainApplication extends BaseApplication implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override protected boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Nullable @Override protected String getJSBundleFile() { // return super.getJSBundleFile(); return CodePush.getJSBundleFile(); } @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new WSPackage(),//内部moudle new CodePush("Your-deployment-key", MainApplication.this, BuildConfig.DEBUG) ); } }; @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } }
至此,我们Code-Push集成完毕?那么你就大错特错了,Code-push的版本号需要1.0.0的格式所以我们还需要修改版本号的格式。
defaultConfig { // versionName "1.0.0" versionName rootProject.ext.android.versionName }
这里我自定义了文件使用了路径 ,可参考 android使用Gradle统一配置依赖版本
配置。
Andorid Code-Push的SDK集成到此告一段落。
接下来在JS端进行配置。
JS端集成Code-Push
加载 CodePush模块:import codePush from 'react-native-code-push'
隐式更新:
codePush.sync();
显示更新:
//显式更新 codePush.sync( { updateDialog: updateDialogOptions, mandatoryInstallMode:codePush.InstallMode.IMMEDIATE, deploymentKey: 'Your-deployment-key' }, (status)=>{ if (status == codePush.SyncStatus.INSTALLING_UPDATE) { } } );
把打包JS生成index.android.bundle
第一步: 在 工程目录里面新增 bundles文件:mkdir bundles 第二步: 在终端输入:react-native bundle --platform 平台 --entry-file 启动文件 --bundle-output 打包js输出文件 --assets-dest 资源输出目录 --dev 是否调试。 eg: Android:react-native bundle --platform android --entry-file index.android.js --bundle-output ./bundles/index.android.bundle --assets-dest ./bundles --dev false PS. [注意文件目录,保证文件目录正确,该命令需在工程目录下面运行,否则不能打包。]
发布更新
终端输入 code-push release 应用名称 Bundles所在目录 对应的应用版本 --deploymentName: 更新环境 --description: 更新描述 --mandatory: 是否强制更新 eg: code-push release 玩彩 ./bundles/ 1.0.0 --deploymentName Production --description "新功能足球更新" --mandatory true PS.版本号必须和应用的版本号保持一致。如1.0.0则只有1.0.0的版本会收到更新提示。
若发布成功:
至此,我们的Code-Push集成完毕,可以愉快的进行热更新部署了。
附上一些常用的更新命令:
回滚版本
在终端输入:code-push rollback appName deploymentName --targetRelease, -r 指定回归到哪个标签,默认是回滚到上一个更新 string eg: code-push rollback appName Production code-push rollback appName Production --targetRelease v4
促进更新
在终端输入:code-push promote appName sourceDeploymentName destDeploymentName –description, –des 描述 string –disabled, -x 该促进更新,客户端是否可以获得更新 boolean –mandatory, -m 是否强制更新 boolean –rollout, -r 此促进更新推送用户的百分比 string eg: code-push promote appName Staging Production "appName" 中"Staging" 部署的最新更新发布到"Production" 部署中 code-push promote appName Staging Production –des "Production rollout" -r 25 "appName" 中"Staging" 部署的最新更新发布到"Production" 部署中, 并且只推送25%的用户
修改更新
在终端输入:code-push patch appName deploymentName --label, -l 指定标签版本更新,默认最新版本 string --description, --des 描述 string --disabled, -x 该修改更新,客户端是否可以获得更新 boolean --mandatory, -m 是否强制更新 boolean --rollout, -r 此更新推送用户的百分比,此值仅可以从先前的值增加。 string eg: code-push patch appName Production --des "Updated description" -r 50 修改"MyApp"的"Production"部署中最新更新的描述 ,并且更新推送范围为50% code-push patch appName Production -l v3 --des "Updated description for v3" 修改"MyApp"的"Production"部署中标签为v3的更新的描述
查看历史版本情况:
code-push deployment history appName deploymentName eg: code-push deployment history appName Production
查看当前版本情况:
code-push deployment history appName deploymentName eg: code-push deployment ls appName
查看部署对应的key:
code-push deployment ls appName -k 查看部署的key,这个key将会在app中存储使用 eg: code-push deployment ls appName -k
相关文章推荐
- 利用CodePush对react-native项目热更新(以android为例)
- React Native如何使用 code-push 热更新
- react-native热更新插件react-native-code-push
- react应用更新引入react-native-code-push
- 使用 Code-Push 热更新 ReactNative 常用命令整理
- react-native-code-push热更新与app版本的关系
- [深入剖析React Native]热更新之react-native-pushy使用指南(Android)
- 已有Android工程集成ReactNative页面
- React-Native 与 Android 集成 <三、原理与总结>
- React-native 集成 android简单使用
- React Native & Android集成
- 在Windows上将ReactNative集成到现有的Android项目
- 在Windows上将ReactNative集成到现有的Android项目
- react-native-code-push与cocoapods pod 'SSZipArchive'冲突
- React Native应用部署/热更新-CodePush最新集成总结(新)
- React native热更新思路(一)之ReactNativeHost类解析【适用于Android开发者】
- React-Native 与 Android 集成 <一、环境搭建>
- IOS、Android进阶之ReactNative热更新
- React Native 集成到 Android 原生项目中踩坑记录 (Didn't find class "com.facebook.jni.IteratorHelper")
- React Native 已有android工程集成