Check out what’s new from Firebase at Google I/O 2022. Learn more

Erhalten Sie Android NDK-Absturzberichte

Wenn Ihre Android-App native Bibliotheken enthält , können Sie mit ein paar kleinen Aktualisierungen der Build-Konfiguration Ihrer App vollständige Stacktraces und detaillierte Absturzberichte für Ihren nativen Code von Firebase Crashlytics aktivieren.

In dieser Anleitung wird beschrieben, wie Sie Absturzberichte mit dem Firebase Crashlytics SDK für NDK konfigurieren.

Wenn Sie nach den ersten Schritten mit Crashlytics in Ihren Unity-Projekten suchen, sehen Sie sich den Unity-Leitfaden „Erste Schritte“ an.

Bevor Sie beginnen

  1. Fügen Sie Ihrem Android-Projekt Firebase hinzu , falls Sie dies noch nicht getan haben. Wenn Sie keine Android-App haben, können Sie eine Beispiel-App herunterladen.

  2. Empfohlen : Um Funktionen wie absturzfreie Benutzer, Breadcrumb-Protokolle und Geschwindigkeitswarnungen zu erhalten, müssen Sie Google Analytics in Ihrem Firebase-Projekt aktivieren.

    • Wenn für Ihr vorhandenes Firebase-Projekt Google Analytics nicht aktiviert ist, können Sie Google Analytics über die Registerkarte „ Integrationen “ Ihrer > Projekteinstellungen in der Firebase-Konsole aktivieren.

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

Schritt 1 : Fügen Sie Ihrer App das Firebase Crashlytics SDK für NDK hinzu

Deklarieren Sie mithilfe der Firebase Android BoM die Abhängigkeit für die Crashlytics NDK Android-Bibliothek in Ihrer Modul-Gradle-Datei (auf App-Ebene) (normalerweise app/build.gradle ).

Für ein optimales Erlebnis mit Crashlytics empfehlen wir , Google Analytics in Ihrem Firebase-Projekt zu aktivieren und Ihrer App das Firebase SDK für Google Analytics hinzuzufügen.

Java

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.0.2')

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

Durch die Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der Firebase Android-Bibliotheken.

(Alternative) Deklarieren Sie Abhängigkeiten der Firebase-Bibliothek, ohne die Stückliste zu verwenden

Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

Beachten Sie, dass wir bei Verwendung mehrerer Firebase-Bibliotheken in Ihrer App dringend empfehlen, die BoM zum Verwalten von Bibliotheksversionen zu verwenden, um sicherzustellen, dass alle Versionen kompatibel sind.

dependencies {
    // Declare 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:18.2.10'
    implementation 'com.google.firebase:firebase-analytics:21.0.0'
}

Kotlin+KTX

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:30.0.2')

    // Declare 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-ktx'
}

Durch die Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der Firebase Android-Bibliotheken.

(Alternative) Deklarieren Sie Abhängigkeiten der Firebase-Bibliothek, ohne die Stückliste zu verwenden

Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

Beachten Sie, dass wir bei Verwendung mehrerer Firebase-Bibliotheken in Ihrer App dringend empfehlen, die BoM zum Verwalten von Bibliotheksversionen zu verwenden, um sicherzustellen, dass alle Versionen kompatibel sind.

dependencies {
    // Declare 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:18.2.10'
    implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
}

Schritt 2 : Fügen Sie Ihrer App das Firebase Crashlytics-Plugin hinzu

  1. Fügen Sie in Ihrer build.gradle -Datei auf Projektebene das Crashlytics-Gradle-Plug-in als Buildscript-Abhängigkeit hinzu.

    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.8.1'
        }
    }
    
    allprojects {
        repositories {
            // Check that you have Google's Maven repository (if not, add it).
            google()
        }
    }
  2. Wenden Sie in Ihrer build.gradle -Datei auf App-Ebene das Crashlytics-Gradle-Plugin an:

    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 3 : Fügen Sie Ihrem Build die Erweiterung firebaseCrashlytics

Fügen Sie in Ihrer Modul-Gradle-Datei (auf App-Ebene) (normalerweise app/build.gradle ) die Erweiterung firebaseCrashlytics hinzu.

Java

// ...

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

Kotlin+KTX

// ...

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 : Richten Sie das automatische Hochladen von nativen Symbolen ein

