在 Crashlytics 信息中心内获取易于理解的崩溃报告


默认情况下,Firebase Crashlytics 会自动对您的 Flutter 项目进行插桩测试,以上传必要的符号文件,确保崩溃报告经过去混淆处理,方便用户阅读。

遗憾的是,存在一些可能导致项目未得到完全配置的情况。本指南概述了自动化执行的操作,并提供了调试项目设置的前期步骤。

Apple 平台

检查用于上传 dSYM 文件的配置

添加 Crashlytics Flutter 插件并运行 flutterfire configure 命令时,系统将尝试向项目的 Xcode 工作区添加运行脚本 (run script),该脚本会查找必要的 dSYM 符号文件并将其上传到 Crashlytics。如果没有这些文件,Crashlytics 信息中心会显示“dSYM 缺失”提醒。在上传缺失文件之前,后端将保留异常。

如果您遇到此问题,请先确保已安装了运行脚本:

  1. 在项目的 iOS 目录 (FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace) 中找到并打开 Xcode 工作区文件。

  2. 确定名为 [firebase_crashlytics] Crashlytics Upload Symbols 的运行脚本是否已添加到 Runner 目标的构建阶段。

    请参阅下文相应部分,了解运行脚本不存在以及运行脚本存在的情况分别对应的处理方式。

检查 Flutter 和 Crashlytics 的版本配置(如果使用 --split-debug-info 标志)

如果您的 Flutter 项目使用 --split-debug-info 标志(或者视需要使用 --obfuscate 标志),则需要执行额外的步骤来显示应用的可读堆栈轨迹。

确保您的项目使用的是推荐的版本配置(Flutter 3.12.0 及更高版本和 Crashlytics Flutter 插件 3.3.4 及更高版本),以便您的项目可以自动生成 Flutter 符号(dSYM 文件)并将其上传到 Crashlytics

Android

检查依赖项配置

flutterfire configure 命令尝试向项目的 Gradle build 文件添加必要的依赖项。如果没有这些依赖项且启用了混淆功能,Firebase 控制台中的崩溃报告可能会经过混淆处理。

确保项目级 build.gradle 和应用级 build.gradle 中存在以下几行内容:

  • 项目级 build 文件 (android/build.gradle) 中,检查是否有以下一行内容:

    dependencies {
    // ... other dependencies
    
    classpath 'com.google.gms:google-services:4.3.5'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
  • 应用级 build 文件 (android/app/build.gradle) 中,检查是否有以下一行内容:

    // ... other imports
    
    android {
    // ... your android config
    }
    
    dependencies {
    // ... your dependencies
    }
    
    // This section must appear at the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.google.firebase.crashlytics'

检查您是否在使用 CLI 上传 Flutter 符号(如果使用 --split-debug-info 标志)

如果您的 Flutter 项目使用 --split-debug-info 标志(或者视需要使用 --obfuscate 标志),则需要执行额外的步骤来显示应用的可读堆栈轨迹。

使用 Firebase CLI (v.11.9.0+) 上传 Flutter 调试符号。在报告经过混淆处理的代码 build 的崩溃之前,您需要先上传调试符号。

从 Flutter 项目的根目录运行以下命令:

firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
  • FIREBASE_APP_ID:您的 Firebase Android 应用 ID(而不是您的软件包名称)
    示例 Firebase Android 应用 ID:1:567383003300:android:17104a2ced0c9b9b

  • PATH/TO/symbols:您在构建应用时传递给 --split-debug-info 标志的同一目录

如果问题仍然存在,请参阅混淆报告问题排查指南 (Android)