Автоматизированные отчеты о сбоях Android с помощью ACRA и Cloudant

Опубликовано: 2022-03-11

Сделать базовое приложение для Android несложно. С другой стороны, создание надежного, масштабируемого и надежного приложения для Android может быть довольно сложной задачей.

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

Сегментация — лучший компромисс за открытую платформу, и мы платим цену в валюте поддержки кода, которая продолжается еще долгое время после того, как приложение прошло стадию производства.

Почему отчеты об ошибках Android важны

Итак, что происходит, когда приложение для Android дает сбой или перестает отвечать на запросы? Что ж, всплывает диалоговое окно «Принудительное закрытие», сообщающее пользователю, что что-то пошло не так. Если приложение было загружено через Google Play, пользователю будет предложено сообщить о сбое, отправив подробный отчет о сбое Android (включая время, модель телефона, версию Android, трассировку стека и т. д.), который вы (разработчик) можете просмотреть в Консоль разработчика, позволяющая устранить виновную ошибку.

Все это звучит очень красиво, но есть серьезная проблема с отчетами об ошибках по умолчанию в Android: пользователи, как правило, не используют их, оставляя разработчиков в неведении относительно состояния их приложений.

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

Надежный журнал сбоев Android особенно важен, когда пользователи не отправляют отчеты о сбоях.

Представляем АКРА

ACRA расшифровывается как «Автоматические отчеты о сбоях для Android». Это бесплатная библиотека, которая позволяет решить проблему «отчетов об ошибках вручную» с помощью нескольких строк кода. После того, как вы реализовали библиотеку и все было правильно инициализировано, вы сможете автоматически извлекать те же журналы ошибок Android, что и Google по умолчанию (плюс множество дополнительных параметров настройки), не требуя от пользователя каких-либо действий.

Кроме того, ACRA позволяет вам выбрать, как вы хотите информировать пользователя о сбое Android, при этом по умолчанию используется тихий фоновый отчет и альтернативы, включая настраиваемые диалоговые окна.

До недавнего времени ACRA поддерживалась Google Spreadsheet, что означало, что вы могли получать все свои отчеты в одном файле, бесплатно размещенном в вашей учетной записи Google Диска. К сожалению, Google попросил нас не использовать эту опцию в будущем, поэтому у нас осталось несколько альтернатив для отправки данных отчета о сбоях, некоторые из которых мы рассмотрим в этом руководстве:

  • Стандартная электронная почта (по-прежнему требует взаимодействия с пользователем).
  • Пользовательский клиент электронной почты/HTTP (требуется обширная настройка).
  • Настраиваемая серверная часть (с вариантами от бесплатных до коммерческих решений).

В этой статье мы проанализируем одно из таких решений: размещение отчетов ACRA на серверной части Cloudant и визуализация данных с помощью acralyzer.

Настройка серверной части Cloudant

Первое, что нам нужно сделать, это зарегистрировать учетную запись Cloudant. Конечно, есть одна загвоздка: услуги Cloudant не совсем бесплатны, но, согласно их странице с ценами, очень маловероятно, что вы превысите месячный лимит в 5 долларов (если только у вас нет огромной пользовательской базы и тонны ошибок в вашем коде).

После того, как мы зарегистрировались, нам нужно понять, как все работает. На высоком уровне наш бэкенд будет состоять из двух компонентов:

  1. База данных хранилища или, если быть более точным, Apache CouchDB. CouchDB хранит свои данные в формате JSON, а это означает, что все отчеты, отправленные с устройства Android, должны соответствовать формату, чтобы их можно было вставить как запись. Вставка в базу данных — это простой HTTP-запрос POST или PUT.
  2. Веб-приложение (для анализа) или, если быть точнее, CouchApp. Это простое приложение JavaScript, которое позволяет выполнять запросы и отображать данные, хранящиеся в экземпляре CouchDB.

Чтобы наш сервер работал правильно, нам нужно настроить эти два компонента. Теоретически мы могли бы создать базу данных и приложение из исходного кода, а затем использовать инструмент для их развертывания на нашей серверной части, но добрые люди из ACRA уже сделали это за нас. Таким образом, самый простой подход — реплицировать удаленную базу данных и удаленное приложение.

