Crashlytics не загружает файл сопоставления

Я могу видеть сбои в сборке релиза в Crashlytics, но они все еще запутаны. Я использую:

implementation "com.google.firebase:firebase-core:16.0.5"
implementation "com.google.android.gms:play-services-base:16.0.1"
implementation "com.crashlytics.sdk.android:crashlytics:2.9.6"

и (уровень проекта)

    classpath 'com.android.tools.build:gradle:3.2.1'
    classpath 'com.google.gms:google-services:4.2.0'
    classpath 'io.fabric.tools:gradle:1.26.1' // Crashlytics plugin
    classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"

Я выполнил инструкции на странице https://firebase.google.com/docs/crashlytics/get-deobfuscated-report, в частности, я удалил строку -printmapping <path>/mapping.txt из config.txt

Когда я смотрю в журнал Crashlytics, я не вижу загрузки файла сопоставления.

Когда я запускаю сборку выпуска для более ранней версии моего проекта, используя:

implementation "com.google.firebase:firebase-core:11.8.0"
implementation "com.google.android.gms:play-services-base:11.8.0"
implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {
    transitive = true
}

и (уровень проекта)

    classpath 'com.android.tools.build:gradle:3.1.3'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'io.fabric.tools:gradle:1.24.4'

затем я вижу не запутанные трассировки стека и отображение сообщений загрузки в crashlytics.log:

2018-11-21 10:52:22.573 [DEBUG] (Daemon worker) com.crashlytics  - Deobfuscation file(s) uploaded.

Есть идеи, что не так? Я не вижу никаких журналов, связанных с файлом сопоставления, для последней (неработающей) версии в журнале Crashlytics, и я не вижу, что задача загрузки gradle выполняется в выводе gradle, тогда как для более старой (рабочей) версии я вижу следующий:

:app:crashlyticsUploadDeobsRelease (Thread[Daemon worker Thread 2,5,main]) completed. Took 1.28 secs.

person Ewan    schedule 21.11.2018    source источник


Ответы (3)


Аргх. Что ж, было простое исправление, жаль, что я так долго его искал. Я всегда (до сих пор) создаю и локально устанавливаю сборку выпуска, используя ./gradlew iR (ярлык для ./gradlew installRelease). Вместо этого я попробовал (после досадно долгого времени) построить из Android Studio (Build > Generate Signed Bundle / Apk). Как только я это сделал, все заработало.

Я обновлю здесь, если и когда выясню, что выпуск без AS работает с Crashlytics. Между тем, если у вас возникли проблемы, взгляните на образец https://github.com/firebase/quickstart-android/tree/master/crash. Вы можете воспользоваться этим, добавить свой собственный google-services.json и выпустить, как указано выше, а затем проверить crashlytics.log (см. Выше).

person Ewan    schedule 27.11.2018
comment
ОБНОВЛЕНИЕ: теперь я переключаюсь с Crashlytics на Sentry для отчетов о сбоях. Он имеет гораздо больше функций, лучший интерфейс отчетности и, в отличие от Crashlytics, вы можете регистрировать / составлять отчеты из зависимостей чистой библиотеки Java. - person Ewan; 16.06.2019

Вы читали здесь: https://docs.fabric.io/android/crashlytics/dex-and-proguard.html?

Я использую эти строки в моем proguard-rules.pro файле (в папке вашего приложения), чтобы получить деобфусцированные отчеты о сбоях.

-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
# prevent Crashlytics obfuscation
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**

И убедитесь, что нет этой строки в вашем файле proguard

-printmapping mapping.txt
person MatPag    schedule 21.11.2018
comment
Спасибо, да, у меня есть эти строки в proguard-rules.pro, а у меня нет (действительно, никогда не было) -printmapping mapping.txt. У меня был устаревший файл config.txt (из более раннего vn?), В котором он был, и я удалил его, но безрезультатно. Сейчас я удалил config.txt. Мне интересно узнать, видят ли другие Deobfuscation file(s) uploaded. в своих журналах сбоев .... - person Ewan; 22.11.2018
comment
Где вы инициализируете Crashlytics? В пользовательском Application классе? - person MatPag; 22.11.2018
comment
Да (но не думаю, что сейчас это нужно). Crashlytics работает тем, что отправляет трассировку стека. Проблема в том, что трассировка стека запутана. Если вы выполните поиск uploaded в журнале сбоев, вы увидите, что загрузка была записана. Со мной этого не происходит. Есть смысл? В Linux / Windows: ~ / .crashlytics / com.crashlytics.tools / crashlytics.log В Mac: ~ / Library / Caches / com.crashlytics / com.crashlytics.tools / crashlytics.log - person Ewan; 22.11.2018

Убедитесь, что ничто в вашей сети не блокирует хост Crashlytics. Например PiHole.

person S0und    schedule 24.02.2020