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

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

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

Вот его ключевые особенности:

Супер! Лапша Вок с Курицей и Овощами-Всё Готово за 20 минут!

Супер! Лапша Вок с К...
Супер! Лапша Вок с Курицей и Овощами-Всё Готово за 20 минут!
  1. Он собирает отчеты о сбоях и предоставляет контекстную информацию, подчеркивая серьезность и распространенность сбоев.
  2. Crashlytics предлагает Crash Insights, полезные советы, которые выделяют общие проблемы стабильности и предоставляют ресурсы, облегчающие их поиск, устранение и решение.
  3. Интегрировано с `Аналитикой
  4. Оповещения в реальном времени

Давайте рассмотрим, как настроить и использовать Crashlytics.

Шаг 1: Добавьте Firebase в ваш проект

Поскольку Crashlytics является одним из продуктов набора продуктов firebase, вам необходимо добавить firebase в ваш проект. Мы подробно описали, как это сделать [здесь] (https://camposha.info/android-examples/add-firebase-to-android/).

Шаг 2: Включите Crashlytics в Firebase Console

  • Перейдите на панель Crashlytics dashboard в Firebase Console.

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

  • Нажмите Enable Crashlytics.

Шаг 3: Добавьте плагин Firebase Crashlytics в ваше приложение.

Вы делаете это в файле projects/build.gradle. Посмотрите приведенный ниже код, чтобы увидеть, как это сделать:

buildscript {
    repositories {
        // Check that you have Google's Maven repository (if not, add it).
        google()
    }

    dependencies {
        // ...

        // Check that you have the Google services Gradle plugin v4.3.2 or later
        // (if not, add it).
        classpath 'com.google.gms:google-services:4.3.10'

        // Add the Crashlytics Gradle plugin
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
}

allprojects {
    repositories {
        // Check that you have Google's Maven repository (if not, add it).
        google()
    }
}

После этого перейдите в app/build.gradle и примените плагин crashlytics, в верхней части этого файла:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Google services Gradle plugin

// Apply the Crashlytics Gradle plugin
apply plugin: 'com.google.firebase.crashlytics'

Шаг 4: Добавление зависимостей

Теперь вам нужно добавить SDK Firebase Crashlytics в ваше приложение. Вы делаете это внутри файла app/build.gradle в разделе dependencies:

Для Kotlin-проекта:

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:28.4.1')

    // Declare the dependencies for the Crashlytics and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics-ktx'
    implementation 'com.google.firebase:firebase-analytics-ktx'
}

Для Java-проекта:

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:28.4.1')

    // Declare the dependencies for the Crashlytics and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-crashlytics'
    implementation 'com.google.firebase:firebase-analytics'
}

Шаг 5: Принудительное тестирование

Да, чтобы завершить настройку Crashlytics, необходимо провести принудительный тест. Это подразумевает, что мы будем намеренно вызывать крах, чтобы увидеть результаты в нашей приборной панели Crashlytics.

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

На языке Kotlin:

val crashButton = Button(this)
crashButton.text = "Test Crash"
crashButton.setOnClickListener {
   throw RuntimeException("Test Crash") // Force a crash
}

addContentView(crashButton, ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT,
       ViewGroup.LayoutParams.WRAP_CONTENT))

И на Java:

Button crashButton = new Button(this);
crashButton.setText("Test Crash");
crashButton.setOnClickListener(new View.OnClickListener() {
   public void onClick(View view) {
       throw new RuntimeException("Test Crash"); // Force a crash
   }
});

addContentView(crashButton, new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT,
       ViewGroup.LayoutParams.WRAP_CONTENT));

Теперь запустите приложение. Затем нажмите на кнопку, и приложение упадет. Просто перейдите на Crashlytics dashboard в Firebase Console, чтобы увидеть, как упал ваш тест.

Вот и все.

Теперь давайте рассмотрим несколько простых изолированных примеров.

Пример 1: Пример Firebase Crashlytics – Kotlin и Java

Это простой пример Firebase crashlytics. Есть две активности, одна написана на Kotlin, другая на Java.

Шаг 1: Добавьте Firebase в ваш проект

Добавьте Firebase в ваш проект, как подробно описано [здесь] (https://camposha.info/android-examples/add-firebase-to-android/).

Шаг 2: Добавьте зависимости

Нам нужно добавить зависимости в наш проект. Нам нужны зависимости для нашей Crashlytics. В вашем app/build.gradle добавьте зависимости следующим образом:

dependencies {
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'

    implementation 'com.google.firebase:firebase-crashlytics:18.2.0'
    implementation 'com.google.firebase:firebase-crashlytics-ktx:18.2.0'

    // For an optimal experience using Crashlytics, add the Firebase SDK
    // for Google Analytics. This is recommended, but not required.
    implementation 'com.google.firebase:firebase-analytics:19.0.0'
}

Шаг 3: Добавьте разрешение на доступ в интернет

Для подключения к Firebase нам нужно разрешение на доступ в интернет. Добавьте следующее разрешение в ваш файл AndroidManifest.xml:

  <uses-permission android:name="android.permission.INTERNET"/>

Шаг 4: Создайте макет

На самом деле нам не нужен этот макет. Мы даже не используем его. Однако мы включили его сюда, чтобы показать вам весь код в проекте:

activity_main.xml

<?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=".MainActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"/>
</RelativeLayout>

Шаг 5: Написать код

У нас будет код как на Kotlin, так и на Java. Вот основная активность для Kotlin:

MainActivity.kt

import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.google.firebase.crashlytics.ktx.crashlytics
import com.google.firebase.crashlytics.ktx.setCustomKeys
import com.google.firebase.ktx.Firebase

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    fun setKeysBasic() {
        // [START crash_set_keys_basic]
        val crashlytics = Firebase.crashlytics
        crashlytics.setCustomKeys {
            key("my_string_key", "foo") // String value
            key("my_bool_key", true)    // boolean value
            key("my_double_key", 1.0)   // double value
            key("my_float_key", 1.0f)   // float value
            key("my_int_key", 1)        // int value
        }
        // [END crash_set_keys_basic]
    }

    fun resetKey() {
        // [START crash_re_set_key]
        val crashlytics = Firebase.crashlytics
        crashlytics.setCustomKeys {
            key("current_level", 3)
            key("last_UI_action", "logged_in")
        }
        // [END crash_re_set_key]
    }

    fun logReportAndPrint() {
        // [START crash_log_report_and_print]
        Firebase.crashlytics.log("message")
        // [END crash_log_report_and_print]
    }

    fun logReportOnly() {
        // [START crash_log_report_only]
        Firebase.crashlytics.log("message")
        // [END crash_log_report_only]
    }

    fun enableAtRuntime() {
        // [START crash_enable_at_runtime]
        Firebase.crashlytics.setCrashlyticsCollectionEnabled(true)
        // [END crash_enable_at_runtime]
    }

    fun setUserId() {
        // [START crash_set_user_id]
        Firebase.crashlytics.setUserId("user123456789")
        // [END crash_set_user_id]
    }

    @Throws(Exception::class)
    fun methodThatThrows() {
        throw Exception()
    }

    fun logCaughtEx() {
        // [START crash_log_caught_ex]
        try {
            methodThatThrows()
        } catch (e: Exception) {
            Firebase.crashlytics.recordException(e)
            // handle your exception here
        }
        // [END crash_log_caught_ex]
    }

    fun forceACrash() {
        // [START crash_force_crash]
        val crashButton = Button(this)
        crashButton.text = "Crash!"
        crashButton.setOnClickListener {
            throw RuntimeException() // Force a crash
        }

        addContentView(crashButton, ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT))
        // [END crash_force_crash]
    }
}

А вот код для java:

MainActivity.java

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.google.firebase.crashlytics.FirebaseCrashlytics;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void setKeysBasic() {
        // [START crash_set_keys_basic]
        FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

        crashlytics.setCustomKey("my_string_key", "foo" /* string value */);

        crashlytics.setCustomKey("my_bool_key", true /* boolean value */);

        crashlytics.setCustomKey("my_double_key", 1.0 /* double value */);

        crashlytics.setCustomKey("my_float_key", 1.0f /* float value */);

        crashlytics.setCustomKey("my_int_key", 1 /* int value */);
        // [END crash_set_keys_basic]
    }

    public void resetKey() {
        // [START crash_re_set_key]
        FirebaseCrashlytics crashlytics = FirebaseCrashlytics.getInstance();

        crashlytics.setCustomKey("current_level", 3);
        crashlytics.setCustomKey("last_UI_action", "logged_in");
        // [END crash_re_set_key]
    }

    public void logReportAndPrint() {
        // [START crash_log_report_and_print]
        FirebaseCrashlytics.getInstance().log("message");
        // [END crash_log_report_and_print]
    }

    public void logReportOnly() {
        // [START crash_log_report_only]
        FirebaseCrashlytics.getInstance().log("message");
        // [END crash_log_report_only]
    }

    public void enableAtRuntime() {
        // [START crash_enable_at_runtime]
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
        // [END crash_enable_at_runtime]
    }

    public void setUserId() {
        // [START crash_set_user_id]
        FirebaseCrashlytics.getInstance().setUserId("user123456789");
        // [END crash_set_user_id]
    }

    public void methodThatThrows() throws Exception {
        throw new Exception();
    }

    public void logCaughtEx() {
        // [START crash_log_caught_ex]
        try {
            methodThatThrows();
        } catch (Exception e) {
            FirebaseCrashlytics.getInstance().recordException(e);
            // handle your exception here
        }
        // [END crash_log_caught_ex]
    }

    public void forceACrash() {
        // [START crash_force_crash]
        Button crashButton = new Button(this);
        crashButton.setText("Crash!");
        crashButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                throw new RuntimeException(); // Force a crash
            }
        });

        addContentView(crashButton, new ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        // [END crash_force_crash]
    }
}

Вот и все.

Скачать

Скачайте проект ниже:

Number Link
1. Код загрузки