Как я могу отладить, казалось бы, аппаратно-зависимую проблему с моим Android-приложением без доступа к оборудованию? - PullRequest
3 голосов
/ 18 августа 2010

У меня есть приложение с открытым исходным кодом на рынке Android.Кажется, он работает нормально для меня (с более чем 1000 активных установок, я должен предположить, что это работает для большинства людей).

Недавно я получил отчет об ошибке , который указал на проблему приминимум три пользователя на телефонах Samsung (перехват и захват).Мне не удалось воспроизвести проблему на моем ADP2 и на эмуляторе.

Чтобы получить достаточно данных для диагностики проблемы, я сначала попытался добавить протоколирование, а затем попросил пользователей отправлять журналы через * 1007.* Log Collector .Каждый раз, когда пользователь пытался отправить журнал (было четыре попытки), он усекался, и я не получал никаких полезных данных.

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

Поскольку у меня нет телефона Samsung, и я не могу воспроизвести его ни на чем, гдеЯ мог бы связаться с отладчиком, у меня в основном нет идей.Единственная идея, которую я оставил, - это добавить кнопку в пользовательский интерфейс для создания отчета.

Есть ли какие-либо другие подходы, которые можно предложить?

Обновление : поскольку людитребуя дополнительных подробностей: по сути, приложение считывает текстовые файлы из ресурсов и помещает их (с некоторой предварительной обработкой) в TextView в ScrollView.(Данные постепенно добавляются в SpannableStringBuffer, а затем передаются в функцию setText () TextView.) В зависимости от выбранных параметров отображаемый текст находится в диапазоне от 15 до 115 тыс.На телефонах с этой проблемой отображается только часть текста.Точка отсечения зависит от параметров, но, кажется, находится где-то между 17k-18k.

ACRA отправляет отчет обо всех неперехваченных исключениях и помещает их в форму / таблицу Google.Я получил отчеты от моего эмулятора и от моего телефона, так что я знаю, что конец работает.(На самом деле, я часто обнаруживал, что отладка по трассировке стека в этом отчете быстрее, чем присоединение отладчика к процессу.)

Характеристики телефона: я применил приложение на эмуляторах под управлением 1.5, 1.6,2.1 и 2.2.У меня телефон ADP2 (версия для разработчиков MyTouch), но я установил стороннее ПЗУ , чтобы перейти на Froyo (2.2).Я не знаю об эмуляторе специально для сборки ОС Samsung, хотя это было бы весьма полезно здесь.

Поскольку ожидаемая длина текста постоянна, я должен быть в состоянии обнаружить, если оначитать правильно или нет.Я добавил проверки в конце моей обработки текста, но они никогда не запускались, указывая, что проблема не в чтении файла.Затем я попытался добавить проверки в onPostCreate и onPostResume, но они также не потерпели неудачу.Похоже, что поток пользовательского интерфейса в тот момент еще не работал.

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

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Ошибка оказывается недокументированной по умолчанию на (некоторых?) Телефонах Samsung, которая ограничивает атрибут maxLength виджета TextView до 9000 символов.Явное добавление атрибута «android: maxLength» со значением, достаточно большим, чтобы содержать самую большую длину текста в виджете TextView, решило проблему.

Кстати, я считаю, что именно эта проблема вызвала журналы LogCollector изпервоначальные репортеры должны быть усечены.

2 голосов
/ 18 августа 2010

Нам нужно больше узнать о природе проблемы. Это крушение? Что-то не так выглядит? И т.д.

Если это сбой, вы можете добавить обработчик сбоя (Thread.setUncaughtExceptionHandler, IIRC) и создать журнал с лучшим форматированием, который при желании может быть отправлен вам.

Также попробуйте собрать информацию о характеристиках телефонов (ОС, разрешения и т. Д.) И воспроизвести ее в отладчике. Эти телефоны Samsung имеют Android 2.1 - ваш Nexus, вероятно, имеет 2.2? Вы пытались настроить эмулятор на использование 2.1?

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

...