Wenn Ihre Android-App native Bibliotheken enthält, können Sie in Firebase Crashlytics vollständige Stacks und detaillierte Absturzberichte für Ihren nativen Code aktivieren. Dazu sind nur wenige kleine Änderungen an der Build-Konfiguration Ihrer App erforderlich.
In dieser Anleitung wird beschrieben, wie Sie die Absturzberichterstattung mit dem Firebase Crashlytics SDK für NDK konfigurieren.
Wenn Sie wissen möchten, wie Sie Crashlytics in Ihren Unity-Projekten verwenden können, lesen Sie den Unity-Leitfaden für die ersten Schritte.
Hinweis
Falls noch nicht geschehen, fügen Sie Ihrem Android-Projekt Firebase hinzu. Wenn Sie keine Android-App haben, können Sie eine Beispiel-App herunterladen.
Empfohlen: Wenn Sie automatisch Navigationspfadlogs erhalten möchten, um Nutzeraktionen nachzuvollziehen, die zu einem Absturz‑, nicht schwerwiegenden oder ANR-Ereignis geführt haben, müssen Sie Google Analytics in Ihrem Firebase-Projekt aktivieren.
Wenn Google Analytics für Ihr vorhandenes Firebase-Projekt nicht aktiviert ist, können Sie Google Analytics in der Firebase Console auf dem Tab Integrationen unter
aktivieren. > Projekteinstellungen Wenn Sie ein neues Firebase-Projekt erstellen, aktivieren Sie Google Analytics während der Projekterstellung.
Ihre App muss die folgenden Mindestversionen haben:
- Gradle 8.0
- Android-Gradle-Plug-in 8.1.0
- Google-Dienste-Gradle-Plug-in 4.4.1
Schritt 1: Der App das Crashlytics SDK für NDK hinzufügen
Fügen Sie in der Gradle-Datei Ihres Moduls (auf App-Ebene) (in der Regel<project>/<app-module>/build.gradle.kts
oder <project>/<app-module>/build.gradle
) die Abhängigkeit für die Crashlytics-NDK-Bibliothek für Android hinzu. Wir empfehlen, die Firebase Android BoM zu verwenden, um die Versionsverwaltung der Bibliothek zu steuern.
Für eine optimale Nutzung von Crashlytics empfehlen wir, Google Analytics in Ihrem Firebase-Projekt zu aktivieren und das Firebase SDK für Google Analytics in Ihre App einzubinden.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.2.0")) // Add the dependencies for the Crashlytics NDK and Analytics libraries // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk") implementation("com.google.firebase:firebase-analytics") }
Mit der Firebase Android BoM haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.
(Alternative) Firebase-Bibliotheksabhängigkeiten ohne Verwendung von BoM hinzufügen
Wenn Sie die Firebase BoM nicht verwenden möchten, müssen Sie die Version jeder Firebase-Bibliothek in der entsprechenden Abhängigkeitszeile angeben.
Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir dringend, die BoM zum Verwalten von Bibliotheksversionen zu verwenden, um sicherzustellen, dass alle Versionen kompatibel sind.
dependencies { // Add the dependencies for the Crashlytics NDK and Analytics libraries // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-crashlytics-ndk:20.0.1") implementation("com.google.firebase:firebase-analytics:23.0.0") }
Schritt 2: Crashlytics-Gradle-Plug-in zur App hinzufügen
Fügen Sie in der Gradle-Datei auf Stammebene (Projektebene) (
<project>/build.gradle.kts
oder<project>/build.gradle
) das Gradle-Plug-in Crashlytics demplugins
-Block hinzu:Kotlin
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id("com.android.application") version "8.1.4" apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id("com.google.gms.google-services") version "4.4.3" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.6" apply false }
Groovy
plugins { // Make sure that you have the AGP plugin 8.1+ dependency id 'com.android.application' version '8.1.4' apply false // ... // Make sure that you have the Google services Gradle plugin 4.4.1+ dependency id 'com.google.gms.google-services' version '4.4.3' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.6' apply false }
Fügen Sie in der Gradle-Datei des Moduls (auf App-Ebene) (in der Regel
<project>/<app-module>/build.gradle.kts
oder<project>/<app-module>/build.gradle
) das Gradle-Plug-in Crashlytics hinzu:Kotlin
plugins { id("com.android.application") // ... // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") }
Groovy
plugins { id 'com.android.application' // ... // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' }
Schritt 3: Crashlytics-Erweiterung zum Build hinzufügen
Konfigurieren Sie die Crashlytics-Erweiterung in der Gradle-Datei Ihres Moduls (auf App-Ebene) (in der Regel <project>/<app-module>/build.gradle.kts
oder <project>/<app-module>/build.gradle
).
Kotlin
import com.google.firebase.crashlytics.buildtools.gradle.CrashlyticsExtension // ... android { // ... buildTypes { getByName("release") { // Add this extension configure<CrashlyticsExtension> { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled = true } } } }
Groovy
// ... android { // ... buildTypes { release { // Add this extension firebaseCrashlytics { // Enable processing and uploading of native symbols to Firebase servers. // By default, this is disabled to improve build speeds. // This flag must be enabled to see properly-symbolicated native // stack traces in the Crashlytics dashboard. nativeSymbolUploadEnabled true } } } }
Schritt 4: Automatisches Hochladen von nativen Symbolen einrichten
Damit lesbare Stacktraces aus NDK-Abstürzen generiert werden können, muss Crashlytics die Symbole in Ihren nativen Binärdateien kennen. Das Crashlytics-Gradle-Plugin enthält die Aufgabe uploadCrashlyticsSymbolFileBUILD_VARIANT
, um diesen Prozess zu automatisieren.
Damit Sie auf die Aufgabe für das automatische Hochladen von Symbolen zugreifen können, muss in der Gradle-Datei Ihres Moduls (auf Anwendungsebene)
nativeSymbolUploadEnabled
auftrue
gesetzt sein.Damit Methodennamen in Ihren Stacktraces angezeigt werden, müssen Sie den
uploadCrashlyticsSymbolFileBUILD_VARIANT
-Task nach jedem Build Ihrer NDK-Bibliothek explizit aufrufen. Beispiel:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Sowohl das Crashlytics SDK für NDK als auch das Crashlytics Gradle-Plug-in sind davon abhängig, dass die GNU-Build-ID in den nativen freigegebenen Objekten vorhanden ist.
Sie können das Vorhandensein dieser ID prüfen, indem Sie
für jede Binärdatei ausführen. Wenn die Build-ID fehlt, fügen Siereadelf -n
zu den Flags Ihres Build-Systems hinzu, um das Problem zu beheben.-Wl,--build-id
Schritt 5: Testabsturz erzwingen, um die Einrichtung abzuschließen
Damit Sie die Einrichtung von Crashlytics abschließen und erste Daten im Crashlytics-Dashboard der Firebase Console sehen können, müssen Sie einen Testabsturz erzwingen.
Fügen Sie Ihrer App Code hinzu, mit dem Sie einen Testabsturz erzwingen können.
Mit dem folgenden Code in der Datei
MainActivity
Ihrer App können Sie einen Button hinzufügen, der beim Drücken einen Absturz verursacht. Die Schaltfläche ist mit „Testabsturz“ beschriftet.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));
Erstellen Sie Ihre App und führen Sie sie aus.
Erzwingen Sie den Testabsturz, um den ersten Absturzbericht Ihrer App zu senden:
Öffnen Sie Ihre App auf Ihrem Testgerät oder im Emulator.
Klicken Sie in Ihrer App auf die Schaltfläche „Testabsturz“, die Sie mit dem oben stehenden Code hinzugefügt haben.
Starten Sie die App nach dem Absturz neu, damit der Absturzbericht an Firebase gesendet werden kann.
Rufen Sie das Crashlytics-Dashboard der Firebase-Konsole auf, um den Testabsturz zu sehen.
Wenn Sie die Konsole aktualisiert haben und der Testabsturz nach fünf Minuten immer noch nicht angezeigt wird, aktivieren Sie das Debug-Logging, um zu sehen, ob Ihre App Absturzberichte sendet.
Das war's schon. Crashlytics überwacht jetzt Ihre App auf Abstürze. Sie können Absturzberichte und Statistiken im Crashlytics-Dashboard ansehen und untersuchen.
Nächste Schritte
(Empfohlen) Hilfe beim Debuggen von Abstürzen, die durch native Arbeitsspeicherfehler verursacht werden, erhalten Sie durch Erheben von GWP-ASan-Berichten. Diese speicherbezogenen Fehler können mit Speicherschäden in Ihrer App zusammenhängen, die die Hauptursache für Sicherheitslücken in Apps sind. Damit Sie diese Debugging-Funktion nutzen können, muss in Ihrer App GWP-ASan explizit aktiviert sein und das aktuelle Crashlytics SDK für NDK (Version 18.3.6 oder höher oder Firebase BoM Version 31.3.0 oder höher) verwendet werden.
Absturzberichte anpassen: Sie können Opt-in-Berichte, Protokolle, Schlüssel und das Tracking nicht schwerwiegender Fehler hinzufügen.
Mit Google Play integrieren, damit Sie die Absturzberichte Ihrer Android-App direkt im Crashlytics-Dashboard nach Google Play-Track filtern können. So können Sie Ihr Dashboard besser auf bestimmte Builds ausrichten.
Fehlerbehebung
Wenn Sie in der Firebase-Konsole und im Logcat unterschiedliche Stacktraces sehen, lesen Sie die Anleitung zur Fehlerbehebung.
Alternative Optionen zum Hochladen von Symbolen
Der Hauptworkflow auf dieser Seite oben gilt für Standard-Gradle-Builds. Bei einigen Apps wird jedoch eine andere Konfiguration oder andere Tools verwendet (z. B. ein anderer Build-Prozess als Gradle). In diesen Fällen können die folgenden Optionen hilfreich sein, um Symbole erfolgreich hochzuladen.
Option: Symbole für Bibliotheksmodule und externe Abhängigkeiten hochladen
Diese Option kann in folgenden Situationen hilfreich sein:
- Wenn Sie einen benutzerdefinierten NDK-Build-Prozess in Gradle verwenden
- Wenn Ihre nativen Bibliotheken in einem Bibliotheks-/Funktionsmodul erstellt oder von einem Drittanbieter bereitgestellt werden
- Wenn die Aufgabe zum automatischen Hochladen von Symbolen fehlschlägt oder im Dashboard nicht symbolisierte Abstürze angezeigt werden
Option: Symbole für Builds ohne Gradle oder nicht zugängliche, nicht entfernte native Bibliotheken hochladen
Diese Option kann in folgenden Situationen hilfreich sein:
Wenn Sie einen anderen Build-Prozess als Gradle verwenden
Wenn Ihre nicht bereinigten nativen Bibliotheken auf eine Weise bereitgestellt werden, die den Zugriff während Gradle-Builds verhindert