Pierwsze kroki z Firebase Crashlytics


Jeśli Twoja aplikacja na Androida zawiera biblioteki natywne, możesz włączyć pełne zrzuty stosu i szczegółowe raporty o awariach w przypadku kodu natywnego w Firebase Crashlytics, wprowadzając kilka niewielkich zmian w konfiguracji kompilacji aplikacji.

Z tego przewodnika dowiesz się, jak skonfigurować raportowanie o awariach za pomocą pakietu SDK Firebase Crashlytics dla NDK.

Jeśli chcesz dowiedzieć się, jak zacząć korzystać z Crashlytics w projektach Unity, zapoznaj się z przewodnikiem dla początkujących użytkowników Unity.

Zanim zaczniesz

  1. Jeśli nie korzystasz jeszcze z Firebase, dodaj ją do projektu na Androida. Jeśli nie masz aplikacji na Androida, możesz pobrać przykładową aplikację.

  2. Zalecane: aby automatycznie otrzymywać dzienniki ścieżki i poznawać działania użytkowników, które doprowadziły do awarii, błędu niekrytycznego lub zdarzenia ANR, musisz włączyć Google Analytics w projekcie Firebase.

    • Jeśli w dotychczasowym projekcie Firebase nie masz włączonej usługi Google Analytics, możesz ją włączyć na karcie Integracje w sekcji  > Ustawienia projektu w konsoli Firebase.Google Analytics

    • Jeśli tworzysz nowy projekt Firebase, włącz Google Analytics w trakcie procesu tworzenia projektu.

  3. Sprawdź, czy Twoja aplikacja ma te minimalne wymagane wersje:

    • Gradle 8.0
    • Wtyczka Androida do obsługi Gradle w wersji 8.1.0
    • Wtyczka Gradle usług Google w wersji 4.4.1

Krok 1. Dodaj do aplikacji pakiet SDK Crashlytics dla NDK

pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) dodaj zależność z Crashlytics biblioteką NDK na Androida. Zalecamy używanie symbolu Firebase Android BoM do kontrolowania wersji biblioteki.

Aby w pełni korzystać z Crashlytics, zalecamy włączenie Google Analytics w projekcie Firebase i dodanie do aplikacji pakietu SDK Firebase dla Google Analytics.

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

Gdy korzystamy z Firebase Android BoM, aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.

(Alternatywnie)  Dodaj zależności biblioteki Firebase bez użycia BoM

Jeśli nie chcesz używać Firebase BoM, musisz określić wersję każdej biblioteki Firebase w wierszu zależności.

Pamiętaj, że jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy używanie BoM do zarządzania wersjami bibliotek, co zapewnia zgodność wszystkich wersji.

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

Krok 2. Dodaj do aplikacji Crashlytics wtyczkę Gradle

  1. W pliku Gradle na poziomie głównym (projektu) (<project>/build.gradle.kts lub <project>/build.gradle) dodaj wtyczkę Gradle Crashlytics do bloku plugins:

    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
    }
  2. W pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) dodaj Crashlytics wtyczkę Gradle:

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

Krok 3. Dodaj rozszerzenie Crashlytics do kompilacji

W pliku Gradle modułu (na poziomie aplikacji) (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle) skonfiguruj rozszerzenie Crashlytics.

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

Krok 4. Skonfiguruj automatyczne przesyłanie symboli natywnych

Aby generować czytelne ślady stosu z awarii NDK, Crashlytics musi znać symbole w Twoich binarnych plikach natywnych. CrashlyticsWtyczka GradleuploadCrashlyticsSymbolFileBUILD_VARIANT zawiera zadanie uploadCrashlyticsSymbolFileBUILD_VARIANT, które automatyzuje ten proces.

  1. Aby mieć dostęp do zadania automatycznego przesyłania symboli, upewnij się, że w pliku Gradle na poziomie modułu (aplikacji) wartość nativeSymbolUploadEnabled jest ustawiona na true.

  2. Aby nazwy metod pojawiały się w śladach stosu, musisz jawnie wywołać zadanie uploadCrashlyticsSymbolFileBUILD_VARIANT po każdej kompilacji biblioteki NDK. Przykład:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
  3. Zarówno pakiet SDK Crashlytics dla NDK, jak i wtyczka Gradle Crashlytics zależą od obecności identyfikatora kompilacji GNU w natywnych obiektach współdzielonych.

    Obecność tego identyfikatora możesz sprawdzić, uruchamiając polecenie readelf -n w przypadku każdego pliku binarnego. Jeśli identyfikator kompilacji nie jest dostępny, dodaj do flag systemu kompilacji wartość -Wl,--build-id, aby rozwiązać ten problem.

