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

Expo React Native升级SDK51后,入口配置致应用致命崩溃

Expo SDK 47升级至SDK 51启动崩溃解决方法

问题概述

将Expo应用从SDK 47升级到SDK 51后,执行expo run:android出现启动致命崩溃,核心报错信息:

java.lang.IllegalStateException: DevelopmentClientController was initialized.

当前相关配置:

  • package.json中"main": "./index.js"
  • index.js使用registerRootComponent(App)注册根组件
  • MainActivity.kt通过ReactActivityDelegateWrapper包装代理类

解决步骤

1. 修正package.json入口配置

将main字段修改为SDK 51推荐的裸工作流入口:

"main": "node_modules/expo/AppEntry.js"

若使用expo-router,可改为:

"main": "expo-router/entry"

2. 简化MainActivity.kt代码

移除ReactActivityDelegateWrapper,改用默认的ReactActivityDelegate实现,避免重复初始化冲突:

package com.expoplayground

import android.os.Bundle
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.defaults.DefaultReactActivityDelegate

class MainActivity : ReactActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(null)
  }

  override fun getMainComponentName(): String = "main"

  override fun createReactActivityDelegate(): ReactActivityDelegate {
    return DefaultReactActivityDelegate(
      this,
      mainComponentName,
      fabricEnabled = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
    )
  }
}

3. 调整根组件注册逻辑(可选)

如果保留自定义index.js,将registerRootComponent替换为React Native原生的AppRegistry注册方式:

import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';

AppRegistry.registerComponent(appName, () => App);

也可以直接删除自定义index.js,使用Expo默认的AppEntry入口。

问题原因

SDK 51对裸工作流与托管工作流的入口初始化逻辑做了明确区分,旧代码中ReactActivityDelegateWrapper和registerRootComponent同时使用,导致DevelopmentClientController被重复初始化,触发崩溃异常。

内容的提问来源于stack exchange,提问作者Amir-Mousavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:20:09