我们集成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文件
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.java
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
...
new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG),
...
);
}
如上面配置完成后,
react-native run-android --variant staging
你会发现app闪退。 按照build.gradle文件的注释,我们应该对staging buildType做一些配置在
apply from: "../../node_modules/react-native/react.gradle"
这行代码之前插入
project.ext.react = [
bundleInStaging: true, //否则js bundle不会打包进去
devDisabledInStaging: true,
jsBundleDirStaging: "$buildDir/intermediates/assets/staging",
resourcesDirStaging: "$buildDir/intermediates/res/merged/staging",
]
iOS 参考文档
这个基本没有坑,照文档操作就行了,注意Build Location -> Per-configuration Build Products Path -> Staging中的路径改成release的就行了,不然编译会报找不到一些头文件
结束
安卓文档还介绍了一种可以在一个手机中安装两种构建方式的apk的方法