Firebase crashlytics 不显示崩溃

Mee*_*dar 7 android firebase crashlytics crashlytics-android

想要在应用程序崩溃后从 firebase 获取崩溃报告。是否有可能在 firebase 崩溃中将调试模式日志和生产崩溃日志分开?...因为当我们从生产或调试测试中崩溃时,它并不是很清楚。此外,发生崩溃后,firebase 不会在控制台上反映崩溃报告。我应该怎么做才能获得最新的崩溃报告?除了 firebase 之外,还有其他方法可以获得崩溃报告吗?我已经更新了 firebase crashlytics 所需的库。并遵循教程 - https://firebase.google.com/docs/crashlytics/get-started#android

Den*_*und 7

是否可以在 firebase 崩溃中将调试模式日志和生产崩溃日志分开?

这是常见的做法,甚至可能建议您为测试和生产创建一个单独的项目。下载并放置google-services.json在您的构建风格文件夹中

  • ~/app/src/release/google-services.json
  • ~/app/src/debug/google-services.json

即使您只有一个用于测试和生产的 Firebase 项目,如果您为开发构建风格设置项目 ID 后缀,您也可以通过应用程序 ID 过滤日志:

~/app/build.gradle

buildTypes {
  release {
  }
  debug {
    applicationIdSuffix '.debug'
    versionNameSuffix '-dbg'
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到 Crashlytics 中提供的不同风格

在此处输入图片说明

此外,发生崩溃后,firebase 不会在控制台上反映崩溃报告。

第一次设置 crashlytics 时,数据显示在仪表板中可能需要一些时间。但是,如果超过 24 小时,则可能是设置不正确。尝试明确触发崩溃以确保其正常工作。

Button crashButton = new Button(this);
crashButton.setText("Crash!");
crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Crashlytics.getInstance().crash(); // Force a crash
    }
});
Run Code Online (Sandbox Code Playgroud)

除了 firebase 之外,还有其他方法可以获得崩溃报告吗?

是的,如果需要,您可以拥有多个崩溃报告工具。您或许可以为崩溃报告创建一个包装类,您可以在其中抽象对 Crashlytics 的调用,并且可以在那里添加或更改底层报告平台。


COR*_*ian 5

升级SDK

进行迁移到新SDK的相关设置后,重要的是要避免以下错误:

尝试在崩溃时发送崩溃报告。

这可能是由于在 FirebaseCrashlytics 发送报告之前强制崩溃(在我的情况下没有按钮侦听),即Crashlytics 报告端点上传完成


测试实施

启用 Crashlytics 调试日志记录

$ adb devices 
$ adb shell setprop log.tag.FirebaseCrashlytics DEBUG
$ adb logcat -s FirebaseCrashlytics
Run Code Online (Sandbox Code Playgroud)

1)第一步:不要强制崩溃并运行应用程序。观察 Crashlyticis logcat 中它是如何正确初始化的。

...
FirebaseCrashlytics: Update app request ID: 1d62cb...
FirebaseCrashlytics: Result was 204.
Crashlytics Reports Endpoint upload complete
Run Code Online (Sandbox Code Playgroud)

2)第二步:强制崩溃(使用按钮或直接)。

主活动.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setupCrashlytics()

    ...
 }

 private fun setupCrashlytics() {
     throw RuntimeException("Test crash")  //TODO: Clean
 }
Run Code Online (Sandbox Code Playgroud)

注意:除了依赖项之外,生成报告唯一需要的就是这个代码。此外,您可以使用FirebaseCrashlytics.getInstance().

然后运行应用程序并检查以下内容:

FirebaseCrashlytics: Crashlytics completed exception processing. Invoking default exception handler.
FirebaseCrashlytics: Attempting to send crash report at time of crash...
Run Code Online (Sandbox Code Playgroud)

此时异常进程记录在Firebase服务器上但是报告还没有发送到控制台,即上传不完整。

3)最后,我们清理或评论崩溃崩溃

private fun setupCrashlytics() {
     //throw RuntimeException("Test crash")
}
Run Code Online (Sandbox Code Playgroud)

运行应用程序,让我们检查:

Attempting to send 1 report(s)
FirebaseCrashlytics: Settings result was: 200
FirebaseCrashlytics: Adding single file 5EDA9D7....cls to report 5EDA9D7...
FirebaseCrashlytics: Sending report to: https://reports.crashlytics.com/spi/v1/platforms/android/apps/.../reports
FirebaseCrashlytics: Crashlytics Reports Endpoint upload complete: 5EDABB42 ...
Run Code Online (Sandbox Code Playgroud)

这保证了报告到达控制台。

GL