【问题标题】:Crashlytics not uploading mapping fileCrashlytics 未上传映射文件
【发布时间】:2018-11-21 21:34:03
【问题描述】:

我可以在 Crashlytics 中看到发布版本的崩溃,但它们仍然被混淆了。我正在使用:

implementation "com.google.firebase:firebase-core:16.0.5"
implementation "com.google.android.gms:play-services-base:16.0.1"
implementation "com.crashlytics.sdk.android:crashlytics:2.9.6"

和(项目级别)

    classpath 'com.android.tools.build:gradle:3.2.1'
    classpath 'com.google.gms:google-services:4.2.0'
    classpath 'io.fabric.tools:gradle:1.26.1' // Crashlytics plugin
    classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"

我已按照https://firebase.google.com/docs/crashlytics/get-deobfuscated-report 的说明进行操作,特别是我已从config.txt 中删除了-printmapping <path>/mapping.txt

当我查看 Crashlytics 日志时,我没有看到映射文件的上传。

当我为我的项目的早期版本运行发布构建时,使用:

implementation "com.google.firebase:firebase-core:11.8.0"
implementation "com.google.android.gms:play-services-base:11.8.0"
implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
    transitive = true
}

和(项目级别)

    classpath 'com.android.tools.build:gradle:3.1.3'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'io.fabric.tools:gradle:1.24.4'

然后我在 crashlytics.log 中看到未混淆的堆栈跟踪和映射上传消息:

2018-11-21 10:52:22.573 [DEBUG] (Daemon worker) com.crashlytics  - Deobfuscation file(s) uploaded.

任何想法有什么问题吗?我在 Crashlytics 日志中没有看到任何与最近(不工作)版本的映射文件相关的日志,并且我没有看到在 gradle 输出中运行的 gradle 上传任务,而对于旧(工作)版本,我看到以下:

:app:crashlyticsUploadDeobsRelease (Thread[Daemon worker Thread 2,5,main]) completed. Took 1.28 secs.

【问题讨论】:

    标签: android crashlytics crashlytics-android


    【解决方案1】:

    啊。好吧,有一个简单的修复,可惜我花了这么长时间才找到它。我总是(直到现在)使用./gradlew iR./gradlew installRelease 的快捷方式)构建并在本地安装发布版本。我尝试(经过很长时间)从 Android Studio 构建(Build > Generate Signed Bundle / Apk)。一旦我这样做了,它就起作用了。

    如果我发现基于非 AS 的发布适用于 Crashlytics,我会在此处更新。同时,如果您遇到问题,请查看示例https://github.com/firebase/quickstart-android/tree/master/crash。 您可以接受它,放入您自己的 google-services.json 并按上述方式发布,然后检查 crashlytics.log(见上文)。

    【讨论】:

    • 更新:我现在从 Crashlytics 切换到 Sentry 以进行崩溃报告。它具有更多功能、更好的报告界面,并且与 Crashlytics 不同,您可以从纯 Java 库依赖项中记录/报告
    【解决方案2】:

    你在这里读过:https://docs.fabric.io/android/crashlytics/dex-and-proguard.html 吗?

    我在我的 proguard-rules.pro 文件(在您的应用文件夹内)中使用这些行来获取去混淆的崩溃报告

    -keepattributes *Annotation*
    -keepattributes SourceFile,LineNumberTable
    # prevent Crashlytics obfuscation
    -keep class com.crashlytics.** { *; }
    -dontwarn com.crashlytics.**
    

    并且确保在你的 proguard 文件中有这一行

    -printmapping mapping.txt
    

    【讨论】:

    • 谢谢,是的,我在proguard-rules.pro 中有这些行,但我没有(实际上从未有过)-printmapping mapping.txt。我确实有一个挥之不去的 config.txt 文件(来自早期的 vn?),它有它,我删除了,没有效果。现在我删除了config.txt。我很想看看其他人是否在他们的 crashlytics 日志中看到 Deobfuscation file(s) uploaded.....
    • 您在哪里初始化 Crashlytics?在自定义 Application 类中?
    • 是的(但认为现在不需要)。 Crashlytics 正在发送堆栈跟踪。问题是堆栈跟踪被混淆了。如果您在 crashlytics 日志中搜索 uploaded,您应该会看到上传记录。那是我没有发生的事情。有道理?在 Linux / Windows 上:~/.crashlytics/com.crashlytics.tools/crashlytics.log 在 Mac 上:~/Library/Caches/com.crashlytics/com.crashlytics.tools/crashlytics.log
    【解决方案3】:

    确保您的网络上没有任何东西阻止 Crashlytics 的主机。例如 PiHole。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2018-04-27
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多