Otrzymuj raporty o awariach Androida NDK

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

W tym przewodniku opisano, jak skonfigurować raporty o awariach za pomocą Pakiet SDK Firebase Crashlytics dla NDK.

Jeśli szukasz informacji o tym, jak zacząć korzystać z usługi Crashlytics na platformie Unity projektów, zapoznaj się z Przewodnik dla początkujących Unity

Zanim zaczniesz

  1. Dodaj Firebase do swojego urządzenia z Androidem, chyba że masz to już za sobą. w projektach AI. Jeśli nie masz aplikacji na Androida, możesz ją pobrać przykładową aplikację.

  2. Zalecane: aby automatycznie pobierać logi menu nawigacyjnego aby poznać działania użytkowników, które prowadzą do awarii, zdarzeń niekrytycznych lub błędów 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.

    • Jeśli tworzysz nowy projekt Firebase, włącz funkcję Google Analytics podczas tworzenia projektu.

  3. Upewnij się, że 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 4.4.1

Krok 1. Dodaj do swojej aplikacji pakiet SDK Crashlytics dla NDK

w pliku Gradle (na poziomie aplikacji) modułu, (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle), dodaj zależność z biblioteką NDK Crashlytics na Androida. Zalecamy użycie metody Firebase Android BoM aby kontrolować obsługę wersji biblioteki.

Aby uzyskać optymalne wyniki w przypadku 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: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")
}

Korzystając z narzędzia Firebase Android BoM, Twoja aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.

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

Jeśli zdecydujesz się nie używać Firebase BoM, musisz określić każdą wersję biblioteki Firebase w jej wierszu zależności.

Jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek. Dzięki temu wszystkie wersje będą ze sobą zgodne.

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")
}
Szukasz modułu biblioteki dla Kotlina? Zaczyna się za Październik 2023 r. (Firebase BoM 32.5.0) zarówno programiści Kotlin, jak i Java zależą od modułu biblioteki głównej (więcej informacji znajdziesz w Najczęstsze pytania na temat tej inicjatywy).

Krok 2. Dodaj do aplikacji wtyczkę Crashlytics Gradle

  1. w pliku Gradle na poziomie głównym (na poziomie projektu); (<project>/build.gradle.kts lub <project>/build.gradle), dodaj Wtyczka Crashlytics Gradle 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.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. w pliku Gradle modułu (na poziomie aplikacji); (zwykle <project>/<app-module>/build.gradle.kts lub <project>/<app-module>/build.gradle), dodaj wtyczkę do Gradle Crashlytics:

    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 do kompilacji rozszerzenie Crashlytics

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 wygenerować czytelne zrzuty stosu z awarii NDK, Crashlytics musi wiedzieć o symbolach w natywnych plikach binarnych. Wtyczka do obsługi Gradle Crashlytics obejmuje uploadCrashlyticsSymbolFileBUILD_VARIANT aby zautomatyzować ten proces.

  1. Aby mieć dostęp do zadania automatycznego przesyłania symboli, upewnij się, że funkcja nativeSymbolUploadEnabled ma w Twoim module (na poziomie aplikacji) wartość true Plik Gradle.

  2. Aby nazwy metod pojawiały się w zrzutach stosu, musisz jawnie wywołać uploadCrashlyticsSymbolFileBUILD_VARIANT po skompilowaniu biblioteki NDK. Przykład:

    >./gradlew app:assembleBUILD_VARIANT\
               app:uploadCrashlyticsSymbolFileBUILD_VARIANT
    
  3. zarówno pakiet Crashlytics SDK dla NDK, jak i wtyczka do Gradle Crashlytics. zależą od obecności identyfikatora kompilacji GNU w natywnych obiektach udostępnionych.

    Obecność tego identyfikatora możesz sprawdzić, uruchamiając polecenie readelf -n w przypadku każdego pliku binarnego. Jeśli identyfikator kompilacji to brak, dodaj -Wl,--build-id do polecenia oznacza rozwiązanie problemu.

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

Aby dokończyć konfigurację Crashlytics i zobaczyć początkowe dane w Panel Crashlytics konsoli Firebase, musisz wymusić test .

  1. Dodaj do aplikacji kod, który pozwala wymusić awarię testową.

    Aby dodać do aplikacji przycisk, który po naciśnięciu powoduje awarię aplikacji, możesz użyć tego kodu w sekcji MainActivity. Przycisk jest oznaczony etykietą „Test Crash” (Awaria testowa).

    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. Zbuduj i uruchom aplikację.

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

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

    2. W aplikacji kliknij przycisk „Test Crash”, który został dodany za pomocą kodu powyżej.

    3. Po awarii aplikacji uruchom ją ponownie, aby aplikacja mogła wysłać informację o awarii raportu do Firebase.

  4. Aby zobaczyć testowy błąd krytyczny, otwórz panel Crashlytics w konsoli Firebase.

    Jeśli po odświeżeniu konsoli nadal nie widzisz awarii testowej po 5 minutach. włącz rejestrowanie debugowania aby sprawdzić, czy aplikacja wysyła raporty o awariach.


To wszystko. Crashlytics monitoruje teraz Twoją aplikację pod kątem awarii, a Ty może wyświetlać i analizować raporty o awariach i statystyki w Panel Crashlytics.

Dalsze kroki

  • (Zalecany) Aby uzyskać pomoc w debugowaniu awarii spowodowanych błędami pamięci natywnej, zbierz raporty GWP-ASan. Te błędy związane z pamięcią mogą być związane z uszkodzeniem pamięci w aplikacji, co jest główną przyczyną luk w zabezpieczeniach aplikacji. Aby korzystać z tej funkcji debugowania, aplikacja musi mieć Jawne włączenie GWP-ASan i korzysta z najnowszego pakietu SDK Crashlytics dla pakietu NDK (wersja 18.3.6 lub nowsza Firebase BoM w wersji 31.3.0 lub nowszej).

  • Dostosuj konfigurację raportowania awarii, dodając opcjonalne raportowanie, dzienniki, klucze i śledzenie błędów niekrytycznych.

  • Zintegruj z usługą Google Play, aby możesz filtrować raporty o awariach aplikacji na Androida według ścieżki Google Play bezpośrednio w Panel Crashlytics. Dzięki temu możesz lepiej skupić się na konkretnych kompilacjach w panelu.

Rozwiązywanie problemów

Jeśli widzisz różne zrzuty stosu w konsoli Firebase i w znajdziesz w przewodniku rozwiązywania problemów.



Alternatywne opcje przesyłania symboli

Główny proces na tej stronie dotyczy standardowych kompilacji Gradle. Niektóre aplikacje korzystają jednak z innej konfiguracji lub narzędzi (np. procesu innego niż Gradle). W takim przypadku możesz użyć poniższych opcji pomocne w przesyłaniu symboli.

Opcja: prześlij symbole modułów biblioteki i zależności zewnętrznych

Ta opcja może być przydatna, gdy:

  • Jeśli używasz niestandardowego procesu kompilacji NDK w Gradle
  • Jeśli natywne biblioteki są zbudowane w bibliotece lub module funkcji lub są dostarczane przez zewnętrzną firmę
  • Jeśli automatyczne przesyłanie symboli nie działa lub na panelu widać niesymbolizowane awarie

Opcja: prześlij symbole dla kompilacji innych niż Gradle lub niedostępnych nieuproszczonych bibliotek natywnych

Ta opcja może być przydatna, gdy:

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

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