Статьи

Отчет о сбоях с помощью Crashlytics

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

Сбои делают ваших пользователей грустными и злыми. Они могут даже захотеть удалить приложение, если это происходит часто. Затем дайте вашему приложению плохой обзор, оставьте отрицательный отзыв в магазине игр, а затем установите приложение своего конкурента! На этом и без того переполненном и конкурентном рынке приложений радость пользователей жизненно важна для успеха вашего приложения.

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

В этом руководстве я покажу вам, как использовать Crashlytics , бесплатное и мощное, но легкое решение для создания отчетов о сбоях , которое является частью набора инструментов разработчика Fabric , недавно приобретенного Google. Мы создадим простое приложение, которое аварийно завершает работу при нажатии кнопки, чтобы мы могли получить представление о сбое с помощью Crashlytics.

Вот несколько причин, по которым вы можете использовать его:

  • Легко настроить
  • Неограниченное количество приложений, пользователей и сбоев
  • Оповещения в реальном времени
  • Отчеты о сбоях в режиме реального времени
  • Углубленный анализ сбоев
  • Отслеживание исключений
  • Легко поделиться отчетом о сбое
  • Бета-версия приложения
  • Бесплатное мобильное приложение для мониторинга вашего приложения на ходу и получения оповещений в режиме реального времени о критических проблемах.
  • Свободно!

Сначала запустите Android Studio и создайте новый проект CrashlyticsTutorial с пустым действием MainActivity .

Создать новый вид деятельности

Сначала вы должны иметь учетную запись в Fabric для интеграции Crashlytics в ваше приложение. Поэтому заполните необходимые данные, и вам будет отправлено электронное письмо с подтверждением.

Зарегистрируйтесь на Fabric

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

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

Выберите Android в качестве платформы.

Выберите платформу для установки

Для пользователей Mac: выберите « Настройки»… в меню Android Studio / IntelliJ . Пользователи Windows и Linux: выберите « Настройки» в меню « Файл» .

Открыть Настройки Android Studio Настройки

Выберите « Плагины» , нажмите кнопку « Обзор репозиториев» и выполните поиск «Fabric для Android».

Android Studio просматривать плагины

Нажмите кнопку Установить плагин, чтобы загрузить и установить плагин.

Установить плагин
Интеграция Final Fabric со студией Android

Чтобы начать интеграцию Crashlytics в проект Android Studio, введите свои учетные данные для входа.

Экран приветствия Fabric в Android Studio

Выберите проект Android CrashlyticsTutorial и нажмите кнопку « Далее» .

Выберите проект для интеграции с Fabric

В Fabric будут перечислены все организации, которые вы зарегистрировали, поэтому выберите организацию, с которой вы хотите связать приложение, и нажмите кнопку Далее .

Выберите организацию

Затем Fabric перечислит все свои комплекты. Поскольку это учебник по Crashlytics, выберите Crashlytics и нажмите кнопку Далее .

Выберите комплект

Нажмите кнопку Установить .

Установить Crashlytics

Ткань хочет внести изменения в вашу сборку. gradle , файлы MainActivity.java и AndroidManifest.xml ,   поэтому нажмите кнопку Применить , чтобы изменения произошли.

Финальный экран установки

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

Письмо получено от Fabric

Теперь, когда Crashlytics успешно интегрирован с нашим проектом, посетите главную панель инструментов, чтобы увидеть наше приложение: CrashlyticsTutorial .

Панель приборов из ткани

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

Crashlytics панель приборов

Внутри проекта Crashlytics Dashboard вы получите общий обзор сбоев. Вы можете отфильтровать сбои по версиям приложения, событиям, дням, состоянию (открыто, закрыто или все), устройству, ОС или активности пользователя (хотя для использования этой функции должен быть включен комплект « Ответы» ). Вы также можете увидеть общее количество сбоев, несмертельных, пострадавших пользователей и многое другое.

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

Разница между сбоями и проблемами заключается в том, что Crashlytics объединяет схожие сбои в проблемы (определенные строки кода, которые, по-видимому, вызывают один и тот же тип сбоя). Например, если у вас зарегистрировано 100 000 сбоев, это может быть связано только с 60 проблемами.

Давайте намеренно создадим сбой и просмотрим зарегистрированную проблему на панели инструментов.

Вот MainActivity макета MainActivity :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version=»1.0″ encoding=»utf-8″?>
<RelativeLayout
    xmlns:android=»http://schemas.android.com/apk/res/android»
    xmlns:tools=»http://schemas.android.com/tools»
    android:id=»@+id/activity_main»
    android:layout_width=»match_parent»
    android:layout_height=»match_parent»
    android:paddingLeft=»@dimen/activity_horizontal_margin»
    android:paddingRight=»@dimen/activity_horizontal_margin»
    android:paddingTop=»@dimen/activity_vertical_margin»
    android:paddingBottom=»@dimen/activity_vertical_margin»
    tools:context=»com.chikeandroid.crashlyticstutorial.MainActivity»>
 
    <Button
            android:id=»@+id/btn_crash_now»
            android:layout_height=»wrap_content»
            android:layout_width=»wrap_content»
            android:text=»Crash Now!»
            android:layout_centerVertical=»true»
            android:layout_centerHorizontal=»true» />
 
</RelativeLayout>

Измените класс MainActivity чтобы запустить метод crashNow() , который будет вызывать исключение RuntimeException при нажатии кнопки.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.chikeandroid.crashlyticstutorial;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
 
