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

React Native应用Android 13生产环境崩溃,Android 11正常求解决

问题描述

我开发了一个React Native应用,用Expo App测试时运行正常,但打包生产版本后,在我的Android 13设备上仅能成功打开一次,后续多次尝试打开时频繁崩溃;发给使用Android 11的朋友后,应用运行完全正常。我推测问题出在某个依赖包上。

已经参考Stack Overflow相关帖子,尝试更换部分依赖包并在app.json中添加配置,但问题仍未解决。

app.json 配置

{
  "expo": {
    "name": "Finder",
    "slug": "finder",
    "version": "2.3.1",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "apple.spoonfinder.ml"
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#FFFFFF"
      },
      "package": "com.im_the_tea_drinker.spoon_finder"
    },
    "web": {
      "favicon": "./assets/icon.png"
    },
    "extra": {
      "eas": {
        "projectId": "2f14cfae-f990-4aab-9d8e-ca06ea8bec1d"
      }
    }
  }
}

当前依赖包

{
  "name": "finder",
  "version": "1.0.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web"
  },
  "dependencies": {
    "expo": "~47.0.8",
    "expo-cli": "^6.0.8",
    "expo-location": "~15.0.1",
    "expo-permissions": "~14.0.0",
    "expo-sensors": "~12.0.1",
    "expo-status-bar": "~1.4.2",
    "geolib": "^3.3.3",
    "react": "18.1.0",
    "react-dom": "18.1.0",
    "react-native": "0.70.5"
  },
  "devDependencies": {
    "@babel/core": "^7.19.3"
  },
  "private": true
}
排查与解决方向

针对Android 13独有的崩溃问题,结合你的配置给出以下具体方案:

1. 修复权限适配问题

Android 13对位置权限做了严格划分,expo-permissions已被废弃,旧版本在Android 13下易触发权限冲突:

  • 移除expo-permissions依赖,直接使用expo-location自带的权限请求方法,比如requestForegroundPermissionsAsync、requestBackgroundPermissionsAsync。
  • 在app.json的android字段中补充Android 13所需权限声明:
"android": {
  // ...原有配置
  "permissions": [
    "ACCESS_COARSE_LOCATION",
    "ACCESS_FINE_LOCATION",
    "POST_NOTIFICATIONS" // 若使用后台定位,必须添加该权限
  ]
}

2. 升级Expo版本提升兼容性

Expo 47对Android 13的支持存在部分缺陷,建议升级到Expo 48或更高版本:

  • 执行命令expo upgrade 48,按提示同步更新所有关联依赖。
  • 升级完成后重新构建生产版本包。

3. 检查传感器监听的资源泄漏

Android 13对后台资源限制更严格,expo-sensors若未正确取消监听会导致内存泄漏:

  • 确保组件卸载时停止所有传感器监听,示例代码:
import { Accelerometer } from 'expo-sensors';

useEffect(() => {
  const subscription = Accelerometer.addListener(accelerometerData => {
    // 处理传感器数据
  });

  return () => {
    subscription.remove(); // 组件卸载时移除监听
  };
}, []);

4. 通过崩溃日志精准定位

以上为推测方案,最准确的方式是获取设备崩溃日志:

  • 连接Android设备到电脑,执行命令adb logcat *:E,触发应用崩溃后查看输出的错误栈信息,直接定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:15:40