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

React Native安卓端出现Unhandled promise rejection错误(E_MISSING_PERMISSION)

排查Android平台E_MISSING_PERMISSION错误的实用步骤

这种跨平台权限坑我之前踩过,别慌,咱们一步步拆解问题:

1. 先锁定核心问题:权限声明与动态申请

E_MISSING_PERMISSION的本质就是Android权限缺失,先从最基础的配置查起:

  • 打开android/app/src/main/AndroidManifest.xml,核对你用到的功能对应的权限有没有声明。比如用了相机、存储、定位的话,要加上这类代码:
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    
  • 划重点:Android 6.0(API 23)以上的危险权限,光在Manifest里声明没用,必须在代码里主动请求用户授权——别指望系统自动帮你处理。

2. 定位触发错误的源码位置

因为错误指向编译后的index.android.bundle,没法直接对应源码,试试这几个小技巧:

  • 给所有异步操作加捕获:在你调用原生模块、访问硬件的Promise链末尾加上.catch(err => console.error("权限错误追踪:", err)),打印完整错误栈,大概率能找到对应的源码文件和行号。
  • 开启调试模式追断点:用Chrome的chrome://inspect连接你的Android设备/模拟器,开启Source Map后,在Sources面板里找到你的源码,给Promise.reject或者权限相关API(比如requestPermissions)加断点,一步步追踪触发错误的逻辑。
  • 排查第三方依赖:如果用了图片选择、地图这类第三方SDK,它们可能自带权限需求但没处理好。可以暂时注释掉这些依赖的调用,看错误是否消失,逐步定位问题库。

3. 检查权限申请的时机逻辑

  • 一定要在调用需要权限的功能之前完成申请,比如别刚启动App就直接调相机,得先弹权限请求框,等用户同意后再执行逻辑。
  • 可以用权限管理库(比如react-native-permissions)来简化流程,它会自动处理不同Android版本的兼容,还能返回清晰的权限状态(已授权/拒绝/永久拒绝)。

4. 清理缓存重新打包试试

有时候是打包缓存搞的鬼,执行这两步:

  • 清理Android项目缓存:cd android && ./gradlew clean
  • 重新构建运行:npx react-native run-android --clean

如果还是卡壳,把完整的错误栈信息贴出来,或者说明你用到了哪些需要权限的功能,更容易精准定位~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:17:31