Pull to refresh

Как получить наибольшую выгоду от Crash Reports или упрощаем себе жизнь

Reading time 3 min
Views 15K
Привет хабродроидеры!
Если ваше приложение падает в production и вам нужно быстро понять почему, на каком девайсе, с какой прошивкой и конфигурацией, то этот маленький топик расскажет об одном способе решения данной проблемы.
Под катом описание возможностей ACRA.


Стандартное сообщение о падении приложения мало чем помогает(банальный стектрейс), никакой полезной информации об устройстве или его конфигурации, но к нам на помощь приходит ACRA — code.google.com/p/acra

Данная библиотека помогает сделать отчеты о падениях приложения информативным и более удобным способом.
Доступны следующие способы из коробки:
1. Запись отчета о падении в ваш Google Docs документ(способ по-умолчанию)
2. Отправка отчета на почту
3. Отправка данных на сервер, где его может обработать ваш скрипт произвольным образом
Также можно довольно просто написать свой ReportSender реализовав метод send данного интерфейса.
Присутствует несколько режимов уведомлений о репорте:
1. Silent(по-умолчанию) — пишется отчет в ваш гугл-документ не сообщая об этом пользователю и вызывается стандартный диалог падения
2. Toast — появляется toast-уведомление с вашем сообщением
3. Notification — появится сообщение в статус-баре и далее диалог в котором можно ввести комментарий(опционально).
Отмечу, что в отчет отправляется довольно много параметров, но их можно выбирать задавая в аннотации параметр customReportContent.
Установка

Скачиваем zip-архив по ссылке выше. Далее, кидаем jar библиотеки в папку проекта libs, добавляете ссылку в Build Path в Eclipse и либа готова к использованию.

Пример работы

После ознакомления со всеми способами отправки отчета я остановился на первом(отправка в Google Docs).
Далее расскажу как это чудо заставить работать(также, это описано в wiki проекта).
Прежде всего нам понадобится экземпляр класса Application для которого мы добавим аннотацию и пару строк кода, вот так:

import org.acra.*;
import org.acra.annotation.*;
@ReportsCrashes( formKey = "ВАШ КЛЮЧ ФОРМЫ",	    
	                       logcatArguments = { "-t", "50", Constants.DEBUG_TAG+":D"} )
public class MyApp extends Application {
	@Override
    public void onCreate() {
        ACRA.init(this); 
        ErrorReporter.getInstance().checkReportsOnApplicationStart();
        super.onCreate();
    }
}

И необходимо добавить описание имени объекта Application в ваш манифест:
<application
		android:name="MyApp"
                ...

В аннотации мы указываем ключ формы(как и где его получить опишу ниже) и параметры фильтрации вывода LogCat. в отчет В параметре фильтра мы ограничиваем количество записей лога в 50 штук и подсказываем библиотеке включить наш кастомный тег в отчет(честно говоря работает этот фильтр странновато, но все нужные теги добавляет).
Кстати не забудьте добавить разрешение на чтение логов в манифест:
<uses-permission 
	    android:name="android.permission.READ_LOGS"/>
</pre>

Далее, в методе onCreate мы инициализируем библиотеку и говорим ей проверить ранние отчеты при запуске приложения. Это удобная опция позволяет подгрузить отчеты к вам в документ, которые были зафиксированы ранее, но не были отправлены(к примеру, не было интернета на девайсе).

Подготовка Google Docs

У вас наверняка есть аккаунт гугла. Входим в Google Docs и жмем кнопочку «Загрузить»(Load) и выбираем в архиве ACRA в папке doc файл CrashReports-Template.csv. После загрузки можем переименовать док, не суть важно. Заходим в документ в меню Tools выбираем Form->Create Form. Откроется новое окошко, в котором нужно убрать галочку «Require <ваш домен> sign-in to view this form». Внизу этого окна в ссылке будет нужный вам ключ — formKey, сохраните его. Жмете кнопку «save» вверху этого окна и ваш документ готов к получению баг репортов. Вставляете сохраненный ключ в код и все готово!

В wiki библиотеки доступно много дополнительных примеров.
code.google.com/p/acra/wiki/AdvancedUsage

Кроме того, здесь можно почитать обсуждение рассмотренного вопроса и посмотреть альтернативные способы обработки падения:
stackoverflow.com/questions/601503/how-do-i-obtain-crash-data-from-my-android-application

Добавлю, что посланные отчеты мгновенно появляются в форме вашего документа.
Все вопросы и замечания по топику, как обычно, в личку.
Tags:
Hubs:
+30
Comments 16
Comments Comments 16

Articles