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

Expo构建的React Native APK安装到安卓真机后点击按钮崩溃求助

Expo构建APK触发导航操作时崩溃(Expo Go运行正常)

问题背景

使用Expo开发React Native应用,通过本地服务器搭配Expo Go在iOS和安卓设备上运行均正常。按官方流程构建APK供团队测试,APK可正常安装,但点击任何触发navigate操作的按钮时应用立即崩溃。已将所有TouchableOpacity替换为Pressable,排除按钮组件问题,怀疑崩溃源于导航系统。

项目依赖如下:

"dependencies": {
    "@react-native-async-storage/async-storage": "^1.17.11",
    "@react-navigation/native": "^6.1.1",
    "@react-navigation/native-stack": "^6.9.6",
    "@reduxjs/toolkit": "^1.9.1",
    "@rneui/base": "^4.0.0-rc.7",
    "@rneui/themed": "^4.0.0-rc.7",
    "expo": "~47.0.13",
    "expo-camera": "~13.1.0",
    "expo-file-system": "~15.1.1",
    "expo-location": "~15.0.1",
    "expo-mail-composer": "~12.0.0",
    "expo-media-library": "~15.0.0",
    "expo-status-bar": "~1.4.2",
    "jszip": "^3.10.1",
    "react": "18.1.0",
    "react-native": "0.70.5",
    "react-native-safe-area-context": "4.4.1",
    "react-native-screens": "~3.18.0",
    "react-native-uuid": "^2.0.1",
    "react-navigation": "^4.4.4",
    "react-navigation-stack": "^2.10.4",
    "react-redux": "^8.0.5",
    "redux": "^4.2.0",
    "redux-persist": "^6.0.0"
}

问题分析与解决方案

1. 导航库版本冲突(核心问题)

你的依赖中同时存在React Navigation v6(@react-navigation/native、@react-navigation/native-stack)和React Navigation v4(react-navigation、react-navigation-stack),两个版本的导航库API完全不兼容,在生产构建时会导致代码冲突,触发崩溃。Expo Go运行时可能因缓存或开发环境的兼容处理掩盖了这个问题,但打包APK后冲突会直接暴露。

解决步骤:

  • 卸载v4版本的导航库:
    npm uninstall react-navigation react-navigation-stack
    # 或 yarn remove react-navigation react-navigation-stack
    
  • 检查项目中所有导航相关代码,确保完全使用v6的API(比如NavigationContainer、createNativeStackNavigator等,而非v4的createStackNavigator、AppContainer)

2. 导航参数序列化问题

生产构建中,若navigate时传递了无法序列化的参数(比如函数、循环引用对象),会导致应用崩溃。

排查与解决:

  • 检查所有navigation.navigate调用,确保传递的参数都是可JSON序列化的(如字符串、数字、普通对象),避免传递函数或复杂实例
  • 若必须传递复杂数据,可改用Redux、AsyncStorage等全局状态管理方案存储,再在目标页面读取

3. 查看崩溃日志定位具体原因

通过安卓设备的日志可以获取更精准的崩溃信息:

  • 连接设备到电脑,执行命令:
    adb logcat *:E
    
  • 触发崩溃后,查看日志中的错误栈,定位具体的崩溃代码位置

4. 清除缓存后重新构建

执行以下命令清除Expo和项目缓存,再重新构建APK:

expo r -c
eas build --platform android --profile preview

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:07