Expo升级至SDK46后Android端启动无报错直接崩溃
Expo SDK 40升级至46后Android启动崩溃(加载Home.js后无报错崩溃)
排查与修复步骤
1. 校验依赖兼容性
- 确保
package.json核心版本匹配:Expo 46对应React Native 0.69.x、React 18.0.0,版本不匹配直接升级 - 运行
npx expo doctor,自动扫描依赖冲突,按提示修复(比如替换过时库、升级不兼容的第三方包) - 重点排查第三方原生库:老版本的
react-native-*类库可能不兼容RN 0.69,优先替换为Expo官方内置模块(如用expo-camera替代第三方相机库)
2. 清理缓存重置环境
- 执行
npx expo r -c彻底清除Metro缓存、原生构建缓存 - 若为ejected项目,进入
android目录运行./gradlew clean清理Android构建缓存,再重新启动项目
3. 捕获Native层崩溃日志
- 用Android Studio打开项目
android目录,启动Logcat,筛选应用包名,日志级别设为Error,查看崩溃瞬间的Native栈信息(JS层日志看不到的崩溃原因通常在这里) - 用adb命令抓错误日志:
adb logcat *:E,启动应用后观察输出,能捕获JNI错误、类找不到、权限异常等Native层问题
4. 逐步排查页面代码
- 先注释Home.js中所有非基础渲染代码(比如
useEffect异步操作、第三方组件、复杂状态逻辑),只保留最简UI,验证是否还崩溃 - 逐步恢复代码片段,每恢复一部分就重新运行,定位到触发崩溃的具体代码块
- 检查废弃API:Expo 40到46废弃了大量API,比如
Expo.LocalStorage需换成AsyncStorage,expo-permissions已整合到对应功能模块(如expo-image-picker自带权限申请)
5. 迁移验证定位问题
- 创建全新Expo 46空白项目:
npx create-expo-app@46 --template blank - 逐步迁移原项目的代码、依赖,先迁移Home.js基础代码,确认正常后再添加其他组件、依赖,以此区分是代码问题还是依赖/配置问题
内容的提问来源于stack exchange,提问作者remyremy
相关产品推荐
相关产品推荐

