Catch up on everthing we announced at this year's Firebase Summit. Learn more

Android NDK-Absturzberichte abrufen

Wenn Ihr Android App enthält native Bibliotheken , können Sie die vollständigen Stack - Traces und detaillierte Fehlerberichte für Ihren nativen Code von Firebase Crashlytics mit einem paar kleinen Updates zu Ihrem App Build - Konfiguration aktivieren.

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

Wenn Sie suchen , wie mit Crashlytics in der Unity - Projekte , um loszulegen, überprüfen Sie die aus Unity Started Erste .

Bevor Sie beginnen

  1. Wenn Sie nicht bereits haben, fügen Sie Firebase zu dem Android - Projekt. Wenn Sie nicht über einen Android - App haben, können Sie eine Download - Beispielanwendung .

  2. Empfohlen: Um Funktionen wie absturzfrei Benutzer zu erhalten, Paniermehl Protokolle und Geschwindigkeit Warnungen, müssen Sie Google Analytics in Ihrem Projekt Firebase ermöglichen.

    • Wenn Ihre vorhandene Firebase Projekt nicht Google Analytics aktiviert haben, können Sie Google Analytics aus der aktivieren Register Integrationen Ihrer > Projekteinstellungen in der Konsole Firebase.

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

Schritt 1: Aktivieren Crashlytics in der Konsole Firebase

  1. Gehen Sie auf die Crashlytics Armaturenbrett in der Konsole Firebase.

  2. Stellen Sie sicher , dass Ihre App aus dem Drop - Down - Auswahl neben Crashlytics am oberen Rand der Seite.

  3. Klicken Sie auf Aktivieren Crashlytics.

Schritt 2: Fügen Sie die Firebase Crashlytics SDK für NDK zu Ihrer App

Mit Hilfe der Firebase Android BoM , erklärt die Abhängigkeit für die Crashlytics NDK Android - Bibliothek in Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ).

Für ein optimales Benutzererlebnis Crashlytics, empfehlen wir Google Analytics ermöglicht in Ihrem Firebase - Projekt und das Hinzufügen des Firebase SDK für Google Analytics in Ihrer App.

Java

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

    // 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 des Firebase Android BoM werden, Ihre App immer kompatible Versionen der Firebase Android - Bibliotheken verwenden.

(Alternative) Deklarieren Firebase Bibliothek Abhängigkeiten , ohne die BoM mit

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

Beachten Sie, dass , wenn Sie mehrere Firebase Bibliotheken in Ihrer Anwendung verwenden wir mit der BoM empfehlen Bibliothek Versionen zu verwalten, die sicherstellt , 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.5'
    implementation 'com.google.firebase:firebase-analytics:20.0.0'
}

Kotlin+KTX

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

    // 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 des Firebase Android BoM werden, Ihre App immer kompatible Versionen der Firebase Android - Bibliotheken verwenden.

(Alternative) Deklarieren Firebase Bibliothek Abhängigkeiten , ohne die BoM mit

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

Beachten Sie, dass , wenn Sie mehrere Firebase Bibliotheken in Ihrer Anwendung verwenden wir mit der BoM empfehlen Bibliothek Versionen zu verwalten, die sicherstellt , 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.5'
    implementation 'com.google.firebase:firebase-analytics-ktx:20.0.0'
}

Schritt 3: Fügen Sie die Firebase Crashlytics Plugin , um Ihre Anwendung

  1. In Ihrer Projektebene build.gradle Datei der Crashlytics Gradle Plugin als buildscript Abhängigkeit.

    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. In der App-Ebene build.gradle Datei, wenden Sie das Crashlytics Gradle Plugin:

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

In Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ), fügen Sie die firebaseCrashlytics Erweiterung.

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

Erforderlich für targetSdkLevel 30 und höher: Sie müssen durch Hinzufügen der folgenden auf Ihre Pointer Tagging in Ihrer Anwendung deaktivieren AndroidManifest.xml :

