如何定位Firebase Crashlytics捕获的React Native线上崩溃问题
React Native Firebase Crashlytics 生产崩溃定位操作指南
你当前遇到的崩溃栈无具体源码位置问题,核心原因是符号文件未正确上传导致崩溃栈未符号化,参考以下步骤操作即可定位到具体文件和代码行:
你捕获到的未解析崩溃示例:
第一步:先区分崩溃类型
- 若崩溃栈里出现
js engine、react相关的无意义行号,属于JS层崩溃,需要上传JS Bundle对应的Sourcemap文件解析 - 若崩溃栈里出现
libart.so、libc.so、原生类名/方法名被混淆成a/b/c类短名,属于原生层崩溃,Android需要上传mapping混淆文件,iOS需要上传dSYM符号文件解析
第二步:配置自动符号上传(后续发版无需手动操作)
Android端配置
- 检查项目级
build.gradle,确保已引入Crashlytics Gradle插件依赖 - 检查app模块
build.gradle,确保已apply Crashlytics插件,在release构建类型中开启mapping自动上传:
android { buildTypes { release { minifyEnabled true // 生产包开启混淆的场景必须配置 firebaseCrashlytics { mappingFileUploadEnabled true } } } }
- 检查
proguard-rules.pro,确保没有添加混淆Crashlytics相关类的规则,保持官方默认配置即可 - 后续打release包时,插件会自动把同次构建生成的
mapping.txt上传到Firebase后台,自动解析原生崩溃栈
iOS端配置
- 打开Xcode,进入项目的Build Phases页,添加New Run Script Phase,填入Crashlytics官方上传脚本:
"${PODS_ROOT}/FirebaseCrashlytics/run"
- 在脚本的Input Files配置项中,添加dSYM路径:
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME} - 如果构建时开启了Bitcode,需要在发版后从App Store Connect下载对应版本的dSYM文件手动上传,否则关闭Bitcode即可让构建阶段自动上传dSYM
JS层Sourcemap配置
- React Native打release包时会自动生成对应sourcemap,默认路径:
- Android:
android/app/build/generated/sourcemaps/react/release/index.android.bundle.map - iOS:
ios/build/main.jsbundle.map
- Android:
- 在CI/CD发版脚本中添加sourcemap上传逻辑,每次构建发版包后自动把对应版本的sourcemap上传到Crashlytics,即可自动解析JS层崩溃的源码位置
第三步:补传历史版本符号文件,回溯已有崩溃
针对已经上线的版本,找到对应版本构建时生成的符号文件,用Firebase CLI手动上传即可解析已有崩溃记录:
- Android上传mapping文件命令:
firebase crashlytics:mappingfile:upload --app=<你的Firebase平台Android应用ID> /path/to/对应版本mapping.txt - iOS上传dSYM文件命令:
firebase crashlytics:dsym:upload --app=<你的Firebase平台iOS应用ID> /path/to/对应版本dSYM文件夹 - JS层sourcemap上传参考Crashlytics官方JS SDK提供的上传方法,确保上传的sourcemap和线上包版本号、构建号完全匹配
注意事项
- 所有上传的符号文件必须和线上运行的APK/IPA是同一次构建产出的,版本号、构建号完全一致,否则会出现行号映射错位的问题
- 符号文件上传完成后,回到Crashlytics崩溃详情页刷新,即可看到解析完成的完整栈信息,直接显示崩溃所在的源码文件、具体行号
内容的提问来源于stack exchange,提问作者Joshi G
相关产品推荐
相关产品推荐

