Jeśli aplikacja na Androida zawiera biblioteki natywne, możesz włączyć pełne zrzuty stosu i szczegółowe raporty o awariach kodu natywnego od Firebase Crashlytics z kilkoma niewielkimi aktualizacjami kompilacji aplikacji konfiguracji.
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 wprowadzający do Unity
Zanim zaczniesz
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ę.
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 istniejącym projekcie Firebase nie ma Google Analytics możesz włączyć Google Analytics z poziomu Karta Integracje
w konsoli > Ustawienia projektuFirebase. Jeśli tworzysz nowy projekt Firebase, włącz funkcję Google Analytics podczas tworzenia projektu.
Upewnij się, że aplikacja ma te minimalne wymagane wersje:
- Gradle 8.0
- Wtyczka Androida do obsługi Gradle w wersji 8.1.0
- Wtyczka do Gradle usług Google w wersji 4.4.1
Krok 1. Dodaj do 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 zapewnić optymalne działanie usługi Crashlytics, zalecamy włączam Google Analytics w projekcie Firebase i dodając do aplikacji pakiet SDK Firebase dla Google Analytics.
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") }
Korzystając z narzędzia Firebase Android BoM, Twoja aplikacja zawsze używa zgodnych wersji bibliotek Firebase na Androida.
(Wersja alternatywna) Dodaj zależności biblioteki Firebase bez użycia komponentu BoM
Jeśli nie chcesz używać biblioteki Firebase BoM, musisz określić każdą wersję biblioteki Firebase w wierszu zależności.
Pamiętaj, że jeśli używasz wielu bibliotek Firebase w aplikacji, zalecamy korzystanie z BoM do zarządzania wersjami biblioteki. Dzięki temu wszystkie wersje są 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.0.3") implementation("com.google.firebase:firebase-analytics:22.1.0") }
Krok 2. Dodaj do aplikacji wtyczkę Crashlytics do Gradle
w pliku Gradle na poziomie głównym (na poziomie projektu); (
<project>/build.gradle.kts
lub<project>/build.gradle
), dodaj Wtyczka Crashlytics Gradle do blokuplugins
: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 }
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj wtyczkę 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.
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.Aby nazwy metod były widoczne w śladach stosu, musisz wyraźnie wywołać zadanie
uploadCrashlyticsSymbolFileBUILD_VARIANT
po każdym wygenerowaniu biblioteki NDK. Przykład:>./gradlew app:assembleBUILD_VARIANT\ app:uploadCrashlyticsSymbolFileBUILD_VARIANT
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 zweryfikować, uruchamiając
w przypadku każdego binarnego pliku. Jeśli identyfikator kompilacji to brak, dodajreadelf -n
do polecenia oznacza rozwiązanie problemu.-Wl,--build-id
Krok 5. Wymuś awarię testową, aby dokończyć konfigurację
Aby dokończyć konfigurację Crashlytics i zobaczyć początkowe dane w Panel Crashlytics konsoli Firebase, musisz wymusić test .
Dodaj do aplikacji kod, który pozwoli Ci wymusić testowy błąd.
Aby dodać przycisk, możesz użyć tego kodu w
MainActivity
aplikacji do aplikacji, która po naciśnięciu powoduje awarię. 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));
Utworzyć i uruchomić aplikację.
Wymuś awarię testową, aby wysłać pierwszy raport o awarii aplikacji:
Otwórz aplikację na urządzeniu testowym lub w emulatorze.
W aplikacji naciśnij przycisk „Test Awaria”. dodany za pomocą kodu powyżej.
Po awarii aplikacji uruchom ją ponownie, aby aplikacja mogła wysłać informację o awarii raport do Firebase.
Otwórz panel Crashlytics w Firebase, aby wyświetlić awarię testową.
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 będzie teraz monitorować Twoją aplikację pod kątem awarii. Możesz wyświetlać raporty i statystyki dotyczące awarii oraz je analizować w panelu 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 przez użytkowników, 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ę raportów o awariach, dodając raporty o awariach, dzienniki, klucze śledzenie błędów niekrytycznych.
Integracja z Google Play, dzięki której możesz filtrować raporty o awariach aplikacji na Androida według ścieżki Google Play bezpośrednio w panelu Crashlytics. Dzięki temu możesz lepiej dostosować panel do konkretnych wersji.
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 przepływ pracy na tej stronie powyżej 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 biblioteki natywne są utworzone w module biblioteki/funkcji lub udostępnione przez osoba trzecia
- Jeśli zadanie automatycznego przesyłania symboli w aplikacji występuje błąd lub w panelu pojawiają się niesymboliczne 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 Twoje niepozorne biblioteki natywne zostały udostępnione w sposób, są niedostępne podczas kompilacji Gradle