鍍金池/ 問(wèn)答/HTML5/ React Native 安卓 程序運(yùn)行報(bào)錯(cuò): React Native ver

React Native 安卓 程序運(yùn)行報(bào)錯(cuò): React Native version mismatch

1.問(wèn)題:
React Native開(kāi)發(fā)Android,打包簽名的APK沒(méi)有問(wèn)題,可以正常運(yùn)行,但是直接在工程中通過(guò)命令行react-native run-android,以開(kāi)發(fā)模式運(yùn)行程序,程序啟動(dòng)后報(bào)錯(cuò):

React Native version mismatch.

JavaScript version: 0.54.3
Native version: 0.55.3
Make sure that you have rebuilt the native code. If the problem persists try clearing the Watchman and packager caches with `watchman watch-del-all && react-native start --reset-cache`.
  reactConsoleErrorHandler    
  checkVersions    
  (anonymous function)    
  loadModuleImplementation    
  guardedLoadModule    
  _require    
  (anonymous function)    
  executeApplicationScript    
  (anonymous function)    
regeneratorRuntime is not defined
  handleException    
  handleError    
  reportFatalError    
  guardedLoadModule    
  _require    
  (anonymous function)    
  executeApplicationScript    
  (anonymous function)    
Failed to print error: 

原因不明。
試過(guò)將node_modules整體刪除再安裝,不好用。
這個(gè)問(wèn)題到底是什么原因引起的,如何修復(fù)呢?

回答
編輯回答
真難過(guò)

這個(gè)問(wèn)題已經(jīng)得到解決,參照stackoverflow上的問(wèn)題:https://stackoverflow.com/que...
這個(gè)問(wèn)題的原因就處在Android工程中app/build.gradle中,build.gradle中對(duì)于 react-native庫(kù)的版本的配置默認(rèn)是這么寫(xiě)的:

compile 'com.facebook.react:react-native:+'

這個(gè)最后面的 “+” 表示的是使用最新的版本號(hào)。
也就是說(shuō),我們Android工程中,依賴的React native 的native代碼版本號(hào)是使用網(wǎng)絡(luò)上發(fā)布的最新版本。
這也是我們這個(gè)問(wèn)題產(chǎn)生的根本原因。
按照上面鏈接中的問(wèn)題的回答,進(jìn)行如下修改:

compile ('com.facebook.react:react-native:0.54.3') { force = true }

再執(zhí)行 react-native run-android,一切恢復(fù)正常。真是個(gè)大坑,耽誤了自己一上午的時(shí)間。

補(bǔ)充:
報(bào)這個(gè)錯(cuò)誤還有一種情況,那就是我們先用react-native run-android運(yùn)行了其他的不同RN版本的工程,這個(gè)時(shí)候,如果我們不關(guān)閉其他運(yùn)行中的RN工程的調(diào)試進(jìn)程就在我們想要啟動(dòng)的工程下面運(yùn)行react-native run-android 命令的話,也會(huì)在安裝的 app中報(bào)這個(gè)錯(cuò)誤,也就是對(duì)應(yīng) stack overflow 鏈接中的票數(shù)最多的回答。

總結(jié)一下:
產(chǎn)生這個(gè)錯(cuò)誤可能有兩種情況:
第一種情況,也是比較常見(jiàn)的情況是:有其他不同RN版本號(hào)的工程以開(kāi)發(fā)模式運(yùn)行,這時(shí)如果我們以 react-native run-android 運(yùn)行我們自己想要調(diào)試的工程的話,會(huì)報(bào)這個(gè)錯(cuò)誤。
第二種情況,可能相比第一種情況不常見(jiàn),原因在于可能在我們的開(kāi)發(fā)周期內(nèi),RN的Native版本庫(kù)不一定會(huì)更新。第二種情況就是,我們?cè)贏ndroid工程中配置的RN庫(kù)版本與 JS工程中配置的RN庫(kù)版本不一致。這種情況下只需將 android/app/build.gradle 下的RN庫(kù)默認(rèn)配置改為:

compile ('com.facebook.react:react-native:0.54.3') { force = true } // 0.54.3 處變?yōu)樽约旱腏S工程中的相應(yīng)版本號(hào)

問(wèn)題即可解決。

2018年6月20日 17:46