Krok 5. Wymuś awarię testową, aby zakończyć konfigurację

Aby dokończyć konfigurowanie Crashlytics i wyświetlić pierwsze dane na panelu Crashlytics w konsoli Firebase, musisz wymusić testowe awarie.

  1. Dodaj do aplikacji kod, którego możesz użyć, aby wymusić awarię testową.

    MainActivity aplikacji możesz użyć tego kodu, aby dodać przycisk, który po naciśnięciu spowoduje awarię. Przycisk ma etykietę „Test Crash”.

    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));
  2. Skompiluj i uruchom aplikację.

  3. Wymuś awarię testową, aby wysłać pierwszy raport o awarii aplikacji:

    1. Otwórz aplikację na urządzeniu testowym lub emulatorze.

    2. W aplikacji kliknij przycisk „Test Crash” (Testuj awarię), który został dodany za pomocą powyższego kodu.

    3. Po awarii aplikacji uruchom ją ponownie, aby mogła wysłać raport o awarii do Firebase.

  4. Otwórz Crashlyticspanel konsoli Firebase, aby zobaczyć awarię testu.

    Jeśli po odświeżeniu konsoli nadal nie widzisz testowego błędu po 5 minutach, włącz rejestrowanie debugowania, aby sprawdzić, czy aplikacja wysyła raporty o błędach.


To wszystko. Crashlytics monitoruje teraz Twoją aplikację pod kątem awarii. Raporty i statystyki dotyczące awarii możesz wyświetlać i analizować w panelu Crashlytics.

Dalsze kroki

  • (Zalecane) Uzyskaj pomoc w debugowaniu awarii spowodowanych błędami pamięci natywnej, zbierając raporty GWP-ASan. Te błędy związane z pamięcią mogą być powiązane z uszkodzeniem zawartości pamięci w aplikacji, co jest główną przyczyną luk w zabezpieczeniach aplikacji. Aby korzystać z tej funkcji debugowania, upewnij się, że w Twojej aplikacji jest wyraźnie włączony GWP-ASan i że korzysta ona z najnowszego Crashlyticspakietu SDK dla NDK (wersja 18.3.6 lub nowsza albo Firebase BoMwersja 31.3.0 lub nowsza).

  • Dostosuj konfigurację raportów o awariach, dodając raportowanie za zgodą użytkowników, logi, klucze i śledzenie błędów niekrytycznych.

  • Zintegruj z Google Play, aby filtrować raporty o awariach aplikacji na Androida według Google Play bezpośrednio w Crashlytics panelu. Dzięki temu możesz lepiej dostosować panel do konkretnych wersji.

Rozwiązywanie problemów

Jeśli w Firebase konsoli i w logcat zobaczysz różne ślady stosu, zapoznaj się z przewodnikiem rozwiązywania problemów.



Alternatywne opcje przesyłania symboli

Główny przepływ pracy na tej stronie dotyczy standardowych kompilacji Gradle. Niektóre aplikacje używają jednak innej konfiguracji lub narzędzi (np. procesu kompilacji innego niż Gradle). W takich sytuacjach pomocne mogą być te opcje:

Opcja: przesyłanie symboli modułów biblioteki i zależności zewnętrznych

Ta opcja może być przydatna w tych sytuacjach:

  • Jeśli w Gradle używasz dostosowanego procesu kompilacji NDK
  • Jeśli biblioteki natywne są wbudowane w moduł biblioteki lub moduł funkcji albo dostarczane przez firmę zewnętrzną
  • Jeśli automatyczne przesyłanie symboli nie działa lub w panelu widzisz awarie bez symboli

Opcja: przesyłanie symboli w przypadku kompilacji innych niż Gradle lub niedostępnych nieskompresowanych bibliotek natywnych

Ta opcja może być przydatna w tych sytuacjach:

  • Jeśli używasz procesu kompilacji innego niż Gradle

  • Jeśli nieskompresowane biblioteki natywne są udostępniane w taki sposób, że nie są dostępne podczas kompilacji Gradle