Давайте продолжим и реплицируем пустую ACRA CouchDB:

  • Выберите раздел «Репликация» на панели инструментов Cloudant.
  • В качестве исходной базы данных выберите «Удаленная база данных» с http://get.acralyzer.com/distrib-acra-storage в качестве URL-адреса.
  • В качестве целевой базы данных выберите «Новая база данных» и назовите ее «acra-{myapp}» (без кавычек). Обратите внимание, что параметр {myapp} должен быть уникальным для вашего приложения, а имя базы данных должно начинаться с «acra-».
  • Нажмите «Реплицировать».

Здесь показано, как настроить серверную часть Cloudant для управления отчетами о сбоях Android.

Таким образом, мы успешно реплицировали базу данных для хранения отчетов. Далее нам нужно реплицировать CouchApp acralyzer, чтобы мы могли визуализировать данные:

  • Выберите раздел «Репликация» на панели инструментов Cloudant.
  • В качестве исходной базы данных выберите «Удаленная база данных» с http://get.acralyzer.com/distrib-acralyzer в качестве URL-адреса.
  • В качестве целевой базы данных выберите «Новая база данных» и назовите ее «acralyzer».
  • Нажмите «Реплицировать».

Этот шаг состоит из репликации приложения acra для визуализации данных журнала сбоев Android.

Примечание . Копировать приложение acralyzer необязательно. Вам это не понадобится, если вы заинтересованы только в сохранении отчета о сбое Android, а не в визуализации данных (мы более подробно рассмотрим acralyzer в следующем разделе этого руководства по Android). Если вы достаточно уверены в своих навыках JavaScript, вы даже можете написать собственное аналитическое приложение! Но это выходит за рамки этого сообщения в блоге.

Последним шагом процесса начальной настройки является добавление разрешений безопасности. Cloudant предоставляет собственный уровень безопасности поверх CouchDB с более точным контролем отдельных прав, поэтому для записи отчета в нашу базу данных нам необходимо создать учетную запись пользователя с разрешениями на запись:

  • Выберите раздел «База данных» на панели инструментов Cloudant.
  • Щелкните раздел разрешений (значок замка) для базы данных acra-{myapp}.
  • Нажмите «Создать ключи API».
  • Запишите сгенерированные имя пользователя и пароль (мы будем использовать их позже).
  • Добавьте права на запись для сгенерированного имени пользователя.

Добавьте разрешения безопасности, чтобы ваши журналы сбоев Android и отчеты были доступны позже.

Визуализация отчетов о сбоях Android с помощью acralyzer

После репликации к панели управления acralyzer можно легко получить доступ, перейдя по ссылке https://{myapp}.cloudant.com/acralyzer/_design/acralyzer/index.html#/dashboard . Я признаю: это не самый красивый аналитический инструмент, но он служит своей цели.

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

  • Постройте количество отчетов в единицу времени (час, день, месяц и т. д.).
  • Просмотрите распределение отчетов по метрикам, специфичным для Android (версия Android, версия SDK, версия приложения, устройство и т. д.).
  • Перечислите все отчеты о сбоях (с подробной трассировкой стека) или просмотрите все ошибки (здесь «ошибка» — это группа идентичных отчетов, полученных от разных пользователей).
  • Предварительный просмотр сведений об одной ошибке и установка ее статуса как устраненной (если она исправлена).
  • Очистите старые или устаревшие записи.

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

Обратите внимание, что метрики сбоев Android, доступные для визуализации, будут зависеть от отчетов, которые мы выбираем для отправки из нашего приложения. ACRA предлагает множество полей отчета, некоторые из которых могут быть довольно большими по размеру или не полностью относиться к исправлению ошибок. Для большинства проектов обязательных полей отчета будет достаточно. Это включает:

  • APP_VERSION_CODE
  • ПРИЛОЖЕНИЕ_ВЕРСИЯ_ИМЯ
  • ANDROID_VERSION
  • ИМЯ ПАКЕТА
  • REPORT_ID
  • СТРОИТЬ
  • ТРАССИРОВКИ СТЕКА

Внедрение ACRA в ваш Android-проект

Как упоминалось ранее в этом руководстве, внедрение ACRA очень просто и требует всего несколько быстрых шагов.

Добавить зависимость

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

  • В виде файла .jar в папке /libs.
  • Как зависимость maven:

     <dependency> <groupId>ch.acra</groupId> <artifactId>acra</artifactId> <version>XYZ</version> </dependency>
  • Как зависимость градиента:

     compile 'ch.acra:acra:XYZ'

Добавить класс приложения

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

 <application android:name=".MyApp" android:theme="@style/AppTheme"> ...

