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

EAS构建后Expo React Native真机启动崩溃求助

Expo React Native EAS构建后物理设备启动崩溃排查

问题说明

EAS构建完成的Expo React Native应用,在物理设备启动时直接崩溃。构建日志仅输出以下警告,无崩溃相关错误信息:

[stderr]
Note: Some input files use or override a deprecated API.
[stderr]
Note: Recompile with -Xlint:deprecation for details.
[stderr]
Note: Some input files use unchecked or unsafe operations.
[stderr]
Note: Recompile with -Xlint:unchecked for details.

已执行的排查操作:

  • 重新安装所有依赖
  • 清理npm及Expo缓存
  • 代码静态分析检查

配置文件详情

app.json

{  
  "expo": {    
    "name": "social",    
    "slug": "social",    
    "version": "1.0.0",    
    "orientation": "portrait",    
    "icon": "./assets/logo.png",    
    "userInterfaceStyle": "light",    
    "splash": {      
      "image": "./assets/logo.png",      
      "resizeMode": "contain",      
      "backgroundColor": "#ffffff"    
    },    
    "assetBundlePatterns": [      
      "**/*"    
    ],    
    "ios": {      
      "supportsTablet": true    
    },    
    "android": {      
      "adaptiveIcon": {        
        "foregroundImage": "./assets/logo.png",        
        "backgroundColor": "#ffffff"      
      },      
      "package": "com.gauravgajjar.social"    
    },    
    "web": {      
      "favicon": "./assets/logo.png"    
    },    
    "extra": {      
      "eas": {        
        "projectId": "3eaec0b8-7c13-43eb-bb50-ff0ab227497a"      
      }    
    },    
    "runtimeVersion": {      
      "policy": "appVersion"    
    },    
    "updates": {      
      "url": "https://u.expo.dev/3eaec0b8-7c13-43eb-bb50-ff0ab227497a"    
    }  
  }
}

package.json

{  
  "name": "social",  
  "version": "1.0.0",  
  "main": "node_modules/expo/AppEntry.js",  
  "scripts": {    
    "start": "expo start",    
    "android": "expo run:android",    
    "ios": "expo run:ios",    
    "web": "expo start --web"  
  },  
  "dependencies": {    
    "@react-navigation/native": "^6.1.7",    
    "@react-navigation/native-stack": "^6.9.13",    
    "@react-navigation/stack": "^6.3.17",    
    "expo": "^49.0.11",    
    "expo-av": "~13.4.1",    
    "expo-image-picker": "~14.3.2",    
    "expo-secure-store": "~12.3.1",    
    "expo-splash-screen": "~0.20.5",    
    "expo-system-ui": "~2.4.0",    
    "expo-updates": "~0.18.13",    
    "formik": "^2.4.3",    
    "react": "18.2.0",    
    "react-dom": "18.2.0",    
    "react-native": "^0.72.4",    
    "react-native-gesture-handler": "~2.12.0",    
    "react-native-modal": "^13.0.1",    
    "react-native-virtualized-view": "^1.0.0",    
    "yup": "^1.2.0"  
  },  
  "devDependencies": {    
    "@babel/core": "^7.20.0"  
  },  
  "private": true
}

eas.json

{  
  "cli": {    
    "version": ">= 5.2.0"  
  },  
  "build": {    
    "preview": {      
      "android": {        
        "buildType": "apk"      
      },      
      "channel": "main"    
    },    
    "preview2": {      
      "android": {        
        "gradleCommand": ":app:assembleRelease"      
      },      
      "channel": "main"    
    },    
    "preview3": {      
      "developmentClient": true    
    },    
    "production": {}  
  },  
  "submit": {    
    "production": {}  
  }
}

进一步排查方案

1. 获取设备崩溃日志

构建日志的警告不直接触发崩溃,必须获取设备端的崩溃日志才能定位根因:

  • Android:设备连接电脑后执行adb logcat *:E,启动应用后捕获错误输出;
  • iOS:通过Xcode打开「Window > Devices and Simulators」,选择对应设备后查看「View Device Logs」中的崩溃报告。

2. 补充权限配置

当前app.json缺少expo-image-picker、expo-av等依赖所需的权限声明,可能导致启动崩溃。在expo节点下添加权限配置:

"ios": {
  "supportsTablet": true,
  "infoPlist": {
    "NSCameraUsageDescription": "需要访问相机拍摄内容",
    "NSPhotoLibraryUsageDescription": "需要访问相册选择内容",
    "NSMicrophoneUsageDescription": "需要访问麦克风录制音频"
  }
},
"android": {
  "adaptiveIcon": {
    "foregroundImage": "./assets/logo.png",
    "backgroundColor": "#ffffff"
  },
  "package": "com.gauravgajjar.social",
  "permissions": [
    "CAMERA",
    "READ_MEDIA_IMAGES",
    "RECORD_AUDIO"
  ]
}

3. 测试开发客户端构建

执行eas build --profile preview3构建开发客户端,安装到设备后启动,开发客户端会显示详细的错误堆栈,帮助定位代码或依赖问题。

4. 验证更新配置

当前runtimeVersion使用appVersion策略,需确保构建版本与app.json中的version完全一致,且updates.url正确。可临时移除updates节点,重新构建测试是否仍崩溃。

5. 排查依赖兼容性

  • react-native-virtualized-view@1.0.0与Expo 49的兼容性存疑,尝试移除该依赖后重新构建;
  • 确认所有依赖版本与Expo 49官方兼容列表匹配。

6. 清理原生缓存

若之前执行过expo run:android/ios生成过原生项目,EAS构建可能复用旧配置。执行expo prebuild --clean清理原生文件后,重新发起EAS构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:53