当您对代码进行混淆处理时,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 } } } }