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