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

当您对代码进行混淆处理时,Crashlytics Gradle 插件可以自动检测到这种情况。在您的 build 生成映射文件时,该插件会上传生成的文件,以便 Crashlytics 服务器使用映射文件将应用的堆栈轨迹呈现为经过去混淆处理、便于用户理解的代码。

使用 R8、ProGuard 和 DexGuard 时所需的配置

Crashlytics 可以使用任何兼容 ProGuard 的映射文件进行去混淆处理,而且已针对 ProGuard、R8 和 DexGuard 进行过测试。

如果您的应用将开启了混淆功能的 R8 与 Android Gradle 4.2.0 及更高版本结合使用,Crashlytics 就会生成简明易懂的崩溃报告。请注意,Crashlytics 最近提升了对同时使用 Kotlin 和 R8 的应用的支持体验,这可能导致出现一些意外的问题标签

如果您的应用使用 ProGuard 配置文件,您需要保留 Crashlytics 所需的信息,以生成简明易懂的崩溃报告。为此,您可以将以下行添加到 ProGuard 或 DexGuard 配置文件:

-keepattributes SourceFile,LineNumberTable        # Keep file names and line numbers.
-keep public class * extends java.lang.Exception  # Optional: Keep custom exceptions.

如有关于 DexGuard 的问题或疑问需要帮助,请直接与 GuardSquare 支持团队联系。如需 ProGuard 方面的帮助,请访问 GuardSquare 社区论坛,向专家寻求帮助。

保留经过混淆处理的 build 变体

如需阻止 Crashlytics Gradle 插件为使用混淆处理的变体上传映射文件,请在模块(应用级)Gradle 文件(通常是 <project>/<app-module>/build.gradle.kts<project>/<app-module>/build.gradle)中将 firebaseCrashlytics.mappingFileUploadEnabled Gradle 扩展程序属性设置为 false。这有助于缩短经过混淆处理的 build 的构建时间,但请注意,所得到的堆栈轨迹将在 Firebase 控制台的 Crashlytics 页面中以经过混淆处理的方式显示。

Kotlin

import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension

// ...

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  getByName("debug") {
    minifyEnabled = true
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
}

...

// To enable Crashlytics mapping file upload for specific product flavors:
flavorDimensions += "environment"
productFlavors {
  create("staging") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = false
    }
  }
  create("prod") {
    dimension = "environment"
    ...
    configure<CrashlyticsExtension> {
      mappingFileUploadEnabled = true
    }
  }
}
}

Groovy

android {

// To enable Crashlytics mapping file upload for specific build types:
buildTypes {
  debug {
    minifyEnabled true
    firebaseCrashlytics {
      mappingFileUploadEnabled false
    }
  }
}

...

// 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
    }
  }
}
}