import com.crashlytics.android.Crashlytics;
 
import io.fabric.sdk.android.Fabric;
 
public class MainActivity extends AppCompatActivity {
 
    private Button mCrashNowButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics());
        setContentView(R.layout.activity_main);
         
        mCrashNowButton = (Button) findViewById(R.id.btn_crash_now);
         
        mCrashNowButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                crashNow();
            }
        });
    }
 
    private void crashNow() {
        throw new RuntimeException(«This is a crash»);
    }
}

Запустите приложение и нажмите кнопку сбоя сейчас.

сбой приложения в эмуляторе

После успешного сбоя, снова посетите панель управления, чтобы увидеть проблему, которая была зарегистрирована немедленно. Вы также получите электронное уведомление от Fabric о сбое. Пока на панели инструментов у нас есть одна проблема, один сбой и один затронутый пользователь. Вы можете искать конкретную проблему по имени файла, имени метода, номеру строки или примечаниям к выпуску (только для одного термина).

Экран обзора аварийных сбоев

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

Crashlytics всесторонний обзор

Ключевые части этого интерфейса следующие:

1

Название проекта и пакета, включая номер строки, в которой произошел сбой

2

Фильтр недавних сбоев

3

Общее количество аварий

4

Общее количество пользователей, пострадавших от аварии

5

Переключатель для пометки вопроса закрыт или открыт

6

График количества аварий в день

7

Кнопка, чтобы поделиться проблемой через Twitter или с членами вашей команды

8

Процент сбитых устройств с активированной близостью

9

Процент аварий, произошедших, когда приложение было в фокусе

10

Процент сбитых устройств, которые были рутированы

11

Разбивка названий моделей неисправных устройств

12

Выход из строя разбитых устройств

13

Загрузите трассировку стека исключений в виде файла .txt

14

Расширяемое представление для трассировки стека

15

Просмотр деталей каждого отдельного отчета о сбое.

На этой странице вы также можете просматривать заметки и писать заметки о каждом сбое.

У Fabric также есть бесплатное мобильное приложение, доступное в магазине Google Play. С мобильным приложением вы получаете мгновенное push-уведомление при возникновении критического сбоя, а также некоторые данные, дающие представление о проблеме: поломка устройств и платформ, полная трассировка стека, количество затронутых пользователей, которые затронуты , введенные заметки о проблеме и возможность поделиться проблемой с членами команды. Все эти данные обновляются в режиме реального времени.

Экран мобильного приложения Fabric

Crashlytics также позволяет регистрировать исключения, захваченные в блоке catch используя Crashlytics.logException(Exception) .

1
2
3
4
5
6
try {
  myMethodThatThrows();
} catch (Exception e) {
  Crashlytics.logException(e);
  // handle your exception here!
}

Все зарегистрированные исключения будут отображаться как «нефатальные» проблемы на панели управления Fabric. Crashlytics обрабатывает исключения в выделенном фоновом потоке, поэтому регистрация исключения не заблокирует пользовательский интерфейс приложения, и влияние на производительность вашего приложения будет незначительным.

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

1
Crashlytics.log(int priority, String tag, String msg);

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

1
Crashlytics.log(String message);

Как в примере ниже:

1
2
3
4
private void crashNow() {
    Crashlytics.log(«My log message»);
    throw new RuntimeException(«This is a crash»);
}
Зарегистрированное сообщение в панели управления

Чтобы однозначно идентифицировать конечного пользователя вашего приложения на инструментальной панели для легкой отладки, Crashlytics имеет следующие методы:

1
2
3
Crashlytics.setUserIdentifier(«12345»);
Crashlytics.setUserEmail(«[email protected]»);
Crashlytics.setUserName(«Test User»);

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

Если вы хотите, чтобы бета-версия распространила ваше приложение среди пользователей для тестирования и получения отзывов, прежде чем, наконец, выпустить свое приложение для широкой публики, у Crashlytics есть очень полезный бесплатный инструмент под названием Beta . Я не буду вдаваться в подробности, но ознакомьтесь с официальными документами для получения дополнительной информации.

Вы можете отключить Crashlytics для отладочных сборок, что ускорит процесс отладочной сборки.

Сначала добавьте это в ваш файл build.gradle :

1
2
3
4
5
6
7
buildTypes {
    …
    debug {
        // Disable fabric build ID generation for debug builds
        ext.enableCrashlytics = false
    }
}

Затем отключите Crashlytics Kit во время выполнения.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     
    // Set up Crashlytics, disabled for debug builds
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();
     
    Fabric.with(this, crashlyticsKit);
    setContentView(R.layout.activity_main);
 
}

Crashlytics является очень мощным и полезным для эффективной отчетности о сбоях. В этом уроке вы узнали:

  • как интегрировать Crashlytics в ваш проект Android
  • как приборная панель Crashlytics может дать вам представление о проблеме
  • как регистрировать пойманные исключения
  • как писать собственные логи
  • как уникально идентифицировать своих пользователей для легкой отладки
  • как отключить Crashlytics для отладочных сборок

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

  • Android SDK
    Начните с Firebase для Android
    Ашраф Хатхибелагал
  • Android SDK
    Сервисы Google Play Games: создание событий и квестов
    Ашраф Хатхибелагал
  • викторина
    Тест: Amazon Web Services, знаете ли вы правильный инструмент для работы?
    Адам Браун
  • Android SDK
    Как создать приложение для Android-чата с помощью Firebase
    Ашраф Хатхибелагал