Crashlytics 'stacktraces показывает имя файла как Неизвестный источник, в то время как Dexguard включен

У меня проблема с моими сообщениями о сбоях от Fabric Crashlytics, когда я включаю Dexguard в свой проект.

Я включил Dexguard в свой проект, и он работает очень хорошо. Затем я выполнил инструкции на этой странице и добавил упомянутые конфигурации, чтобы позволить файлу дефискурить мои стеки и показать соответствующие отчеты о сбоях. Здесь, как я применяю плагины ткани и dexguard в моем основном модуле build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'dexguard'
apply plugin: 'io.fabric'

И вот конфигурации в proguard-project.txt:

# Fabric
#############################################################################
-keepattributes *Annotation*,SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepresourcexmlelements manifest/application/[email protected]=io.fabric.ApiKey
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
#############################################################################

И вот как я использую proguard-project.txt в моей версии сборки:

buildTypes{
    debug{
        proguardFile getDefaultDexGuardFile('dexguard-debug-shrink.pro')
        proguardFile 'proguard-project.txt'
    }
    release{
        proguardFile getDefaultDexGuardFile('dexguard-release.pro')
        proguardFile 'proguard-project.txt'
        proguardFile 'dexguard-project.txt'
        if(new File("$projectDir/../local.properties").exists()){
            signingConfig signingConfigs.release
        }
    }
}

Но когда в сборке релизов встречается сбой, имя файла, в котором произошел сбой, отсутствует, но все остальное работает правильно, а stacktrace почти понятен. Вот пример отчета о сбое:

Unknown source file names

Как вы можете видеть в отчете о сбое, в стеке отсутствует только имя файла. Другие описания, такие как номера строк и имена методов, полностью в порядке.

Хотя я использую полные имена методов, такие как ir.X.ui.XMainActivity.throwSomething и номера строк перед Unknown Source, я могу заключить имя файла, в котором произошла ошибка, я бы хотел, чтобы мои стеки отображали файл имена и быть полностью описательными темами. Я пробовал много вариантов и много проб и ошибок, но проблема все еще существует.

Есть что-то, чего я не хватает? Как я могу решить эту проблему?

Я использую версию 8.1.0.7 Dexguard, версию 1.21.7 плагина Fabric и версию 2.9.0 библиотеки Crashlytics.

Я обновил плагин Fabric до версии 1.25.1 и библиотеки Crashlytics до версии 2.9.1 но проблема все еще существует.

Я обновил плагин Fabric до версии 1.25.2, установил версию инструментов до 27.0.3 и версию плагина gradle до 3.1.0 но проблема все еще существует.

Ответ 1

Вы можете предпринять следующие шаги для дефосфационных отчетов о сбоях. Как указано в документации по катастрофам firebase

1. Чтобы сохранить информацию Crashlytics для чтения отчетов о сбоях, добавьте следующие строки в файл конфигурации:

 -keepattributes *Annotation*
 -keepattributes SourceFile,LineNumberTable
 -keep public class * extends java.lang.Exception

2. Чтобы Crashlytics автоматически загружала файл сопоставления ProGuard или DexGuard, удалите эту строку из файла конфигурации:

 -printmapping mapping.txt

Ответ 2

Dexguard шифрует код и обфускает файлы и сообщает о сбоях

Согласно Вопросу, все правильно определено, что позволяет отчеты о сбоях, ничего не изменится. В моем сценарии проекта тоже то же самое, используя Dexguard With Fabric.

При интеграции Dexguard в Project Dexguard шифрует код и обфускает файлы и отчеты о сбоях для других библиотек.

Однако, если вы используете Google Firebase Crashlytics, вы также не сможете увидеть журнал в Firebase Console. Вы получите тот же отчет, который предоставил Fabric.

Эти Crashlytics предоставят отчеты о сбоях в Google Консоли. вы проверяете журнал сбоев в разделе ANR & Crashes в Android Vitals.

В этом разделе показаны все ANR и сбои, собранные с устройств Android, пользователи которых решили автоматически обмениваться данными об использовании и диагностике. Аномалии могут быть обнаружены только для не обфусканных стеков стека.

Google Объяснил этот раздел https://support.google.com/googleplay/android-developer/answer/6083203

Ответ 3

Следуйте приведенным ниже инструкциям, чтобы получить правильные следы стека в Crashlytics

  1. Войдите в свою Play Console.
  2. Выберите приложение.
  3. В меню слева выберите Android vitals> Deobfuscation files.
  4. Рядом с версией вашего приложения нажмите "Загрузить".
  5. Загрузите файл сопоставления ProGuard для версии вашего приложения.

Проверьте эту ссылку: https://support.google.com/googleplay/android-developer/answer/6295281?hl=ru