Android NDK-Absturzberichte abrufen

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

  1. 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.

  2. Empfohlen: Damit Sie Navigationspfadlogs um Nutzeraktionen zu verstehen, die zu einem Absturz, nicht schwerwiegenden oder ANR-Ereignis geführt haben, Sie müssen 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 > Projekteinstellungen in der Firebase-Konsole.

    • Wenn Sie ein neues Firebase-Projekt erstellen, aktivieren Sie Google Analytics während der Projekterstellung.

  3. Ihre App muss die folgenden mindestens erforderlichen Versionen haben:

    • Gradle 8.0
    • Android Gradle Plugin 8.1.0
    • Google-Dienste-Gradle-Plug-in 4.4.1

Schritt 1: Der App das Crashlytics SDK für NDK hinzufügen

In der Gradle-Datei des Moduls (auf App-Ebene) (normalerweise <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle) Fügen Sie die Abhängigkeit für die NDK-Bibliothek Crashlytics 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.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 BoM hinzufügen

Wenn Sie Firebase BoM nicht verwenden, müssen Sie jede Firebase-Bibliotheksversion angeben in der Abhängigkeitszeile ein.

Wenn Sie in Ihrer App mehrere Firebase-Bibliotheken verwenden, empfehlen, Bibliotheksversionen mit der BoM zu verwalten. Dadurch wird sichergestellt, dass alle Versionen kompatibel.

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.0.3")
    implementation("com.google.firebase:firebase-analytics:22.1.0")
}
Suchen Sie nach einem Kotlin-spezifischen Bibliotheksmodul? Beginnt in Oktober 2023 (Firebase BoM 32.5.0) können sowohl Kotlin- als auch Java-Entwickler sind vom Modul der Hauptbibliothek abhängig (Details finden Sie in der FAQs zu dieser Initiative).

Schritt 2: Der App das Gradle-Plug-in Crashlytics hinzufügen

  1. In der Gradle-Datei auf Stammebene (Projektebene) (<project>/build.gradle.kts oder <project>/build.gradle), fügen Sie den Crashlytics-Gradle-Plug-in zum plugins-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.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
    }
  2. In der Gradle-Datei des Moduls (auf App-Ebene) (normalerweise <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle) Fügen Sie 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 des Moduls (auf Anwendungsebene) (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: Automatischen Upload nativer Symbole 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.

  1. Damit Sie auf die Aufgabe für das automatische Hochladen von Symbolen zugreifen können, muss in der Gradle-Datei des Moduls (auf Anwendungsebene) nativeSymbolUploadEnabled auf true festgelegt sein.

  2. 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
  3. Sowohl das Crashlytics SDK für das NDK als auch das Crashlytics Gradle-Plug-in sind auf die Anwesenheit der GNU-Build-ID in den nativen freigegebenen Objekten angewiesen.

    Sie können das Vorhandensein dieser ID überprüfen, indem Sie den folgenden Befehl ausführen: readelf -n für jede Binärdatei. Wenn die Build-ID fehlt, fügen Sie den Flags Ihres Build-Systems -Wl,--build-id hinzu, um das Problem zu beheben.

Schritt 5: Testabsturz erzwingen, um die Einrichtung abzuschließen

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.

  1. 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));
  2. Erstellen Sie Ihre App und führen Sie sie aus.

  3. Erzwingen Sie den Testabsturz, um den ersten Absturzbericht Ihrer App zu senden:

    1. Öffnen Sie die App über Ihr Testgerät oder Ihren Emulator.

    2. Tippen Sie in Ihrer App auf die Schaltfläche „Testabsturz“. die Sie mithilfe des Codes oben.

    3. Nachdem deine App abgestürzt ist, starte sie neu, damit deine App den Absturz senden kann an Firebase übertragen.

  4. Gehen Sie zum Crashlytics-Dashboard der Firebase, um den Testabsturz 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 überwacht jetzt Ihre App auf Abstürze. Sie können Absturzberichte und Statistiken im Crashlytics-Dashboard aufrufen und untersuchen.

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 Sie diese Funktion zur Fehlerbehebung nutzen können, muss GWP-ASan explizit in Ihrer App aktiviert sein und die neueste Version des Crashlytics SDK für NDK (Version 18.3.6 oder höher bzw. Firebase BoM Version 31.3.0 oder höher) verwendet werden.

  • Anpassen Einrichtung von Absturzberichten, indem Sie Opt-in-Berichte, Protokolle, Schlüssel und nicht schwerwiegenden Fehlern nachverfolgt.

  • Binde Google Play ein, damit können Sie die Absturzberichte Ihrer Android-App Google Play direkt im Crashlytics-Dashboard. So können Sie sich auf bestimmte Builds in Ihrem Dashboard konzentrieren.

Fehlerbehebung

Wenn Sie in der Firebase-Konsole und im Logcat unterschiedliche Stack-Traces sehen, lesen Sie den Leitfaden 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 die Aufgabe zum automatischen Hochladen von Symbolen fehlschlägt oder im Dashboard nicht symbolisierte Abstürze angezeigt werden

Option: Laden Sie Symbole für Nicht-Gradle-Builds oder nicht zugängliche native Bibliotheken ohne Debugging hoch.

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.