Um lesbare Stacktraces von NDK-Abstürzen zu erstellen, muss Crashlytics die Symbole in Ihren nativen Binärdateien kennen. Das Crashlytics Gradle-Plug-in enthält die Aufgabe uploadCrashlyticsSymbolFile BUILD_VARIANT , um diesen Prozess zu automatisieren.

  1. Damit Sie auf die Aufgabe für das automatisierte Hochladen von Symbolen zugreifen können, stellen Sie sicher, dass nativeSymbolUploadEnabled in Ihrer Gradle-Datei auf Modulebene (auf App-Ebene) auf „ true “ gesetzt ist.

  2. Damit Methodennamen in Ihren Stacktraces erscheinen, müssen Sie die Aufgabe uploadCrashlyticsSymbolFile BUILD_VARIANT nach jedem Build Ihrer NDK-Bibliothek explizit aufrufen. Zum Beispiel:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Sowohl das Crashlytics-SDK für NDK als auch das Crashlytics-Gradle-Plug-in hängen vom Vorhandensein der GNU-Build-ID in den nativen gemeinsam genutzten Objekten ab.

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

Schritt 5 : Erzwingen Sie einen Testabsturz, um die Einrichtung abzuschließen

Um die Einrichtung von Crashlytics abzuschließen und erste Daten im Crashlytics-Dashboard der Firebase-Konsole anzuzeigen, müssen Sie einen Testabsturz erzwingen.

  1. Fügen Sie Ihrer App Code hinzu, mit dem Sie einen Testabsturz erzwingen können.

    Sie können den folgenden Code in der MainActivity Ihrer App verwenden, um Ihrer App eine Schaltfläche hinzuzufügen, die beim Drücken einen Absturz verursacht. Die Schaltfläche ist mit "Test Crash" beschriftet.

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

    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))
    
  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 Ihre App auf Ihrem Testgerät oder Emulator.

    2. Klicken Sie in Ihrer App auf die Schaltfläche „Test Crash“, die Sie mit dem obigen Code hinzugefügt haben.

    3. Nachdem Ihre App abgestürzt ist, starten Sie sie neu, damit Ihre App den Absturzbericht an Firebase senden kann.

  4. Rufen Sie das Crashlytics-Dashboard der Firebase-Konsole auf, um Ihren Testabsturz anzuzeigen.

    Wenn Sie die Konsole aktualisiert haben und den Testabsturz nach fünf Minuten immer noch nicht sehen, aktivieren Sie die Debug-Protokollierung , um zu sehen, ob Ihre App Absturzberichte sendet.


Und das ist es! Crashlytics überwacht Ihre App jetzt auf Abstürze, und Sie können Absturzberichte und -statistiken im Crashlytics-Dashboard anzeigen und untersuchen.



Alternative Optionen zum Hochladen von Symbolen

Der Hauptarbeitsablauf auf dieser Seite oben gilt für Standard-Gradle-Builds. Einige Apps verwenden jedoch eine andere Konfiguration oder Tools (z. B. einen anderen Build-Prozess als Gradle). In diesen Situationen 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 den folgenden Situationen hilfreich sein:

  • Wenn Sie einen benutzerdefinierten NDK-Build-Prozess in Gradle verwenden
  • Wenn Ihre nativen Bibliotheken in einem Bibliotheks-/Funktionsmodul integriert sind oder von einem Drittanbieter bereitgestellt werden
  • Wenn die Aufgabe zum automatischen Hochladen von Symbolen fehlschlägt oder Sie nicht symbolisierte Abstürze im Dashboard sehen

Option : Hochladen von Symbolen für Nicht-Gradle-Builds oder unzugängliche native Bibliotheken ohne Strippen

Diese Option kann in den folgenden Situationen hilfreich sein:

  • Wenn Sie einen anderen Build-Prozess als Gradle verwenden

  • Wenn Ihnen Ihre nicht gestrippten nativen Bibliotheken auf irgendeine Weise bereitgestellt werden, dass sie während Gradle-Builds nicht zugänglich sind



Fehlerbehebung

Wenn Sie unterschiedliche Stacktraces in der Firebase-Konsole und im Logcat sehen, lesen Sie den Leitfaden zur Fehlerbehebung .

Nächste Schritte

  • Passen Sie die Einrichtung Ihres Absturzberichts an, indem Sie Opt-in-Berichte, Protokolle, Schlüssel und die Verfolgung nicht schwerwiegender Fehler hinzufügen.

  • Integrieren Sie Google Play , damit Sie die Absturzberichte Ihrer Android-App direkt im Crashlytics-Dashboard nach Google Play-Track filtern können. Auf diese Weise können Sie Ihr Dashboard besser auf bestimmte Builds konzentrieren.