Отчеты о сбоях в консоли Google Play - несколько операционных

Почему консоль Google Play в моих отчетах о сбоях рабочего приложения (которые находятся в разделе «Android Vitals» / «ANR и сбои», а затем выберите любой сбой, чтобы увидеть трассировку стека) содержит много ИЛИ в стеке След?

Что это означает? Какой из этих 12 методов на самом деле вызвал сбой? Почему отчет такой непонятный?

Есть ли способ узнать точное название метода и, в идеале, номер строки в отчете? (Я добавил файл сопоставления в "Файлы деобфускации").

введите описание изображения здесь


person Mike Keskinov    schedule 14.02.2018    source источник
comment
возможно, вы используете несколько mapping.txt файлов. Хотя я не уверен.   -  person Debdeep    schedule 14.02.2018
comment
Может быть какая-то проблема из-за того, что прогард не включен. Пробовали выдавать ошибку при включенном прогарде? Обратите внимание, что minify и proguard разные   -  person Debdeep    schedule 14.02.2018
comment
Я не уверен. minifyEnabled истинно (в градиенте). Где мне поменять настройки прогуарда?   -  person Mike Keskinov    schedule 14.02.2018
comment
minifyEnabled true означает, что ваш код будет оптимизирован и сжат. Использование proguard путем упоминания правил proguard в gradle помогает запутать код.   -  person Debdeep    schedule 15.02.2018


Ответы (2)


Причина в том, что вы используете Proguard для минимизации и обфускации вашего кода (пока все хорошо), а Proguard повторно использует одни и те же имена методов в максимально возможной степени (т.е. пока подписи методов различаются), чтобы минимизировать количество букв, которые он должен использовать. Таким образом, минимизированный код, скорее всего, содержит дюжину методов с именем "a" в каждом классе, а stacktrace дает вам только имя метода, а не его подпись, поэтому, к сожалению, невозможно узнать, какой из дюжины методов "a" вызывается, следовательно, инструмент деобфускации дает вам все возможности.

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

Изменить: используйте флаг -useuniqueclassmembernames, чтобы избежать этих OR. Дополнительную информацию можно найти в руководстве по ProGuard.

person Pierre    schedule 18.02.2018
comment
Не могли бы вы предоставить какую-либо информацию / инструкции, как решить эту проблему (т.е. сохранить proGuard, но избавиться от операционных систем), чтобы мы могли видеть, где именно происходит сбой. В идеале тоже иметь номера строк - person Mike Keskinov; 22.02.2018
comment
Отредактировал свой ответ, чтобы ответить на ваш вопрос. Что касается номеров строк, я думаю, что это -keepattributes SourceFile,LineNumberTable. Дополнительную информацию можно найти здесь - поиск по запросу Создание полезных обфусцированных трассировок стека. Надеюсь, это поможет :) - person Pierre; 23.02.2018

Некоторое время назад у меня был такой же вопрос:

Странная трассировка стека, обнаруженная консолью Google Play.

В моем случае я мог заметить, что только одна из функций в каждой группе может быть правильной, потому что другие не вызываются внутри «вышеуказанной» функции.

Думаю, это метод защиты от реверс-инжиниринга.

person Pablo    schedule 14.02.2018