Как получать понятные отчеты о сбоях на панели управления 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
    }
  }
}
}