Как получать понятные отчеты о сбоях на панели управления Crashlytics (Android)

Выберите платформу: iOS+ Android Flutter Unity


Плагин Gradle Crashlytics может автоматически определять, когда вы обфусцируете код. Когда сборка создает файл сопоставления, плагин загружает его, чтобы серверы 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
    }
  }
}
}