React Native:安装react-navigation后,应用程序不会加载,但没有错误消息

3
我按照React Native的get started页面上的所有步骤进行操作,包括运行npx react-native init AwesomeProject创建一个起始项目。(我按照"React Native CLI Quickstart" / "macOS" / "Android"的步骤进行操作)。然后我打开Android Studio,启动模拟器,进入项目文件夹并运行npx react-native run-android。一切正常。我可以在这里和那里调整起始项目,重新加载,一切都正常。
但是我需要使用React Navigation。我遵循here的步骤,显然React Navigation已经成功安装。然后当我再次运行npx react-native run-android时,事情构建成功了,那个Metro东西——单独的终端标签/窗口——显示“done”。但是模拟器没有显示我的应用程序。它只显示一个空白页面,然后消失,我会看到模拟器的主屏幕。即使我根本不调整起始代码——我甚至没有尝试导入React Navigation,只要安装它就会出现这个错误。
这是我运行npx react-native run-android后终端标签的样子:

enter image description here

enter image description here

我安装React Navigation后尝试关闭终端和Android Studio,但问题仍然存在。我使用的是macOS 10.15.3和Android Studio 3.5.3。我做错了什么?

调试器是否已激活?关闭该选项卡,从模拟器中禁用它,然后再次运行应用程序。 - Ian Vasco
3个回答

8
我也遇到了这个问题。 顺带一提:我使用了Android Studio的logcat来查看启动我的应用程序时产生的任何错误。我的logcat包含以下错误。虽然这并没有真正帮助我解决问题。
--------- beginning of crash
2020-05-04 12:14:45.284 6139-6170/com.gettingstarted E/AndroidRuntime: FATAL EXCEPTION: FlipperConnectionThread
    Process: com.gettingstarted, PID: 6139
    java.lang.NoClassDefFoundError: <clinit> failed for class com.facebook.flipper.android.EventBase; see exception in other thread
        at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
2020-05-04 12:14:45.285 6139-6169/com.gettingstarted E/AndroidRuntime: FATAL EXCEPTION: FlipperEventBaseThread
    Process: com.gettingstarted, PID: 6139
    java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libfbjni.so result: 0
        at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:825)
        at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:673)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:611)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:559)
        at com.facebook.soloader.NativeLoaderToSoLoaderDelegate.loadLibrary(NativeLoaderToSoLoaderDelegate.java:25)
        at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:44)
        at com.facebook.jni.HybridData.<clinit>(HybridData.java:34)
        at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
2020-05-04 12:14:45.416 6171-6178/? E/.gettingstarte: Failed to send DDMS packet REAQ to debugger (-1 of 20): Broken pipe
2020-05-04 12:14:45.709 6171-6171/? E/SoLoader: couldn't find DSO to load: libjscexecutor.so result: 0
2020-05-04 12:14:45.800 6171-6203/? E/SoLoader: couldn't find DSO to load: libfbjni.so result: 0
2020-05-04 12:14:45.801 6171-6204/? E/AndroidRuntime: FATAL EXCEPTION: FlipperConnectionThread
    Process: com.gettingstarted, PID: 6171
    java.lang.NoClassDefFoundError: <clinit> failed for class com.facebook.flipper.android.EventBase; see exception in other thread
        at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
2020-05-04 12:14:45.801 6171-6203/? E/AndroidRuntime: FATAL EXCEPTION: FlipperEventBaseThread
    Process: com.gettingstarted, PID: 6171
    java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libfbjni.so result: 0
        at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:825)
        at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:673)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:611)
        at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:559)
        at com.facebook.soloader.NativeLoaderToSoLoaderDelegate.loadLibrary(NativeLoaderToSoLoaderDelegate.java:25)
        at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:44)
        at com.facebook.jni.HybridData.<clinit>(HybridData.java:34)
        at com.facebook.flipper.android.FlipperThread.run(FlipperThread.java:25)
2020-05-04 12:14:45.817 1656-1656/? E/lowmemorykiller: Error writing /proc/6171/oom_score_adj; errno=22
2020-05-04 12:14:45.905 1775-1804/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property

搜索网络后,我发现有些人谈论清理环境。因此我采取了以下措施:
  • 创建新模拟器:问题仍然存在
  • 删除 "node_modules" 和 "package-lock.json" ,然后运行 "npm install" :问题仍然存在
  • 清除所有缓存 / "node_modules" / "package-lock.json":问题仍然存在
    • 删除metro缓存(在我的机器上是在 "rm -rf $TEMP/metro-cache",其他人说它在 "rm -rf $TEMP/metro-bundler-cache-*")
    • 其他人说要删除 "rm -rf $TEMP/react-native-packager-cache-*",但我的Windows机器上没有 "react-native-packager-cache" 文件夹
    • 删除 node_modules 和 package-lock.json ,然后运行 "npm install"
    • "npm cache clean --force"

然而,最终我获得了一个可工作的环境。

  • 删除 "node_modules" 和 "package-lock.json"
  • "npm install"
  • "cd android"
  • "gradle clean"
  • 回到根目录运行应用程序

对我来说,似乎从 Android 下清理 gradle 缓存是关键步骤。


0
我能够用以下方法解决问题:
  1. npm install react-navigation

  2. expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view

  3. npm install react-navigation-stack @react-native-community/masked-view

  4. expo r -c

另外请注意,createStackNavigator已经迁移到'react-navigation-stack':
import { createStackNavigator } from 'react-navigation-stack';

0
  1. 在构建应用程序之前,请运行“adb devices”并检查模拟器是否显示在列表中。如果没有,那就是问题所在。

  2. 我知道你说你按照 React Navigation 文档上的一切操作了,但请确保你没有跳过以下步骤:

为了完成 react-native-gesture-handler 的安装,请在入口文件(例如 index.js 或 App.js)的顶部添加以下内容(确保它在顶部,并且在它之前没有其他内容):

import 'react-native-gesture-handler';

注意:如果您跳过此步骤,则即使在开发中运行良好,您的应用程序在生产中可能会崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接