React Native Android 在启用调试模式时崩溃

React Native Android crashes on enabling debug mode

摇动android设备并点击调试,每次都立即崩溃。在 Android Studio logcat 中,它显示 未加载源 URL,您初始化实例了吗?:

java.lang.AssertionError: No source URL loaded, have you initialised the instance?
    at com.facebook.infer.annotation.Assertions.assertNotNull(Assertions.java:35)
    at com.facebook.react.modules.debug.SourceCodeModule.getTypedExportedConstants(SourceCodeModule.java:39)
    at com.facebook.fbreact.specs.NativeSourceCodeSpec.getConstants(NativeSourceCodeSpec.java:35)
    at com.facebook.react.bridge.JavaModuleWrapper.getConstants(JavaModuleWrapper.java:129)
    at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
    at android.os.Looper.loop(Looper.java:223)
    at com.facebook.react.bridge.queue.MessageQueueThreadImpl.run(MessageQueueThreadImpl.java:226)
    at java.lang.Thread.run(Thread.java:923)

相同的 React Native 代码库,在 ios 上打开调试模式工作正常,但在 Android 上打开调试模式时它总是崩溃。我看不到是什么导致了错误日志。

这是我对本机反应应用程序的依赖项,我正在使用 redux 和 redux-devtools-extension 进行调试。我是否缺少任何图书馆?

"dependencies": {
  "@react-native-async-storage/async-storage": "^1.15.14",
  "@reduxjs/toolkit": "^1.7.0",
  "expo": "~42.0.1",
  "expo-permissions": "12.1.0",
  "expo-splash-screen": "~0.11.2",
  "expo-status-bar": "~1.0.4",
  "expo-updates": "~0.8.1",
  "react": "17.0.2",
  "react-dom": "17.0.2",
  "react-native": "0.64.1",
  "react-native-fast-image": "^8.5.11",
  "react-native-gesture-handler": "~1.10.2",
  "react-native-navigation": "^7.14.0",
  "react-native-reanimated": "~2.1.0",
  "react-native-screens": "3.2.0",
  "react-native-unimodules": "~0.13.3",
  "react-native-web": "0.16.3",
  "react-redux": "^7.2.6",
  "redux-persist": "^6.0.0",
  "tslint": "^6.1.3",
  "tslint-react": "^5.0.0"
},
"devDependencies": {
  "@babel/core": "^7.9.0",
  "@types/react": "17.0.5",
  "@types/react-native": "0.64.5",
  "babel-preset-expo": "~8.3.0",
  "jest-expo": "~41.0.0",
  "redux-devtools-extension": "^2.13.9",
  "typescript": "4.2.4"
}, 

经过更多搜索,发现这是 react-native-reanimated 中的一个已知问题。正如他们 website 指出的那样

Please note that Reanimated 2 doesn't support remote debugging, only Flipper can be used for debugging.

另一个github issue也指出了这个问题

This is expected, you can't use remote debugging with turbomodules (which Reanimated v2 is using). Check out Flipper to debug your app.

https://docs.swmansion.com/react-native-reanimated/docs/#known-problems-and-limitations

https://github.com/software-mansion/react-native-reanimated/issues/1990

删除这个库解决了这个问题。

  1. 删除 package.json
  2. 中的 react-native-reanimated 依赖
  3. 删除 android 的 MainApplication.java
  4. 中的相关代码
  5. yarn 安装或 npm 安装
  6. 转到 ios 文件夹和 运行 pod install
  7. 转到 android 文件夹和 运行 ./gradlew clean
  8. 重建应用程序。 yarn androidyarn ios

另一种方法是使用 Flipper 进行调试。

react-native-reanimated 升级到 2.4.1 可能会解决此问题。