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