Плагин Crashlytics Gradle автоматически определяет обфусцированность кода. Когда ваша сборка генерирует файл сопоставления, плагин загружает его, чтобы серверы 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, чтобы получить консультацию эксперта.
Сохраняйте запутанные варианты сборки
Чтобы плагин Gradle Crashlytics не загружал файл сопоставления для вариантов, использующих обфускацию, установите свойство расширения Gradle firebaseCrashlytics.mappingFileUploadEnabled
в значение false
в файле Gradle вашего модуля (уровня приложения) (обычно <project>/<app-module>/build.gradle.kts
или <project>/<app-module>/build.gradle
). Это может помочь ускорить сборку обфусцированных сборок, но учтите, что полученные трассировки стека будут отображаться обфусцированными на странице Crashlytics в консоли Firebase .
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 } } } }