Как собрать нативную трассировку стека без страшного разрешения READ_LOGS заранее?

У меня есть приложение, которое в основном представляет собой собственный код, написанный на C: Simon Tatham's Пазлы . Когда я обнаруживаю сбой (с помощью обработчика сигналов), трассировка Java сообщит мне только смутную область проблемы:

W System.err: at name.boyle.chris.sgtpuzzles.SGTPuzzles.resizeEvent(Native Method)
W System.err: at name.boyle.chris.sgtpuzzles.SGTPuzzles$1.handleMessage(SGTPuzzles.java:126)
W System.err: at android.os.Handler.dispatchMessage(Handler.java:99)

Что мне нужно, чтобы иметь хоть какую-то надежду на диагностику, - это собственная трассировка что платформа Android записывает в журнал:

I DEBUG   :          #02  pc 0003e8ae  /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so
I DEBUG   :          #03  pc 0003ed62  /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so
I DEBUG   :          #04  pc 00059060  /data/data/name.boyle.chris.sgtpuzzles/lib/libpuzzles.so

Насколько мне известно, отчеты о сбоях Android Market не содержат собственных трассировок ... не так ли?

Таким образом, в настоящее время у меня есть собственный сборщик сбоев и репортер, описанный в предыдущем вопросе , в котором вам будет предложено перетащить вас в окно создания электронного письма с вашим логином в нем.Это работает достаточно хорошо, но с одной проблемой: пользователи не читают (или не верят) объяснение в описании пакета и пугаются запроса разрешения.

Permission request to read logs; comments about it from users

Меня беспокоят не эти несколько комментариев, а неизвестное количество людей, которые убежали, даже не установив его. : - (

Итак как мне получить встроенную обратную трассировку при сбое, не заставляя игру требовать разрешения ужасно выглядящих журналов? Возможные решения включают:

  • Я ошибаюсь, и Android Market действительно дать мне нативные трассировки в наши дни?
  • Рекомендовать, когда я обнаружу сбой, немедленно установить и запустить Log Collector ? Это то, к чему я склоняюсь в настоящее время. У кого-нибудь есть хороший пример того, как это делается, с хорошо написанным пояснительным текстом?
  • Захватив сбой с помощью обработчика сигналов (что я могу сделать), каким-либо способом прочитать мою собственную трассировку стека? Сложнее на Android / Bionic, чем на glibc платформ, нет backtrace () . Изменить: Большинство вещей, находящихся здесь, по-видимому, необходимы: http://github.com/android/platform_system_core/tree/master/ debuggerd - включение его в проект в достаточном количестве было бы излишним, раздутым, сложным, неподдерживаемым, ненадежным при изменениях / дополнениях ABI. Это похоже на хорошее использование времени.

9
задан Community 23 May 2017 в 01:45
поделиться