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

升级Expo SDK 46后应用无法运行,求助解决两类核心报错

问题解决指南:Expo SDK46升级后报错及Google Play审核问题

一、核心问题背景

修正隐私政策链接后,因广告ID/分析问题被Google Play拒审,升级Expo SDK46(该版本已修复无广告场景下的广告ID问题)后,现有代码迁移出现两类报错,但新建SDK46项目可正常运行。

二、报错1:TypeError: undefined is not an object (evaluating '_reactNative.Text.propTypes.style')

问题原因

SDK46对应的React Native 0.69+已废弃内置propTypes,部分第三方依赖仍在引用旧版react-native中的Text.propTypes等API,导致找不到对应对象。

解决方案

  1. 排查未适配的第三方库
    运行npm ls deprecated-react-native-prop-types,查看哪些依赖未适配RN0.69+,优先升级这些库到最新版本。若无法升级,需手动为该库添加deprecated-react-native-prop-types依赖。
  2. 配置Metro别名兜底
    在项目根目录创建/修改metro.config.js,将旧版propTypes路径指向兼容包:
    const { getDefaultConfig } = require('@expo/metro-config');
    const config = getDefaultConfig(__dirname);
    
    config.resolver.alias = {
      ...config.resolver.alias,
      'react-native/lib/TextPropTypes': 'deprecated-react-native-prop-types',
      'react-native/Libraries/Components/View/ViewPropTypes': 'deprecated-react-native-prop-types',
    };
    
    module.exports = config;
    
  3. 彻底清除缓存
    执行npx expo start --clear,清除Metro及Expo缓存后重启项目。

三、报错2:Invariant Violation: "main" has not been registered

问题原因

入口文件配置错误、模块加载失败(如依赖缺失/路径错误),导致AppRegistry未完成组件注册。

解决方案

  1. 核对入口配置
    对比新建SDK46项目的app.json,确保expo.entryPoint指向正确路径(如./index.js),示例:
    {
      "expo": {
        "entryPoint": "./index.js",
        // 其他配置...
      }
    }
    
  2. 规范入口文件写法
    在index.js中使用Expo官方推荐的注册方式,避免直接调用AppRegistry.registerComponent:
    import { registerRootComponent } from 'expo';
    import App from './App';
    
    registerRootComponent(App);
    
  3. 排查模块加载错误
    查看Metro启动日志,优先解决“模块找不到”“循环依赖”等前置错误,这些问题会导致App组件无法正常加载,进而触发注册失败。
  4. 清理无效依赖
    删除项目中未使用的广告相关依赖(如expo-ads-admob、react-native-google-mobile-ads等),避免与SDK46的默认配置冲突。

四、Google Play广告ID问题补充验证

升级SDK46后,需确保app.json中禁用广告相关配置,避免审核触发:

{
  "expo": {
    "android": {
      "config": {
        "googleServicesAds": {
          "enabled": false
        }
      }
    }
  }
}

五、通用修复步骤

  1. 删除node_modules、package-lock.json/yarn.lock文件;
  2. 执行npx expo install,重新安装SDK46兼容的依赖;
  3. 再次执行npx expo start --clear启动项目。

内容的提问来源于stack exchange,提问作者Ahmad Abdulkadir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:05:20