咱們集成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