Die Firebase-Suite verfügt über ein Modul, mit dem Sie klare und umsetzbare Einblicke und Berichte über die Probleme erhalten, die in Ihrer Anwendung auftreten können. Dies ist vor allem dann von großem Nutzen, wenn Sie eine Produktionsanwendung entwickeln, die für die Benutzer kritisch ist. Jede Sekunde, die mit dem Durchsuchen von Protokolldateien verschwendet wird, führt wahrscheinlich zu unzufriedenen Benutzern oder entgangenen Einnahmen.

Daher ist Firebase Crashlytics, ein leichtgewichtiger Echtzeit-Crash-Reporter, der Ihnen hilft, Stabilitätsprobleme zu verfolgen, zu priorisieren und zu beheben, die die Qualität Ihrer Anwendung beeinträchtigen, von grundlegender Bedeutung. Es spart Ihnen Zeit bei der Fehlersuche, indem es Abstürze intelligent gruppiert und die Umstände hervorhebt, die zu ihnen führen.

Sie können herausfinden, ob ein bestimmter Absturz viele Benutzer betrifft. Sie können Warnungen erhalten, wenn ein Problem plötzlich an Schwere zunimmt, und sogar genau feststellen, welche Codezeilen Abstürze verursachen.

Hier sind die wichtigsten Funktionen des Programms:

  1. Es sammelt Absturzberichte und liefert kontextbezogene Informationen, wobei der Schweregrad und die Häufigkeit der Abstürze hervorgehoben werden.
  2. Crashlytics bietet Crash Insights, hilfreiche Tipps, die häufige Stabilitätsprobleme hervorheben und Ressourcen bereitstellen, die die Fehlersuche, -einordnung und -behebung erleichtern.
  3. Integriert in Analytics
  4. Echtzeit-Warnungen

Schauen wir uns nun an, wie man Crashlytics einrichtet und verwendet.

Schritt 1: Fügen Sie Firebase zu Ihrem Projekt hinzu

Da Crashlytics eines der Produkte der Firebase-Produktreihe ist, müssen Sie Firebase zu Ihrem Projekt hinzufügen. Wir haben im Detail beschrieben, wie das geht [hier] (https://camposha.info/android-examples/add-firebase-to-android/).

Schritt 2: Aktivieren Sie Crashlytics in der Firebase Console.

  • Gehen Sie zum Crashlytics Dashboard in der Firebase Console.

  • Vergewissern Sie sich, dass Ihre Anwendung in der Dropdown-Liste neben Crashlytics oben auf der Seite ausgewählt ist.

  • Klicken Sie auf Crashlytics aktivieren`.

Schritt 3: Fügen Sie das Firebase Crashlytics-Plugin zu Ihrer Anwendung hinzu.

Sie tun dies in der Datei projects/build.gradle. Schauen Sie sich den folgenden Code an, um zu sehen wie:

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

Danach wechselt man in die Datei app/build.gradle und wendet das Crashlytics-Plugin an, und zwar am Anfang dieser Datei:

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'

Schritt 4: Abhängigkeiten hinzufügen

Sie müssen nun das Firebase Crashlytics SDK zu Ihrer App hinzufügen. Dies geschieht in der Datei app/build.gradle unter dem Abschluss dependencies:

For a Kotlin Project:

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

Für ein Java-Projekt:

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

Schritt 5: Erzwingen eines Tests

Ja, Sie müssen einen Test erzwingen, um die Einrichtung von Crashlytics abzuschließen. Das bedeutet, dass wir absichtlich einen Absturz erzwingen werden, um die Ergebnisse in unserem Crashlytics-Dashboard zu sehen.

Um dies zu tun, können wir zum Beispiel eine Schaltfläche zu unserer Anwendung hinzufügen, die beim Anklicken die Anwendung zum Absturz bringt. Hier sind Code-Beispiele:

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

Und in 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));

Führen Sie nun die App aus. Dann drücke den Button, die App wird abstürzen. Navigieren Sie einfach zum [Crashlytics Dashboard] (https://console.firebase.google.com/project/_/crashlytics) der Firebase Console, um Ihren Testabsturz zu sehen.

Das war’s.

Schauen wir uns nun einige einfache isolierte Beispiele an.

Beispiel 1: Firebase Crashlytics Beispiel – Kotlin und Java

Dies ist ein einfaches Firebase Crashlytics Beispiel. Es gibt zwei Aktivitäten, eine in Kotlin, die andere in Java geschrieben.

Schritt 1: Fügen Sie Firebase zu Ihrem Projekt hinzu

Fügen Sie Firebase zu Ihrem Projekt hinzu, wie [hier] beschrieben (https://camposha.info/android-examples/add-firebase-to-android/).

Schritt 2: Abhängigkeiten hinzufügen

Wir müssen Abhängigkeiten zu unserem Projekt hinzufügen. Wir brauchen Abhängigkeiten für unsere Crashlytics. In Ihrer app/build.gradle fügen Sie die Abhängigkeiten wie folgt hinzu:

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

Schritt 3: Internet-Berechtigung hinzufügen

Um sich mit Firebase zu verbinden, benötigen wir eine Internetberechtigung. Fügen Sie die folgende Berechtigung in Ihrer AndroidManifest.xml Datei hinzu:

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

Schritt 4: Layout erstellen

Wir brauchen dieses Layout wirklich nicht. Wir verwenden es nicht einmal. Wir fügen es jedoch hier ein, um Ihnen den gesamten Code im Projekt zu zeigen:

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>

Schritt 5: Code schreiben

Wir werden sowohl Kotlin- als auch Java-Code haben. Hier ist die Haupt-Activity für 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]
    }
}

Und hier ist der Code für Java:

HauptActivity.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]
    }
}

Das war’s.

Download

Laden Sie das Projekt unten herunter:

Nummer Link
1. Code herunterladen