Wenn Ihre Android-App native Bibliotheken enthält, können Sie ab Firebase Crashlytics mit einigen kleinen Änderungen an der Build-Konfiguration Ihrer App vollständige Stack-Traces und detaillierte Absturzberichte für Ihren nativen Code aktivieren.
In dieser Anleitung wird beschrieben, wie Sie Absturzberichte mit der Firebase Crashlytics SDK für NDK.
Informationen zu den ersten Schritten mit Crashlytics auf Ihrer Unity-Plattform finden Sie in der Unity-Startleitfaden.
Hinweis
Falls noch nicht geschehen, fügen Sie Firebase Ihrem Android-Gerät hinzu. Projekt arbeiten. Wenn du noch keine Android-App hast, kannst du eine Beispiel-App.
Empfohlen: Wenn Sie automatisch Navigationspfad-Logs erhalten möchten, um Nutzeraktionen zu verstehen, die zu einem Absturz, einem nicht schwerwiegenden Ereignis oder einem ANR-Ereignis geführt haben, müssen Sie Google Analytics in Ihrem Firebase-Projekt aktivieren.
Wenn in Ihrem vorhandenen Firebase-Projekt Google Analytics nicht vorhanden ist aktiviert ist, können Sie Google Analytics über die den Tab Integrationen Ihrer
in der > ProjekteinstellungenFirebase-Konsole. 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 des 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-Taste zu verwenden, um die Versionierung der Bibliothek zu steuern.
Für eine optimale Nutzung von Crashlytics empfehlen wir Google Analytics wird aktiviert in Ihrem Firebase-Projekt und fügen Ihrer App das Firebase SDK für Google Analytics hinzu.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.3.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 BoM hinzufügen
Wenn Sie Firebase BoM nicht verwenden, müssen Sie jede Firebase-Bibliotheksversion in der entsprechenden Abhängigkeitszeile angeben.
Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir Ihnen dringend, die Bibliotheksversionen mithilfe der BoM zu verwalten. So wird sichergestellt, 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:19.1.0") implementation("com.google.firebase:firebase-analytics:22.1.0") }
Schritt 2: Der App das Gradle-Plug-in Crashlytics hinzufügen
Fügen Sie in der Gradle-Datei auf Stammebene (Projektebene) (
<project>/build.gradle.kts
oder<project>/build.gradle
) dem Blockplugins
das Gradle-Plug-in Crashlytics 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.2" apply false // Add the dependency for the Crashlytics Gradle plugin id("com.google.firebase.crashlytics") version "3.0.2" 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.2' apply false // Add the dependency for the Crashlytics Gradle plugin id 'com.google.firebase.crashlytics' version '3.0.2' 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
In der Gradle-Datei des Moduls (auf App-Ebene)
(normalerweise <project>/<app-module>/build.gradle.kts
oder
<project>/<app-module>/build.gradle
), konfigurieren Sie die Crashlytics-Erweiterung.
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: Automatischen Upload von nativen Symbolen einrichten
Um lesbare Stacktraces nach NDK-Abstürzen zu erstellen, muss Crashlytics dies wissen
zu den Symbolen
in Ihren nativen Binärdateien. Das Gradle-Plug-in Crashlytics
enthält uploadCrashlyticsSymbolFileBUILD_VARIANT
um diesen Prozess zu automatisieren.
Damit Sie auf die Aufgabe zum automatischen Hochladen von Symbolen zugreifen können, müssen Sie dass
nativeSymbolUploadEnabled
in Ihrem Modul (App-Ebene) auftrue
gesetzt ist Gradle-Datei.Damit Methodennamen in Ihren Stacktraces erscheinen, müssen Sie
uploadCrashlyticsSymbolFileBUILD_VARIANT
nach jedem Build Ihrer NDK-Bibliothek. Beispiel:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
Sowohl das Crashlytics SDK für NDK als auch das Gradle-Plug-in Crashlytics hängt davon ab, ob die GNU-Build-ID in den nativen gemeinsam genutzten Objekten vorhanden ist.
Sie können das Vorhandensein dieser ID überprüfen, indem Sie den folgenden Befehl ausführen:
für jedes Binärprogramm. Wenn die Build-ID fehlt, fügen Sie den Flags Ihres Build-Systemsreadelf -n
hinzu, um das Problem zu beheben.-Wl,--build-id
Schritt 5: Einrichtung eines Testabsturzes erzwingen
Um die Einrichtung von Crashlytics abzuschließen und die ersten Daten zu sehen, gehen Sie wie folgt vor: Crashlytics-Dashboard der Firebase-Konsole, Sie müssen einen Test erzwingen Abstürze.
Fügen Sie Ihrer App Code hinzu, mit dem Sie einen Testabsturz erzwingen können.
Mit dem folgenden Code im
MainActivity
deiner App kannst du eine Schaltfläche hinzufügen das beim Drücken der App einen Absturz verursacht. Die Schaltfläche ist mit der Beschriftung „Testabsturz“.Kotlin+KTX
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 Emulator.
Klicken Sie in Ihrer App auf die Schaltfläche „Test Crash“, die Sie mit dem Code oben hinzugefügt haben.
Starten Sie die App nach dem Absturz neu, damit sie den Absturzbericht an Firebase senden kann.
Rufen Sie das Crashlytics-Dashboard der Firebase-Konsole auf, um den Absturz des Tests zu sehen.
Wenn Sie die Konsole aktualisiert haben und der Testabsturz immer noch nicht angezeigt wird nach fünf Minuten Debug-Logging aktivieren um zu sehen, ob Ihre App Absturzberichte sendet.
Das war's auch schon! Crashlytics prüft deine App jetzt auf Abstürze und du
können Absturzberichte und Statistiken im
Crashlytics-Dashboard.
Nächste Schritte
(Empfohlen) Sie können Hilfe beim Beheben von Abstürzen erhalten, die durch native Arbeitsspeicherfehler verursacht wurden. Dazu müssen Sie GWP-ASan-Berichte erfassen. Diese speicherbezogenen Fehler können mit einer Speicherbeschädigung in Ihrer App, was die Hauptursache für Sicherheitslücken ist. Damit du diese Debugging-Funktion nutzen kannst, muss deine App GWP-ASan explizit aktiviert und verwendet das neueste Crashlytics SDK für NDK (Version 18.3.6 oder höher oder Firebase BoM ab Version 31.3.0).
Passen Sie die Einrichtung von Absturzberichten an, indem Sie optionale Berichte, Protokolle, Schlüssel und das Tracking nicht kritischer Fehler hinzufügen.
Binde Google Play ein, damit können Sie die Absturzberichte Ihrer Android-App Google Play direkt im Crashlytics-Dashboard. So können Sie Ihr Dashboard besser auf bestimmte Builds ausrichten.
Fehlerbehebung
Wenn Sie unterschiedliche Stacktraces in der Firebase-Konsole und in Informationen zum Logcat finden Sie in der Anleitung zur Fehlerbehebung.
Alternative Optionen zum Hochladen von Symbolen
Der Hauptworkflow auf dieser Seite gilt für standardmäßige Gradle-Builds. Einige Apps verwenden jedoch eine andere Konfiguration oder andere Tools, z. B. einen anderen Buildprozess als Gradle. In diesen Situationen können folgende Optionen sinnvoll 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 in Gradle einen benutzerdefinierten NDK-Build-Prozess verwenden
- Wenn Ihre nativen Bibliotheken in einem Bibliotheks-/Funktionsmodul erstellt oder von ein Drittanbieter
- Wenn der automatische Upload von Symbolen schlägt fehl oder im Dashboard werden Abstürze ohne Symbol angezeigt
Option: Symbole für Builds ohne Gradle oder nicht zugängliche nicht entfernbare native Bibliotheken hochladen
Diese Option kann in folgenden Situationen hilfreich sein:
Wenn Sie einen anderen Build-Prozess als Gradle verwenden
Wenn die nativen Bibliotheken, die Sie entfernen, auf eine Weise bereitgestellt werden, Sie sind in Gradle-Builds nicht zugänglich.