React Native 应用在安卓模拟器上一直闪退

9
我正在尝试在 Android 模拟器上运行 React Native 应用程序(react-native run-android),但它一直崩溃并显示错误消息“MYAPP已停止”。我正在尝试找出可以进一步调试此问题的位置(错误消息、日志等)。我在终端和模拟器本身上都没有看到任何错误消息。所以除了尝试解决应用程序无法部署的原因之外,有哪些地方可以进一步调试 Android 模拟器上的应用程序部署问题?

enter image description here

小提示: 我已经将版本从0.31.0升级到0.32.0,并运行了react-native upgrade命令,这还需要覆盖一些文件(我选择了覆盖所有文件的选项)。我应该担心最新的更改从升级到0.32.0是否不起作用或不完整吗?有没有任何步骤可以验证最新的更改是否存在?

更新: 我创建了一个新的示例React Native项目,只是想看看RN的最新版本是否有问题。它正常运行。然后将index.android.js中的示例代码复制到我的项目的index.android.js中并重新运行。仍然无法将其部署到Android模拟器。删除node_modules目录,重新运行,仍然出现同样的问题。我现在认为这与升级过程有关...这非常令人沮丧。

更新v2: 感谢@GabeSechan的提示和方向,我找到了以下堆栈跟踪:

09-04 03:24:41.297  5008  5008 E AndroidRuntime: FATAL EXCEPTION: main
09-04 03:24:41.297  5008  5008 E AndroidRuntime: Process: com.helpr, PID: 5008
09-04 03:24:41.297  5008  5008 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.helpr/com.helpr.MainActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.facebook.react.ReactApplication
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.ActivityThread.-wrap12(ActivityThread.java)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:154)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:6077)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
09-04 03:24:41.297  5008  5008 E AndroidRuntime: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.facebook.react.ReactApplication
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at com.facebook.react.ReactActivity.getUseDeveloperSupport(ReactActivity.java:89)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at com.facebook.react.ReactActivity.onCreate(ReactActivity.java:96)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.Activity.performCreate(Activity.java:6664)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
09-04 03:24:41.297  5008  5008 E AndroidRuntime:    ... 9 more

经过快速的谷歌搜索,似乎在升级React Native时存在这样的问题。我会发布一个答案,回答我的问题。


2
看一下logcat。应该会有一个堆栈跟踪。 - Gabe Sechan
@GabeSechan - 感谢您的快速回复。我对移动应用程序开发还比较新,所以不得不进行快速的谷歌搜索来了解logcat是什么 - 我将使用堆栈跟踪结果更新问题。谢谢! - Uzair Faisal
2
请查看 https://github.com/facebook/react-native/issues/8215 - Gabe Sechan
7个回答

16

如果您最近更改了gradle配置或androidmanifest.xml中的任何内容,例如包名称等,则必须清除gradle文件:

要解决此问题:

cd android
./gradlew clean

这会删除您的旧构建目录并生成一个新的目录。


4
如果你正在升级React Native,请注意,升级过程并不一定会更新所有所需的文件(截至写作时,升级到RN 0.32.0)。事实证明这是一个已知问题(https://github.com/facebook/react-native/issues/8215)。在问题得到解决之前,您需要手动更新位于./android/app/src/main/AndroidManifest.xml的AndroidManifest.xml文件。我建议创建一个示例React Native项目,并使用新创建的AndroidManifest.xml文件来手动更新现有项目中的文件。此外,每次升级时,请对新创建的RN项目和您自己的项目进行比较,以验证是否需要更新其他文件。

3
我遇到了同样的问题,
总结一下:Metro 不会显示所有错误,你需要使用原生工具,如 XCode 和 Android Studio 来查看错误。
如何解决:尝试在 Android Studio 上运行 React Native 应用程序,步骤如下:
  1. 运行 yarn start 或 npx start
  2. 在 Android Studio 中打开 /android 文件夹,点击运行图标(绿色播放图标)
希望一旦运行,您就能找到错误,因为仅靠 React Native Metro 无法显示这些错误。

打开 Android Studio 中的 /android 文件夹。这个指令帮了我很多,我可以找到错误发生的原因。 - Felix Htoo

1
为了解决您的问题,在依赖项下添加以下两行代码到android\app\build.gradle文件中:
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'

0

添加以下内容(适用于发布APK):

**android:usesCleartextTraffic="true"**

在./android/app/src/main/AndroidManifest.xml内;

在调试情况下,请从(gradle.properties)中删除此行...

**hermesEnabled=true**

并从(node_modules/react-native-reanimated/android/build.gradle)中删除以下内容,希望它能正常工作:

if ((REACT_NATIVE_MINOR_VERSION >= 71&& appProject?.hermesEnabled?.toBoolean())|| appProject?.ext?.react?.enableHermes?. toBoolean()) { return "hermes" }


0
在我的情况下,我在android/build.gradle中将targetSdkVersion设置为30,而我尝试执行应用程序的模拟器需要比这个版本低的要求,将其更改为28有助于我构建应用程序。如果您的应用程序在构建版本28上运行良好,那么您也可以尝试这种方法。
targetSdkVersion = 30 // Before
targetSdkVersion = 28 // After

声明:这只是导致此问题的原因之一,降级到28可能不适合所有人,请在实施此解决方案之前确定。


0

我曾经遇到同样的问题,尝试了很多方法后,以下方法解决了我的问题:

1:在gradle.properties中添加googlePlayServicesVersion=12.0.1(我猜这是不必要的)

2:在android/build.gradle中添加以下内容:

 allprojects {
    repositories {
    //start here
    configurations.all {
 resolutionStrategy.eachDependency { DependencyResolveDetails details ->
   def requested = details.requested
       if (requested.group == 'com.google.android.gms') {
          details.useVersion '12.0.1'
       }
       if (requested.group == 'com.google.firebase') {
          details.useVersion '12.0.1'
         }
       }
     }
    //end
     jcenter()
       maven {
         url "https://maven.google.com"
       }
     }
 }

我在https://github.com/idehub/react-native-google-analytics-bridge/wiki/Solution-for-Android-build-failure-issues中找到了这个。


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