Получайте читаемые отчеты о сбоях на панели инструментов Crashlytics.


Плагин 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
    }
  }
}
}