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:
- Es sammelt Absturzberichte und liefert kontextbezogene Informationen, wobei der Schweregrad und die Häufigkeit der Abstürze hervorgehoben werden.
- Crashlytics bietet Crash Insights, hilfreiche Tipps, die häufige Stabilitätsprobleme hervorheben und Ressourcen bereitstellen, die die Fehlersuche, -einordnung und -behebung erleichtern.
- Integriert in
Analytics
- 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 |