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

更新targetSdkVersion至34后,Play商店中App出现大量Fragment实例化崩溃

问题描述

我在多部手机上测试应用均正常,但Play商店在短短几天内收到了超过5000条崩溃报告。最近的版本中仅将targetSdkVersion从31更新至34。

崩溃堆栈信息
Exception java.lang.RuntimeException: Unable to start activity ComponentInfo{MyAppPackage/MyAppPackage.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.ScreenStackFragment: calling Fragment constructor caused an exception
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3502)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3683)
at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:85)
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:2108)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:223)
at android.app.ActivityThread.main (ActivityThread.java:7948)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:603)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:947)
Caused by androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.swmansion.rnscreens.ScreenStackFragment: calling Fragment constructor caused an exception
at androidx.fragment.app.Fragment.instantiate (Fragment.java:631)
at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate (FragmentManager.java:483)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
at androidx.fragment.app.FragmentManager.restoreSaveState (FragmentManager.java:2728)
at androidx.fragment.app.FragmentController.restoreSaveState (FragmentController.java:198)
at androidx.fragment.app.FragmentActivity$2.onContextAvailable (FragmentActivity.java:149)
at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable (ContextAwareHelper.java:99)
at androidx.activity.ComponentActivity.onCreate (ComponentActivity.java:322)
at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:273)
at com.facebook.react.ReactActivity.onCreate (ReactActivity.java:45)
at MyAppPackage.MainActivity.onCreate (MainActivity.java:13)
at android.app.Activity.performCreate (Activity.java:8071)
at android.app.Activity.performCreate (Activity.java:8054)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3472)
Caused by java.lang.reflect.InvocationTargetException:
at java.lang.reflect.Constructor.newInstance0
at java.lang.reflect.Constructor.newInstance (Constructor.java:343)
at androidx.fragment.app.Fragment.instantiate (Fragment.java:613)
Caused by java.lang.IllegalStateException: Screen fragments should never be restored. Follow instructions from https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-<US_SOCIAL_SECURITY_NUMBER> to properly configure your main activity.
at com.swmansion.rnscreens.ScreenFragment.<init>(ScreenFragment.kt:54)
at com.swmansion.rnscreens.ScreenStackFragment.<init>(ScreenStackFragment.kt:35)
我的Android build.gradle配置
buildToolsVersion = "34.0.0"
minSdkVersion = 21
compileSdkVersion = 31
targetSdkVersion = 34
kotlin_version = '1.6.10'
解决方案

崩溃根源是升级targetSdkVersion到34后,Android系统自动恢复Fragment状态的机制与react-native-screens的设计冲突——该库不允许系统恢复Screen相关Fragment。按以下步骤修复:

  1. 修改MainActivity
    将MainActivity继承的ReactActivity替换为ReactFragmentActivity,并在onCreate方法中传入null作为savedInstanceState参数,阻止系统恢复Fragment状态:

    若使用Java:

    import android.os.Bundle;
    import com.facebook.react.ReactFragmentActivity;
    
    public class MainActivity extends ReactFragmentActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(null);
        }
    }
    

    若使用Kotlin:

    import android.os.Bundle
    import com.facebook.react.ReactFragmentActivity
    
    class MainActivity : ReactFragmentActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(null)
        }
    }
    
  2. 升级react-native-screens版本
    确保使用该库的最新稳定版,避免版本与targetSdk34存在兼容性问题。

  3. 重新构建并发布
    同步gradle配置,重新编译应用后发布新版本到Play商店。

内容的提问来源于stack exchange,提问作者umair ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:14:54