Довольно часто разработчики приложений для мобильных платформ (а особенно для Android, учитывая все их разнообразие) сталкиваются с тем, что на некоторых устройствах приложение может крашится без явных на то причин. Сам же пользователь приложения не может (или не хочет) соообщить внятно разработчику приложения об ошибке. Решить эту проблему призвана библиотека ACRA. С ее помощью разработчик может получать сообщения о крашах приложения, не беспокоя при этом пользователя.
Создадим новый проект:
Версию API оставляете по умолчанию. На следующем шаге выберите «EmptyActivity» и нажмите Next. Все остальные опции также оставляем по умолчанию.
Подключаем библиотеку через build.gradle файл нашего модуля:
dependencies { compile 'ch.acra:acra:4.8.5' }
Далее нам нужно создать свой класс, наследующийся от класса Application:
import android.app.Application; public class MyApplication extends Application { }
и прописать его в манифесте в атрибуте name тега application:
<application … android:name=".MyApplication"> … </application>
Теперь нам нужно сделать выбрать каким способом мы будем получать отчеты об ошибках. Библиотека предоставляет различные способы получения отчета: отправка по E-mail, отправка на сервер или же реализация собственного поставщика отчетов. Давайте выберем отправку по E-mail.
Добавим специальную аннотацию над классом MyApplication:
@ReportsCrashes(mailTo = "reports@yourdomain.com", mode = ReportingInteractionMode.TOAST, resToastText = R.string.crash_toast_text) public class MyApplication extends Application {
Разберем кратко атрибуты:
mailTo — E-mail, на который будут приходить сообщения
mode — способ сообщения об ошибке
resToastText -сообщение, показываемое при ошибке
Добавьте в res/strings.xml следующую строчку:
<string name="crash_message">Произошла ошибка. Отправка отчета</string>
Далее нужно проинициализировать библиотеку в методе onCreate класса Application:
@Override public void onCreate() { super.onCreate(); ACRA.init(this); }
В файле activity_main.xml вставьте следующую разметку:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context="ru.javahelp.myapplication.MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="crashApp" android:text="Crash it!"> </LinearLayout>
При нажатии на кнопку генерируем исключение:
public void crashApp(View view) { throw new RuntimeException("App is crashed"); }
Компилируем и открываем приложение:
Нажимаем на кнопку «Crash it!». Результат:
Для наиболее полного ознакомления с библиотекой перейдите в вики-раздел, где вы сможете найти подробное описание всех функций библиотеки.
Библиотека на GitHub: ACRA.
Пример использования библиотеки: ACRASample