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

62

在旧的故障报告中,有一种简单的上传方式。但我在Crashlytics部分中没有找到它。

5个回答

49

更新: Firebase已更新其文档:请参见此处

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

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.**

3
实际上,您不应该使用-keep class com.crashlytics.** { *; } -dontwarn com.crashlytics.**,请参考https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports。 - easycheese
26
“-printmapping mapping.txt”应该从哪个配置文件中删除? - q126y
7
这不好。Google Play允许我上传映射文件。但是我不会在生产代码中使用-keep linenumbers等。 - SteelBytes
3
我该如何在 Firebase Crashlytics 和 Play Console 上同时上传映射文件呢?如果我删除“-printmapping mapping.txt”以便自动在 Firebase 上上传,那么该文件将不会生成,我也无法手动在 Play Console 上上传。 - manfcas
1
“-keepattributes SourceFile” 这个选项不会破坏混淆的目的吗? - Benjamin Bisinger
显示剩余9条评论

29

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


14
谢谢Mike。是的,我经常使用它。 - itzhar
43
@MikeBonnell,当它不如预期地运行时,很难理解出错的原因。因为没有任何指示表明映射已经上传 - 你不知道是否一切正常 - 你需要获取第一个崩溃/异常来检查它。 在需要时,拥有一定的控制和修复能力总是更好的。 - Michael Sotnikov
5
谢谢,我会与团队交流,讨论如何更轻松地查看构建工具日志,以确定上传是否成功。 - Mike Bonnell
15
@MikeBonnell 能否提供更好的Crashlytics操作可见性,它应该是自动工作的,但当它无法正常工作时,我们很多人都完全被难住了。有关mapping.txt文件的问题,文档中说要删除“-printmapping mapping.txt”,以便不生成该文件并使Crashlytics能够正常工作。我从未在我的pro文件中添加过该行,但仍会生成mapping.txt文件,我也从未看到解混淆后的崩溃报告。对于这个问题有什么见解吗?谢谢。 - darnmason
7
@MikeBonnell,希望我们能像之前在旧版 Firebase 崩溃报告系统上那样,拥有易读的崩溃报告。这样做可以使调试变得更加容易和高效等等。请注意,需要保持原意,不要解释或添加其他内容。 - user3690202
显示剩余28条评论

8
如果您按照指示启用了自动上传并构建了应用程序,但在Firebase中仍然看到混淆的堆栈跟踪,请检查日志文件:
在Linux / Windows上: /.crashlytics/com.crashlytics.tools/crashlytics.log 在Mac上: ~/Library/Caches/com.crashlytics/com.crashlytics.tools/crashlytics.log
查找具有以下内容的最新条目:上传反混淆文件
尝试查找操作结果,例如:已上传反混淆文件或Crashlytics上传deobs文件时出现问题,并且您将获得有关原因的一些提示。

1
我无法理解那个。如果每次构建时自动上传,那么映射会不同,对吧?(例如,在发布应用程序后,我再次更改代码,因此我的新上传的映射将与之前的生产代码一起使用?) - FindOutIslamNow
似乎每个构建都有一个唯一的ID,用于将代码与混淆文件匹配。我在.meta文件中找到了该ID。 - Juan Franco
1
有没有想法如何在CI上检查这些日志?特别是在CircleCI上。 - mbwasi
我觉得我认出那个用户名了,多巧啊!(发誓我不是在跟踪你 @mbwasi!)我只是在调试一个带有混淆跟踪日志的 Bitrise 部署时,在 GH 上发现了一个问题。它似乎发生在 SDK 创建的任务 :uploadCrashlyticsMappingFileRelease 失败时,所以您可以在日志中查找该任务以确认是否在 CI 上运行。手动上传文件似乎是 Firebase Crashlytics 目前缺少的功能,因为本周它仍然保持开放状态: https://github.com/firebase/firebase-android-sdk/issues/2004#issuecomment-1031589835 - MattMatt

2

在您的应用级别的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
      }
    }
  }

更多详情请访问此处

。该链接涉及到IT技术相关内容,可帮助您获取解密报告。


这个解决方案没有起作用。 - Rakesh R

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接