Android端com.facebook.react.common.JavascriptException崩溃排查求助
Android生产环境崩溃排查思路(Expo SDK 49 + React Native 0.72.5)
问题描述
项目基于Expo SDK 49和React Native 0.72.5,近期收到大量Android设备崩溃报告。问题出在实现watchPositionAsync定位监听及后台任务刷新token之后:本地运行完全正常,但生产环境频繁崩溃;已配置Sentry但未捕获该崩溃,本地也无法复现。
崩溃日志
Exception com.facebook.react.common.JavascriptException: at com.facebook.react.modules.core.ExceptionsManagerModule.reportException (ExceptionsManagerModule.java:65) at java.lang.reflect.Method.invoke at com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372) at com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:188) at com.facebook.jni.NativeRunnable.run at android.os.Handler.handleCallback (Handler.java:938) at android.os.Handler.dispatchMessage (Handler.java:99) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27) at android.os.Looper.loop (Looper.java:223) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:228) at java.lang.Thread.run (Thread.java:923)
排查思路
1. 补全JS层异常详情
当前日志仅显示Java层的异常转发,缺失具体JS错误信息:
- 查看Expo生产环境日志服务,提取遗漏的JS异常内容
- 在App入口添加全局错误捕获(如
ErrorUtils.setGlobalHandler),将watchPositionAsync和后台任务的异常手动上报至日志服务
2. 排查后台任务与定位逻辑的冲突
- 检查后台任务是否调用了UI线程专属API,或定位回调在组件卸载后仍尝试更新状态
- 验证后台任务唤醒时机与定位监听生命周期是否冲突,比如后台任务启动时定位监听未初始化或已销毁
3. 针对Android环境做兼容性验证
- 在低版本Android设备(如Android 10及以下)复现,排查系统版本差异导致的权限、后台行为问题
- 检查定位权限动态申请逻辑,确认用户拒绝权限后是否有异常处理,避免
watchPositionAsync抛出未捕获错误 - 核对
app.json中后台任务的权限声明,确保生产包配置与本地一致
4. 修复Sentry未捕获异常问题
- 确认Sentry初始化时机,确保覆盖App启动及后台任务执行上下文
- 检查
Sentry.init配置是否开启Native层捕获,避免JS层异常遗漏 - 尝试在
ExceptionsManagerModule的异常上报处添加自定义日志,强制收集错误信息
5. 模拟生产打包环境测试
- 使用
eas build生成测试包,在真实设备上安装验证(而非Expo Go环境),排查打包混淆、优化导致的问题 - 检查代码混淆规则,排除定位、后台任务相关代码,避免混淆引发方法调用异常
内容的提问来源于stack exchange,提问作者Suki Phan
相关产品推荐
相关产品推荐

