В пакете Firebase
есть модуль, который позволяет вам получать четкие и действенные выводы и отчеты о проблемах, с которыми может столкнуться ваше приложение. Это очень важно, особенно если вы создаете производственное приложение, критически важное для пользователей. Каждая секунда, потраченная впустую на копание в лог-файлах, может привести к недовольству пользователей или потере дохода.
Таким образом, Firebase Crashlytics
, легковесный отчет о сбоях в реальном времени, который помогает отслеживать, определять приоритеты и устранять проблемы стабильности, снижающие качество вашего приложения, имеет фундаментальное значение. Он экономит время на устранение неполадок, грамотно группируя сбои и выделяя обстоятельства, которые привели к их возникновению.
Вы можете узнать, влияет ли конкретный сбой на многих пользователей. Вы можете получать предупреждения, когда проблема внезапно возрастает по степени серьезности, и даже точно определить, какие строки кода вызывают сбои.
Вот его ключевые особенности:
- Он собирает отчеты о сбоях и предоставляет контекстную информацию, подчеркивая серьезность и распространенность сбоев.
Crashlytics
предлагает Crash Insights, полезные советы, которые выделяют общие проблемы стабильности и предоставляют ресурсы, облегчающие их поиск, устранение и решение.- Интегрировано с `Аналитикой
- Оповещения в реальном времени
Давайте рассмотрим, как настроить и использовать 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. | Код загрузки |