一、配置环境
1、 全局安装 code-push 环境 npm install -g code-push-cli ,安装成功则可以 code-push -v查看安装的版本号
2、 code-push register 注册账号,会在google浏览器打开注册界面,然后注册成功会拿到一个key 如下图所示
将这个key 输入终端如下图所示,则可以看到一份配置文件在生成在你的文件下目录为如下图所示。(如果是有账号的情况下,那么将直接登录,同时也会有个key ,也直接保存)
如何证明你的电脑已经登录了这个code-push账号呢 。我们可以在终端输入(在任何终端目录下都可以输入 code-push login )会出现一下的提示。说你的账号已经在这台设备上登录过了
3、在终端下操作,对code-push 创建app的应用 创建两个app的应用(安卓和iOS分别创建)如下图所示.
上图如知,安卓和iOS的app的名字不能取一样的,而且app的name 是不可以存在中文名字的
命令行的代码规则 是 code-push app add 这种规则的命令语句。特别提示上面生成的key 你要千万记住,可以登录账号取查看这个key ,我们还需要了解 production 和staging 的意思 (production 代表的是发布的版本。staging 代表的是测试的版本)。这个需要千万记住,因为后续还要用这两个来进行配置测试环境还是开发环境。不然就会出现在真实中也能收到测试环境下的热更新消息了,等下会对这个进行配置. 同时我们也可以进行查看我们的项目的key ,登录官网也可以查看, 通过命令行进行查看
code-push deployment ls ShangYiJia_APP -k
4、将code-push install 到项目中.。但是特别要注意对应自己的版本进行code-push 的版本意义对应。我们项目是0.52版本。那么我暂时就是瞎子啊了5.1的版本 进行对应。
二、讲述ios 的配置
1、首先 npm install code-push-react-native 到项目中
2、 react-native link code-push-react-native 。看看这个库有没有link 到iOS文件中,如果成功则提示成功
没有成功则手动link 。在这里我教下怎么手动link iOS
(1) 首先在node_modules 中找到这个codepush 文件,然后拖进去如下图
(2) 特别注意一点由于这个库需要一个link 一个静态库(libz)如下图所示
(3)很多人会忘记这个东西(注视:我在这里被坑了一天了。找到这个libcodepush,然后将其拖入到link library 中去, 记住一定是product 中的这个
(4)添加codepush的头文件路径,在 header Search Paths 中添加这句
$(SRCROOT)/../node_modules/react-native-code-push/ios/CodePush
完成上述步骤则link 成功了
3、将codepush 的staging 和release 配置到iOS项目中
(1)在info.list 中添加key CodePushDeploymentKey 和string $(CODEPUSH_KEY)如下图所示
(2)在 project 中的 info 中添加 Staging ,选择release 版本如下图所示
(3)在setting 中 Build Location -> Per-configuration Build Products Path -> Staging 改变staging 的值从 $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 变成 $(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME)
(4)在setting只点击+ 号 选择 add 的这个
(5 )找到 user-defined 中选择 配置如下 ,name 改成 CODEPUSH_KEY 在release 中和staging 中分别选择对应的key 这个key 就是 在 codepush 中的key 。staging 对应 staging
production 对应的就是release
好了。大功告成。iOS的配置已经完全可以了。但是肯定还有疑问,我 的staging 和release 怎么打包出这两个版本,请看下面的如何配置了。这里郑重申明一句(其实codepush的上传给服务器的不是apk 和api 只是上传bundle 文件)。所以说不管是staging 和release 都是 可能是同一个bundle 文件,但是最终看你是如何打包的。打包staging 那么就会去跑staging 的热更新,打包release 跑 production 的热更新
4 、配置热更新代码。我在热更新中配置了一个测试界面,我们可以在测试界面中去调试
热更新是有几种情况的这边说明下 。
1、首先最简单的一种就是 这种无声的热更新,也就是说热更新不会给用户任何提示,都在默默的进行更新,用户完全体会不到整个过程
classMyAppextendsComponent<{}> {}
MyApp= codePush(MyApp);
exportdefaultMyApp;
2、第二种 也是无声更新,比第一种情况多了一种就是热更新每次会在后台返回前台的时候进行热更新。这里可以看到几个参数,
checkFrequency有三种状态如下
ON_APP_START: //在组件初始化的时候进行热更新
ON_APP_RESUME://在每次app从后台回到前台的时候进行热更新
MANUAL://不进行热更新,需要自己手动配置
InstallMode 有如下几种状态
IMMEDIATE :// 安装热更新,并且重启app
ON_NEXT_RESTART: //下次启动的时候启动热更新
ON_NEXT_RESUME //从后台回到前台的时候启动
ON_NEXT_SUSPEND: 在后台的时候进行热更新
classMyAppextendsComponent<{}> {}
MyApp= codePush({ checkFrequency: codePush.CheckFrequency.ON_APP_RESUME, installMode: codePush.InstallMode.ON_NEXT_RESUME})(MyApp);
exportdefaultMyApp;
updateDialog 当为true 是,可以在更新的时候提示用户需要更新
注意一个最重要的问题 。在使用了pod 的环境下。 打包stag 模式下 模式下是找不到pod的文件报错的。需要改。
三、讲述Android 的配置
1、开始如果link 了项目就可以不用link 了。然后看看link有没有成功。主要看三个地方。如下图所示。在根目录下的setting.gradle 中配置。
然后在app目录下的build.gradle进行配置
2、因为我们在codepush上发布是有两种版本的,staging 和release 版本。那么我们就要打包两种模式下的版本。同时还要设置codepush-key。如下图所示。然后在app目录下的build.gradle进行配置。要理解一点,staging 其实也是release 版本,不过是两种release 版本。那么就需要在这里进行配置,然后Staging 中的内容除了key 都要和release 一摸一样
3、还需要在app目录下的build.gradle进行配置进行加上这么两句。
apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
但是直接加上是会报错的。我们可以看到rn给我们的提示。在加上这两句的时候需要配置project.ext.react .而且必须要在在引入这句的前面。如下图
4、这些都配置完成,那么就需要最后操作一步了。用as打开android 项目。然后在项目中加上这些,如果已经是这样就不需要了。
这里可能会报错 BuildConfig.CODEPUSH_KEY报红, 应该是项目自动引入了 codepush的 BuildConfig 。那么将import BuildConfig 删除就行
5、最后一步将安卓的jsbundle 打包到codePush 。使用语句
code-push release-react ShangYiJia_AndroidAPP android
6,怎么打包apk 。用as打开,在项目的右边可以看到gradlew 语句有那些如图所示。有一个satgging的打包,这个就是staging 的打包。还有release 的打包。这些都是gradlew 的语句,不清楚可以自己去查询
。
7。特别注意 。android studio 更新到3.0 以上的(这个问题花费我一天时间去处理了)。因为新版本的as 是用dex 进行打包的,那么特别需要加上如下的几行代码。如果没有加上这么几句话那么就会存在说找不到文件路径,从而不能打包。
同时如果还存在报错说打包的时候有超过64bit 的dex 报错,则加上这么几句话