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 почти понятен. Вот пример отчета о сбое:
Как вы можете видеть в отчете о сбое, в стеке отсутствует только имя файла. Другие описания, такие как номера строк и имена методов, полностью в порядке.
Хотя я использую полные имена методов, такие как 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
- Войдите в свою Play Console.
- Выберите приложение.
- В меню слева выберите Android vitals> Deobfuscation files.
- Рядом с версией вашего приложения нажмите "Загрузить".
- Загрузите файл сопоставления ProGuard для версии вашего приложения.
Проверьте эту ссылку: https://support.google.com/googleplay/android-developer/answer/6295281?hl=ru