You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native上架Google Play后报java.lang.RuntimeException异常

React Native 跨版本启动崩溃排查方案

发布全新React Native应用后,从Google Play开发者控制台获取到跨设备、跨Android版本均触发的启动崩溃,对应堆栈信息如下:

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3555)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3707)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:83)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2220)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:237)
  at android.app.ActivityThread.main (ActivityThread.java:8019)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1100)
Caused by: androidx.fragment.app.Fragment$InstantiationException: 
  at androidx.fragment.app.Fragment.instantiate (Fragment.java:566)
  at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java:57)
  at androidx.fragment.app.FragmentManager$3.instantiate (FragmentManager.java:390)
  at androidx.fragment.app.FragmentStateManager.<init> (FragmentStateManager.java:74)
  at androidx.fragment.app.FragmentManager.restoreSaveState (FragmentManager.java:2454)
  at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java:196)
  at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:287)
  at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:115)
  at com.facebook.react.ReactActivity.onCreate (ReactActivity.java:45)
  at com.marwan.mosaed.dietforever.MainActivity.onCreate (MainActivity.java:23)
  at android.app.Activity.performCreate (Activity.java:7957)
  at android.app.Activity.performCreate (Activity.java:7946)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1307)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3530)
Caused by: java.lang.reflect.InvocationTargetException: 
  at java.lang.reflect.Constructor.newInstance0 (Native Method)
  at java.lang.reflect.Constructor.newInstance (Constructor.java:343)
  at androidx.fragment.app.Fragment.instantiate (Fragment.java:548)
Caused by: java.lang.IllegalStateException: 
  at com.swmansion.rnscreens.ScreenFragment.<init> (ScreenFragment.kt:42)

错误截图

根因定位

崩溃最终触发点是第三方依赖react-native-screens的ScreenFragment初始化失败:低版本react-native-screens的ScreenFragment没有定义公开无参构造函数,当应用被系统后台回收、配置变更(横竖屏切换、字体大小调整)触发Activity重建时,系统FragmentManager会尝试通过反射调用Fragment的无参构造恢复之前保存的实例状态,此时就会抛出异常直接导致应用启动崩溃。

修复方案

  • 优先升级依赖版本:该问题在react-native-screens3.4.0及以上版本已官方修复,直接升级到稳定版即可解决,推荐升级到3.20.0及以上正式版
    # npm安装
    npm install react-native-screens@^3.20.0
    # yarn安装
    yarn add react-native-screens@^3.20.0
    
  • 升级后清理构建缓存重新打包:进入安卓项目目录执行./gradlew clean清理旧构建产物,再重新打release包验证,重点测试后台杀进程后重启、横竖屏切换两个场景,确认崩溃不再复现
  • 临时规避方案:如果暂时无法升级依赖版本,可以在MainActivity.java中重写onCreate方法,拦截系统自动恢复Fragment状态的逻辑,代码如下:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 移除Fragment恢复状态,规避ScreenFragment实例化崩溃
        if (savedInstanceState != null) {
            savedInstanceState.remove("android:support:fragments");
            savedInstanceState.remove("android:fragments");
        }
        super.onCreate(savedInstanceState);
    }
    
  • 版本兼容校验:如果项目使用了@react-navigation/native-stack等依赖react-native-screens的导航库,同步确认导航库版本和升级后的react-native-screens版本匹配,避免出现版本兼容问题。

内容的提问来源于stack exchange,提问作者Mohamed Mosaed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:24:41