И настройте там ACRA:

 @ReportsCrashes( formUri = "https://{myusername}.cloudant.com/acra-{myapp}/_design/acra-storage/_update/report", reportType = HttpSender.Type.JSON, httpMethod = HttpSender.Method.POST, formUriBasicAuthLogin = "GENERATED_USERNAME_WITH_WRITE_PERMISSIONS", formUriBasicAuthPassword = "GENERATED_PASSWORD", formKey = "", // This is required for backward compatibility but not used customReportContent = { ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PACKAGE_NAME, ReportField.REPORT_ID, ReportField.BUILD, ReportField.STACK_TRACE }, mode = ReportingInteractionMode.TOAST, resToastText = R.string.toast_crash ) public class MainApp extends Application { @Override public void onCreate() { super.onCreate(); // The following line triggers the initialization of ACRA ACRA.init(this); } }

Вот и все! Конечно, вам потребуется заменить все заполнители {myapp} фактическими значениями, а также значения для formUriBasicAuthLogin и formUriBasicAuthPassword .

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

Вы также можете использовать PUT вместо POST. В этом случае REPORT_ID будет добавлен в конец former в качестве параметра.

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

Нужна помощь? Вот пример проекта

Чтобы увидеть ACRA в действии, я настроил репозиторий acra_example на GitHub. Он имеет простое приложение, которое инициализирует ACRA при запуске и позволяет вам завершить его, нажав кнопку (что затем вызывает исключение нулевого указателя). Данные о сбоях отправляются в пример базы данных Cloudant, которую можно визуализировать здесь.

Чтобы просмотреть данные, войдите в систему со следующими учетными данными:

  • Имя пользователя: Медо
  • Пароль: acraexample

Альтернативы АКРА

ACRA — не единственный вариант автоматического создания отчетов об ошибках Android. Поскольку сбои неизбежно случаются, существует большой рынок B2D, пытающийся монетизировать их решение.

Криттерцизм, например, является очень зрелой платформой для отчетов о сбоях. Он отлично выглядит, предлагает множество опций для анализа данных и очень прост в интеграции. Единственный недостаток: цена и бесплатная пробная версия довольно ограничены с точки зрения количества активных пользователей, дней хранения данных и поддержки). BugSense — аналогичный сервис.

Однако, на мой взгляд, Crashlytics — лучшее решение. До недавнего времени у Crashlytics была модель freemium (с платным премиальным уровнем); но теперь (после их приобретения Twitter) все ранее премиальные функции доступны бесплатно. Нет никаких затрат на использование, сборов или ограничений. Это предпочтительный способ сообщения об ошибках для многих известных и высокопоставленных компаний и разработчиков, поскольку он очень прост в использовании и предлагает мощные инструменты аналитики и визуализации. Он даже интегрируется с большинством популярных IDE в виде плагина (например, Eclipse, Android Studio), поэтому добавить Crashlytics в ваше приложение так же просто, как выбрать проект и нажать кнопку. Эти плагины также позволяют отслеживать отчеты о сбоях из вашей IDE, не открывая браузер.

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

  1. Все эти другие варианты являются проприетарным программным обеспечением с закрытым исходным кодом . Даже имея целую корзину лицензионных соглашений с конечным пользователем, вы не можете точно знать, как ваши данные собираются и обрабатываются. С другой стороны, ACRA и acralyzer — это проекты с открытым исходным кодом, размещенные на GitHub, которые вы можете легко разветвить и адаптировать под свои нужды.

  2. Мобильность данных . Допустим, вы недовольны Cloudant. Легко реплицировать и перенести ваши данные на другой сервер. Вам гарантируется, что данные останутся вашими .

Как и во многих случаях, этот выбор сводится к личным предпочтениям и знакомству. Ознакомьтесь с этой веткой Google+, чтобы узнать больше о различных альтернативах, доступных для повышения надежности вашего приложения.

В заключение

ACRA — это очень надежная и настраиваемая библиотека, которую можно использовать вместе с Cloudant и acralyzer для получения бесплатных автоматических отчетов о сбоях и базовой аналитики для вашего приложения с минимальными усилиями по внедрению.

Написание надежного кода для Android требует большого опыта и предусмотрительности, но никто из нас не является по-настоящему всеведущим. Будьте готовы к неожиданным сбоям и ошибкам и будьте готовы исправить непредвиденное как можно скорее. Именно такая работа идет на создание отличных продуктов и отличного пользовательского опыта.

Связанный: Сделайте свое приложение прибыльным — используйте мобильную аналитику