A suíte Firebase tem um módulo que permite que você obtenha insights e relatórios claros e acionáveis sobre os problemas em que seu aplicativo pode estar se metendo. Isto é poderoso especialmente se você está construindo um aplicativo de produção que é crítico para os usuários. Cada segundo desperdiçado escavando em arquivos de log provavelmente resulta em insatisfação dos usuários ou perda de receita.

Assim, ‘Firerebase Crashlytics’, um repórter leve e em tempo real que ajuda a rastrear, priorizar e corrigir problemas de estabilidade que corroem a qualidade de seu aplicativo, é fundamental. Ele economiza seu tempo na solução de problemas ao agrupar inteligentemente os crashes e destacar as circunstâncias que os levam até eles.

Você pode descobrir se um determinado acidente está causando impacto em muitos usuários. Você pode receber alertas quando um problema aumenta de repente e até mesmo identificar quais linhas de código estão causando falhas.

Aqui estão suas principais características:

  1. Ele cura relatórios de colisões e fornece informações contextuais enquanto destaca a gravidade e prevalência das colisões.
  2. Crashlytics’ oferece Crash Insights, dicas úteis que destacam os problemas comuns de estabilidade e fornecem recursos que facilitam a solução de problemas, a triagem e a resolução dos mesmos.
  3. Integrado com "Analíticos".
  4. Alertas em tempo real

Vejamos agora como configurar e utilizar o `Crashlytics’.

Passo 1: Adicione Firebase ao seu projeto

Como ‘Crashlytics’ é um dos produtos do conjunto firebase, você precisa adicionar firebase ao seu projeto. Nós abordamos em detalhes como fazer isso aqui.

Passo 2: Habilite o Crashlytics' no Firebase Console’.

Clique em **Enable Crashlytics***.

Passo 3: Adicione o plugin `Firebase Crashlytics’ ao seu aplicativo.

Você faz isso no arquivo `projects/build.gradle’. Verifique o código abaixo para ver como:

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()
    }
}

Depois disso, venha para o app/build.gradle e aplique o plugin crashlytics, na parte superior desse arquivo:

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'

Passo 4: Adicionar Dependências

Agora você precisa adicionar o SDK Firebase Crashlytics' ao seu aplicativo. Você faz isso dentro do arquivo app/build.gradle sob o fechamento dependencies`:

Para um projeto 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'
}

Para um projeto 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'
}

Passo 5: Forçar um teste

Sim, você precisa forçar um teste para terminar de montar o "Crashlytics". Isto implica que forçaremos intencionalmente uma colisão para ver os resultados em nosso painel de ‘Crashlytics’.

Para fazer isto, por exemplo, podemos adicionar um botão ao nosso aplicativo, depois, quando clicado, travamos o aplicativo. Aqui estão exemplos de códigos:

Em 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))

E em 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));

Agora execute o aplicativo. Em seguida, pressione o botão, o aplicativo irá cair. Basta navegar até o painel [Crashlytics dashboard] (https://console.firebase.google.com/project/_/crashlytics) do Firebase Console para ver o crash de seu teste.

É isso aí.

Vejamos agora alguns exemplos simples e isolados.

Exemplo 1: Exemplo Crashlytics do Firebase Crashlytics’ – Kotlin e Java

Este é um exemplo simples de "base de dados". Há duas atividades, uma escrita em Kotlin, a outra em Java.

Passo 1: Adicione o Firebase ao seu projeto

Adicione Firebase ao seu projeto como detalhado aqui.

Passo 2: Adicionar Dependências

Precisamos acrescentar dependências ao nosso projeto. Precisamos de dependências para nossos Crashlytics'. Em seu app/build.gradle` adicione dependências da seguinte forma:

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'
}

Passo 3: Adicionar permissão para Internet

Para conectar-se ao Firebase, precisamos de permissão de internet. Adicione a seguinte permissão em seu arquivo AndroidManifest.xml:

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

Passo 4: Criar layout

Nós realmente não precisamos deste layout. Nós nem sequer usamos. Entretanto, incluímo-lo aqui para mostrar-lhe todo o código do projeto:

**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>

Passo 5: Escrever Código

Teremos tanto o código Kotlin quanto o código Java. Aqui está a principal atividade de 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]
    }
}

E aqui está o código para 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]
    }
}

É isso aí.

Download

Faça o download do projeto abaixo:

Número Link Link
1. Código de download Código de download [Código de download