咱们集成react-native的热更新主要是用来作一些小修复,直接用了微软的CodePush。CodePush默认的deployment分为Staging和Production,一个能够用来测试,一个用来为部署生产更新。本文记录了关键步骤和一些问题的解决方法。 咱们项目react-native的版本是0.47.2 参考文档CodePushjava
按照文档所述,获取keynode
code-push deployment ls YourApp -k
修改项目android/app/build.gradle文件react
android { ... buildTypes { debug { ... buildConfigField "String", "CODEPUSH_KEY", '""' // 这里须要,不然debug模式没法编译 ... } staging { ... buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_STAGING_KEY>"' ... } release { ... buildConfigField "String", "CODEPUSH_KEY", '"<INSERT_PRODUCTION_KEY>"' ... } } ... }
固然你能够把key放在gradle.properites里面,而后再在build.gradle里面引用 接下来修改MainApplication.javaandroid
@Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( ... new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), ... ); }
如上面配置完成后,ios
react-native run-android --variant staging
你会发现app闪退。 按照build.gradle文件的注释,咱们应该对staging buildType作一些配置在git
apply from: "../../node_modules/react-native/react.gradle"
这行代码以前插入github
project.ext.react = [ bundleInStaging: true, //不然js bundle不会打包进去 devDisabledInStaging: true, jsBundleDirStaging: "$buildDir/intermediates/assets/staging", resourcesDirStaging: "$buildDir/intermediates/res/merged/staging", ]
这个基本没有坑,照文档操做就好了,注意Build Location -> Per-configuration Build Products Path -> Staging中的路径改为release的就好了,否则编译会报找不到一些头文件react-native
安卓文档还介绍了一种能够在一个手机中安装两种构建方式的apk的方法app