如何将映射文件上传到 Firebase Crashlytics?

Posted

技术标签:

【中文标题】如何将映射文件上传到 Firebase Crashlytics?【英文标题】:How to upload a mapping file to Firebase Crashlytics? 【发布时间】:2018-04-27 03:56:34 【问题描述】:

在旧的崩溃报告中 - 有一种简单的上传方式。我在 Crashlytics 部分没有找到它

【问题讨论】:

【参考方案1】:

更新: Firebase 更新他们的文档:see here

不再需要手动上传映射文件。

1 - 要保留 Crashlytics 可读崩溃报告所需的信息,请将以下行添加到您的配置文件中:

-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception

2 - 要让 Crashlytics 自动上传 ProGuard 或 DexGuard 映射文件,请从配置文件 (app/proguard-rules.pro) 中删除此行:

-printmapping mapping.txt

要使用 ProGuard 更快地构建,请排除 Crashlytics。 添加 以下行添加到您的配置文件中:

-keep class com.crashlytics.**  *; 
-dontwarn com.crashlytics.**

【讨论】:

其实你不应该使用 -keep class com.crashlytics.** ; -dontwarn com.crashlytics.* 每firebase.google.com/docs/crashlytics/get-deobfuscated-reports -printmapping mapping.txt 应该从哪个配置文件中删除? @q126y -printmapping <filename> 可以在app/proguard-rules.pro找到 这不好。 Google Play 让我上传映射。我不会在生产代码中使用 -keep linenumbers 等。 如何在 Firebase Crashlytics 和 Play 管理中心上传映射文件?如果我删除 -printmapping mapping.txt 以将其自动上传到 Firebase,则不会生成该文件,并且我无法在 Play 管理中心手动上传。【参考方案2】:

来自 Firebase 的 Mike 在这里。 Firebase 中的 Crashlytics 不提供在构建流程之外上传映射文件的方法。我个人很好奇,你经常使用手动上传吗?

【讨论】:

Tnx 迈克。是的,我经常使用它 @MikeBonnell,当它不能按预期工作时,要理解出了什么问题要困难得多。由于没有任何迹象表明映射已上传-您不知道一切是否正常-您需要首先获得崩溃/异常来检查它。自己掌握一些控制权并在需要时能够修复它总是更好。 谢谢,我将与团队讨论如何更轻松地查看显示上传是否成功的构建工具日志。 @MikeBonnell +1 关于更好地了解 Crashlytics 在这里所做的事情,它应该可以正常工作,但是当它不起作用时,我们中的许多人完全被难住了。关于 mapping.txt 文件的问题,文档说要删除 -printmapping mapping.txt 以便不会生成该文件并且 Crashlytics 可以做它的事情。我的 pro 文件中从未有过该行,但仍然会生成 mapping.txt,而且我从未见过经过去混淆处理的崩溃报告。对这个怪癖有什么见解吗?干杯 @MikeBonnell 如果有可读的崩溃报告就好了,就像我们以前在旧的 Firebase 崩溃报告系统上一样。你知道,让调试成为可能,等等。【参考方案3】:

如果您已按照指示启用自动上传,然后构建应用程序,您仍然会看到在 Firebase 中混淆的堆栈跟踪,您应该检查日志文件:

在 Linux / Windows 上: /.crashlytics/com.crashlytics.tools/crashlytics.log 在 Mac 上: ~/Library/Caches/com.crashlytics/com.crashlytics.tools/crashlytics.log

查找最新条目:Uploading deobfuscation file

并尝试查找操作的结果,例如:Deobfuscation file(s) uploadedCrashlytics had a problem uploading the deobs file,您将获得有关原因的一些提示。

【讨论】:

我无法理解。如果每次构建时自动上传,那么映射会有所不同,对吧? (例如,在发布应用程序后,我再次更改了代码,以便我上传的新映射可以与以前的生产代码一起使用?) 看起来每个构建都有一个唯一的 id,用于将代码与混淆文件匹配。我在 .meta 文件中找到了该 ID。 知道如何在 CI 上检查这些日志吗?尤其是 CIrcleCI。 我以为我认出了那个用户名,多么随机! (我发誓我没有跟踪你@mbwasi!?)我只是在调试一个来自 Bitrise 部署的带有模糊跟踪的日志,并在 GH 上发现了一个问题。它似乎是在 SDK 创建的任务 :uploadCrashlyticsMappingFileRelease 失败时发生的,因此您可以在日志中查找它以确认它是否适用于 CI。目前,手动上传文件似乎是 Firebase Crashlytics 中缺少的功能,因为它在本周仍处于打开状态:? github.com/firebase/firebase-android-sdk/issues/…【参考方案4】:

在您的应用级 build.gradle 文件中将 firebaseCrashlytics.enableMappingFileUpload Gradle 扩展属性设置为 true。

// To enable Crashlytics mapping file upload for specific product flavors:
  flavorDimensions "environment"
  productFlavors 
    staging 
      dimension "environment"
      ...
      firebaseCrashlytics 
        mappingFileUploadEnabled false
      
    
    prod 
      dimension "environment"
      ...
      firebaseCrashlytics 
        mappingFileUploadEnabled true
      
    
  

更多详情请访问Click here

【讨论】:

以上是关于如何将映射文件上传到 Firebase Crashlytics?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个文件上传到 Firebase?

Flutter:如何将pdf文件上传到firebase存储?

如何将音频(3gp)文件上传到 Firebase 存储?

如何按选择的顺序将多个文件上传到 Firebase 存储?

iOS Crash上传

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?