• react-native-code-push集成以及打包更新


    code push cli全局安装:

    npm install -g code-push-cli 

    1.常用命令集

    code-push deployment history <appName> Staging
    

      可以看到Staging版本更新的时间、描述等等属性。 

     eg:

    code-push release Equipment ./bundles 1.0.1

    code-push的一些常用命令:

    code-push login //登录
    code-push loout //注销
    code-push access-key ls //列出登录的token
    code-push access-key rm <accesskey> //删除某个access-key
    code-push app add <appName> <os> <platform> // 即可完成注册
    

    关于code-push release-react更多的可选参数,可在终端输入以下查看:

    code-push release-react

    心得:

    如果你的应用分为android和ios版,那么再向CodePush注册应用的时候需要注册两个App获取两套deployment key,如:

    code-push app add myApp-Android android react-native
    code-push app add myApp-ios android react-native

    相关命令:

    code-push app add <appName> <os> <platform> //在账号里面添加一个新的app
    code-push app remove //或者 rm 在账号里移除一个app
    code-push app remame //重命名一个存在app
    code-push app list //或则ls列出账号下面的所有app

    集成CodePush SDK:

    #Android

    第一步: 项目根目录安装react-native-code-push 插件,终端进入你的根项目目录:

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

    第二部: 在Android project中安装插件。

    CodePush 提供两种方式: RNPM和Manual,以下是RNPM

    安装RNPM:(RN0.61及以上版本自动link,可以忽略二三步骤)

    npm i -g rnpm

    第三步:

    运行

    rnpm link react-native-code-push

    这条命令将会自动帮我们在android文件中添加好设置

    在终端运行此命令后,终端会提示你输入deploymentKey ,这时,你只需要将你的deployment staging key输入进去即可,如果不输入则直接单击enter跳过即可。

    第四步: 在android/app/build.gradle文件中添加如下代码“

    apply from: "../../node_modules/react-native/react.gradle"
    apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"

    然后在/android/setting.gradle中添加如下代码:

    include ':app', ':react-native-code-push'
    project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')

    第五步:

    code-push deployment ls [APP_NAME] -k

    上述命令获取部署密匙,默认的部署名是staging,所以部署密匙(deployment key)就是staging

    第六步:添加配置。

    当app启动时,我们需要让app想codepush咨询JS Bundle的所在位置,这样CodePush就可以控制版本,更新MainApplication.java文件。

    public class MainApplication extends Application implements ReactApplication {
      private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        protected boolean getUseDeveloperSupport() {
          return BuildConfig.DEBUG;
        }
        @Override
        protected String getJSBundleFile() {
          return CodePush.getJSBundleFile();
        }
        @Override
        protected List<ReactPackage> getPackages() {
          // 3. Instantiate an instance of the CodePush runtime and add it to the list of
          // existing packages, specifying the right deployment key. If you don't already
          // have it, you can run "code-push deployment ls <appName> -k" to retrieve your key.
          return Arrays.<ReactPackage>asList(
            new MainReactPackage(),
            new CodePush("deployment-key-here", MainApplication.this, BuildConfig.DEBUG)
          );
        }
      };
      @Override
      public ReactNativeHost getReactNativeHost() {
          return mReactNativeHost;
      }
    }

    打包:

    第一种打包更新:

    code-push release-react MyApp-iOS ios  --t 1.0.0 --dev false --d Production --des "1.优化操作流程" --m true

    第二种打包更新:

    打包bundles:

    第一步: 在工程目录里面新增bundles文件

    第二部: 运行打包命令: react-native bundle --platform 平台 --entry-file 启动文件  --bundle-output 打包js输出文件  --assets-dest 资源输出目录 --dev 是否调试

    android

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

    ios

    react-native bundle --platform ios --entry-file index.js  --bundle-output ./bundles/main.jsbundle  --assets-dest ./bundles --dev false

    需要注意的是:

    忽略了资源输出是因为 输出资源文件后,会把bundle文件覆盖了。

    输出的bundle文件名不叫其他,而是 index.android.bundle,是因为 在debug模式下,工程读取的bundle就是叫做 index.android.bundle。

    平台可以选择 android 或者 ios。

    发布更新:

    打包结束后,就可以通过CodePush发布更新,在终端输入:

    code-push release <应用名称> <Bundles所在目录> <对应的应用版本> --deploymentName: 更新环境 --description: 更新描述 --mandatory: 是否强制更新 

    code push

    code-push release GitHubPopular ./bundles/index.android.bundle 1.0.6 --deploymentName Production --description "1.支持文章缓存。" --mandatory true

    需要注意的是:

    CodePush默认是更新 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。

    对于对某个应用版本进行多次更新的情况,CodePush会检查每次上传的 bundle,如果在该版本下如1.0.6已经存在与这次上传完全一样的bundle(对应一个版本有两个bundle的md5完全一样),那么CodePush会拒绝此次更新。 如图:

     

  • 相关阅读:
    WebService
    JavaMail
    ssh框架整合
    CSS3初步
    SpringMVC 文件上传及下载
    Java多线程
    SpringMVC 数据校验
    初始化参数绑定——日期格式
    SpringMVC入门
    Quartz
  • 原文地址:https://www.cnblogs.com/dsweb/p/13531572.html
Copyright © 2020-2023  润新知