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