<application android:allowNativeHeapPointerTagging="false">
...
</application>

Weitere Informationen lesen Entwickler Unterstützung für Tagged Pointers .

Schritt 5: automatische Hochladen von nativen Symbole einrichten

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

  1. Damit Sie die Aufgabe , für die automatisierte Symbol Upload zugreifen können, stellen Sie sicher , dass nativeSymbolUploadEnabled eingestellt ist true in Ihrem Modul (app-Ebene) Gradle Datei.

  2. Für Methodennamen in Ihrem Stack - Traces angezeigt werden , müssen Sie explizit die aufrufen uploadCrashlyticsSymbolFile BUILD_VARIANT Aufgabe nach jedem Build Ihrer NDK Bibliothek. Zum Beispiel:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. Sowohl das Crashlytics SDK für NDK als auch das Crashlytics Gradle-Plugin 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 Sie readelf -n auf jeder binär. Wenn die Build - ID nicht vorhanden ist, fügen Sie -Wl,--build-id zu Ihrem Build - System - Flags , das Problem zu beheben.

Schritt 6: Kraft ein Test Crash Setup zu beenden

Um die Einrichtung von Crashlytics abzuschließen und die ersten 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 Ihrer App verwenden MainActivity eine Schaltfläche , um Ihre Anwendung hinzuzufügen , die, wenn sie gedrückt wird , einen Absturz verursacht. Die Schaltfläche ist mit "Testabsturz" 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 und führen Sie Ihre App aus.

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

    1. Öffnen Sie Ihre App von Ihrem Testgerät oder Emulator.

    2. Klicken Sie in Ihrer App auf die Schaltfläche "Absturz testen", 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. Gehen Sie auf die Crashlytics Armaturenbrett der Firebase Konsole Ihren Test Absturz zu sehen.

    Wenn Sie die Konsole aktualisiert haben und Sie immer noch nicht den Test Crash nach fünf Minuten zu sehen, aktivieren Sie die Debug - Protokollierung zu sehen , ob Ihre App Berichte Absturz zu senden.


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



Alternative Optionen zum Hochladen von Symbolen

Der Hauptworkflow auf dieser Seite oben gilt für Standard-Gradle-Builds. Einige Apps verwenden jedoch eine andere Konfiguration oder andere Tools (z. B. einen anderen Build-Prozess als Gradle). In diesen Situationen können die folgenden Optionen hilfreich sein, um Symbole erfolgreich hochzuladen.

Option: Upload Symbole für Bibliotheksmodule und externe Abhängigkeiten

Diese Option kann in folgenden Situationen hilfreich sein:

  • Wenn Sie einen benutzerdefinierten NDK-Buildprozess in Gradle verwenden
  • Wenn Ihre nativen Bibliotheken in einem Bibliotheks-/Funktionsmodul integriert sind oder von einem Drittanbieter bereitgestellt werden
  • Wenn die automatische Symbol Upload Aufgabe versagt oder Sie sehen unsymbolicated Abstürze im Armaturenbrett

Option: Upload Symbole für nicht-Gradle bauen oder unzugängliche unstripped nativen Bibliotheken

Diese Option kann in folgenden Situationen hilfreich sein:

  • Wenn Sie einen anderen Build-Prozess als Gradle verwenden

  • Wenn Ihnen Ihre ungestrippten nativen Bibliotheken auf eine Weise zur Verfügung gestellt werden, dass sie während der Gradle-Builds nicht zugänglich sind



Fehlerbehebung

Wenn Sie verschiedenen Stack - Traces in der Firebase - Konsole und in der logcat sind zu sehen, beziehen sich auf die Fehlersuche .

Nächste Schritte

  • Passen Sie Ihre Crash - Bericht Setup durch Hinzufügen von Opt-in - Reporting, Protokolle, Schlüssel und Verfolgung von nicht-tödlichen Fehler.