Jak mogę uzyskać dane o awariach (przynajmniej stosy śladów) z mojej aplikacji na Androida? Przynajmniej podczas pracy na własnym urządzeniu pobieranym kablem, ale idealnie z dowolnego wystąpienia mojej aplikacji działającej na wolności, aby móc go ulepszyć i uczynić bardziej solidnym.
android
crash
stack-trace
J. Pablo Fernández
źródło
źródło
Odpowiedzi:
Możesz wypróbować bibliotekę ACRA (Application Crash Report for Android) :
Jest łatwy do zainstalowania w aplikacji, wysoce konfigurowalny i nie wymaga hostowania skryptu serwera w dowolnym miejscu ... raporty są wysyłane do arkusza kalkulacyjnego Google Doc!
źródło
Do przykładowych aplikacji i celów debugowania używam prostego rozwiązania, które pozwala mi zapisać stacktrace na karcie SD urządzenia i / lub przesłać go na serwer. To rozwiązanie zostało zainspirowane przez Project android-remote-stacktrace (w szczególności części do zapisywania na urządzeniu i przesyłania na serwer) i myślę, że rozwiązuje problem wspomniany przez Soonil. Nie jest optymalny, ale działa i możesz go ulepszyć, jeśli chcesz go używać w aplikacji produkcyjnej. Jeśli zdecydujesz się przesłać stos śledzenia na serwer, możesz użyć skryptu php (
index.php
), aby je wyświetlić. Jeśli jesteś zainteresowany, możesz znaleźć wszystkie źródła poniżej - jedną klasę Java dla twojej aplikacji i dwa opcjonalne skrypty php dla serwera hostującego przesłane pliki śledzenia.W kontekście (np. Głównym działaniu) zadzwoń
CustomExceptionHandler
upload.php
index.php
źródło
HttpPost httpPost = new HttpPost(url);
musi być teraz w zadaniu asynchronicznym (lub moduł obsługi ... osobny wątek), jeśli celujesz w plaster miodu lub nowszyMożesz także wypróbować
[BugSense]Przyczyna: przekierowanie spamu do innegoadresuURL . BugSense zbiera i analizuje wszystkie raporty o awariach oraz udostępnia sensowne i wizualne raporty. Jest bezpłatny i zawiera tylko 1 linię kodu w celu integracji.Oświadczenie: Jestem współzałożycielem
źródło
W systemie Android 2.2 można teraz automatycznie pobierać raporty o awariach z aplikacji Android Market:
http://developer.android.com/sdk/android-2.2-highlights.html
źródło
Możliwe jest obsługiwanie tych wyjątków za pomocą
Thread.setDefaultUncaughtExceptionHandler()
, jednak wydaje się, że przeszkadza to w metodzie obsługi wyjątków przez system Android. Próbowałem użyć tego rodzaju procedury obsługi:Jednak nawet po ponownym zgłoszeniu wyjątków nie byłem w stanie uzyskać pożądanego zachowania, tj. Zarejestrować wyjątek, jednocześnie pozwalając systemowi Android na zamknięcie komponentu, w którym to się stało, więc po pewnym czasie zrezygnowałem z niego.
źródło
Constants.TAG
częścią systemu Android? Pierwszy raz to widzę. Nie mogę tego znaleźć.Widzę, że pytanie jest za stare i mam nadzieję, że moja odpowiedź będzie pomocna dla innych osób mających ten sam problem ...
Wypróbuj Crashlytics . Zapewni to dokładny wgląd we wszystkie awarie na wszystkich urządzeniach z twoją aplikacją i wyśle Ci powiadomienie e-mailem. A najlepsze jest to, że korzystanie z niego jest całkowicie bezpłatne.
źródło
Ok, dobrze spojrzałem na dostarczone próbki z Rrainn i Soonil i znalazłem rozwiązanie, które nie psuje obsługi błędów.
Zmodyfikowałem CustomExceptionHandler, aby przechowywał oryginalny UncaughtExceptionHandler z wątku, który kojarzymy z nowym. Na końcu nowego „uncaughtException” - Metoda Po prostu wywołuję starą funkcję za pomocą zapisanego UncaughtExceptionHandler.
W klasie DefaultExceptionHandler potrzebujesz czegoś. lubię to:
Dzięki tej modyfikacji w kodzie pod adresem http://code.google.com/p/android-remote-stacktrace masz dobrą bazę roboczą do logowania się w polu na swoim serwerze internetowym lub karcie SD.
źródło
Konsola programisty Google Play faktycznie udostępnia ślady stosu z aplikacji, które uległy awarii i wysłały raporty, ma też bardzo dobre wykresy, które pomagają zobaczyć informacje, patrz przykład poniżej:
źródło
Używam Crittercism do moich aplikacji na Androida i iOS - słyszałem o nich na techcrunchu. Jak dotąd jestem z nich zadowolony!
źródło
Stworzyłem własną wersję tutaj: http://androidblogger.blogspot.com/2009/12/how-to-improve-your-application-crash.html
To w zasadzie to samo, ale do wysłania raportu używam poczty zamiast połączenia http, a co ważniejsze, dodałem do mojego raportu pewne informacje, takie jak wersja aplikacji, wersja systemu operacyjnego, model telefonu lub dostępna pamięć. .
źródło
użyj tego, aby złapać szczegóły wyjątku:
przechowuj to w bazie danych i prowadź dziennik.
źródło
Możesz także użyć do tego całej (prostej) usługi, a nie tylko biblioteki. Nasza firma właśnie wydała usługę tylko dla tego: http://apphance.com .
Ma prostą bibliotekę .jar (dla Androida), którą dodajesz i integrujesz w 5 minut, a następnie biblioteka gromadzi nie tylko informacje o awarii, ale także dzienniki z uruchomionej aplikacji, a także pozwala testerom zgłaszać problemy bezpośrednio z urządzenia - w tym cały kontekst (obrót urządzenia, niezależnie od tego, czy jest on podłączony do Wi-Fi czy nie i więcej). Możesz przeglądać dzienniki za pomocą bardzo ładnego i przydatnego panelu internetowego, w którym możesz śledzić sesje z aplikacją, awarie, dzienniki, statystyki i więcej. Usługa jest teraz w zamkniętej fazie testów beta, ale możesz poprosić o dostęp, a my damy ci ją bardzo szybko.
Oświadczenie: Jestem CTO Polidei i współtwórcą serwisu.
źródło
Dziękuję
Stackoverflow
za pomoc w znalezieniu tej odpowiedzi.Możesz znaleźć swoje zdalne raporty o awariach Androida bezpośrednio na swój e-mail . pamiętaj, że musisz umieścić swój e-mail w klasie CustomExceptionHandler .
Wymagane kroki:
1st) w onCreate swojej aktywności użyj tej sekcji kodu.
2.) użyj tej przesłoniętej wersji klasy CustomExceptionHandler (rrainn), zgodnie z moim phpscript.
źródło
Teraz raporty awarii Crash Firebase są bardzo popularne i łatwiejsze w użyciu. Aby uzyskać więcej informacji, skorzystaj z poniższego linku: Raportowanie awarii Firebase
Mam nadzieję, że ci to pomoże.
źródło
Jest to bardzo brutalne, ale można uruchomić logcat w dowolnym miejscu, więc szybki i brudny hack polega na dodaniu do dowolnego bloku catch
getRuntime().exec("logcat >> /sdcard/logcat.log");
źródło
Istnieje narzędzie zwane tkaniną, jest to narzędzie analityczne po awarii, które pozwoli ci otrzymywać raporty o awariach podczas wdrażania aplikacji na żywo i podczas programowania. Dodanie tego narzędzia do aplikacji było również proste. Gdy awaria Twojej aplikacji, raport o awarii może być wyświetlony z pulpitu Fabric.io. raport został złapany automatycznie. nie poprosi użytkownika o zgodę. Czy chce wysłać raport o błędzie / awarii. A to jest całkowicie bezpłatne ... https://get.fabric.io/
źródło
Google Firebase to najnowszy sposób Google (2016), aby zapewnić ci dane o awariach / błędach w telefonie. Uwzględnij go w pliku build.gradle:
Krytyczne awarie są rejestrowane automatycznie, bez konieczności wprowadzania danych przez użytkownika. Możesz także rejestrować niekrytyczne awarie lub inne zdarzenia, takie jak:
źródło
Istnieje biblioteka Androida o nazwie Sherlock . Daje pełny raport o awarii wraz z informacjami o urządzeniu i aplikacji. Ilekroć nastąpi awaria, wyświetla powiadomienie na pasku powiadomień, a po kliknięciu powiadomienia otwiera szczegóły awarii. Możesz także udostępniać innym osobom szczegóły awarii w wiadomości e-mail lub za pomocą innych opcji udostępniania.
Instalacja
Próbny
źródło
Chociaż wiele odpowiedzi na tej stronie jest przydatnych, łatwo jest im przestać być aktualne. Witryna AppBrain gromadzi statystyki, które pozwalają znaleźć najpopularniejsze aktualne rozwiązanie raportowania awarii:
Biblioteki raportowania awarii Androida
Widać, że w momencie publikowania tego obrazu Crashlytics jest używany w 5,24% aplikacji i 12,38% instalacji.
źródło
Używamy naszego domowego systemu wewnątrz firmy i bardzo nam to służy. Jest to biblioteka Androida, która wysyła raporty o awariach do serwera i serwera, który odbiera raporty i dokonuje analizy. Serwer grupuje wyjątki według nazwy wyjątku, śledzenia stosu, komunikatu. Pomaga zidentyfikować najbardziej krytyczne problemy, które należy naprawić. Nasz serwis jest obecnie w publicznej wersji beta, więc każdy może go wypróbować. Możesz założyć konto na http://watchcat.co lub po prostu zobaczyć, jak to działa, korzystając z dostępu do wersji demo http://watchcat.co/reports/index.php?demo .
źródło
Jeśli chcesz natychmiast uzyskać odpowiedzi, możesz użyć logcat
$adb shell logcat -f /sdcard/logoutput.txt *:E
Jeśli w twoim dzienniku jest obecnie zbyt wiele śmieci, spróbuj je najpierw usunąć.
$adb shell logcat -c
Następnie spróbuj uruchomić aplikację, a następnie zaloguj się ponownie.
źródło
Znalazłem jeszcze jedną świetną aplikację internetową do śledzenia raportów błędów.
https://mint.splunk.com/
Mała liczba kroków do skonfigurowania.
Otóż to. Zaloguj się i przejdź do pulpitu aplikacji, otrzymasz wszystkie raporty błędów.
Mam nadzieję, że to komuś pomoże.
źródło
Alternatywna usługa raportowania awarii / śledzenia wyjątków znajduje się na stronie Raygun.io - ma ona sporo fajnej logiki do obsługi awarii systemu Android, w tym przyzwoitą wygodę użytkownika podczas podłączania jej do aplikacji (dwie linie kodu w głównej aktywności i kilka wiersze XML wklejone w AndroidManifest).
Gdy aplikacja ulega awarii, automatycznie pobiera dane śledzenia stosu, dane środowiska dla sprzętu / oprogramowania, informacje o śledzeniu użytkownika, wszelkie określone dane niestandardowe itp. Wysyła je do interfejsu API asynchronicznie, więc nie blokuje wątku interfejsu użytkownika i buforuje je na dysk, jeśli nie ma dostępnej sieci.
Oświadczenie: Zbudowałem dostawcę Androida :)
źródło
Właśnie zacząłem używać ACRA https://github.com/ACRA/acra przy użyciu Formularzy Google jako zaplecza i jest bardzo łatwy w konfiguracji i obsłudze, jest to domyślny.
ALE Wysyłanie raportów do Formularzy Google będzie przestarzałe (a następnie usunięte): https://plus.google.com/118444843928759726538/posts/GTTgsrEQdN6 https://github.com/ACRA/acra/wiki/Notice-on-Google -Form-Arkusz kalkulacyjny-użycie
W każdym razie można zdefiniować własnego nadawcę https://github.com/ACRA/acra/wiki/AdvancedUsage#wiki-Implementing_your_own_sender , na przykład możesz spróbować wysłać wiadomość e-mail do nadawcy.
Przy minimalnym wysiłku możliwe jest wysyłanie raportów do bugsense: http://www.bugsense.com/docs/android#acra
Uwaga : Konto wolne od błędów jest ograniczone do 500 raportów / miesiąc
źródło
Późno na imprezę popieram i uważam, że ACRA jest najlepszą opcją ze wszystkich. Jest łatwy w konfiguracji i konfiguracji. Stworzyłem szczegółowy przewodnik z danymi wejściowymi z całego świata, aby pobrać raport o awarii za pomocą ACRA i wysłać to samo na mój adres e-mail za pomocą MandrillAp.
Link do posta: https://androidician.wordpress.com/2015/03/29/sending-crash-reports-with-acra-over-email-using-mandrill/
Link do przykładowego projektu na github: https://github.com/ayushhgoyal/AcraSample
źródło
Jestem jednym z założycieli Bugsnag, który zaprojektowaliśmy właśnie do tego celu. Bugsnag automatycznie przechwytuje nieobsługiwane wyjątki w aplikacjach na Androida i wysyła je do naszego pulpitu nawigacyjnego, gdzie można priorytetyzować poprawki i zagłębiać się w informacje diagnostyczne.
Oto kilka ważnych rzeczy, które należy wziąć pod uwagę przy wyborze lub tworzeniu systemu raportowania awarii, wraz z niektórymi fragmentami kodu:
Jeśli chcesz zapoznać się z najlepszymi praktykami związanymi z obsługą / raportowaniem awarii na Androidzie, możesz sprawdzić pełny kod źródłowy biblioteki raportowania awarii Bugsnag, która jest w pełni open source, możesz ją rozerwać i używać we własnych aplikacjach!
źródło
Jeśli Twoja aplikacja jest pobierana przez inne osoby i ulega awarii na zdalnych urządzeniach, możesz zajrzeć do biblioteki raportów błędów Androida (o której mowa w tym poście SO ). Jeśli jest to tylko na twoim lokalnym urządzeniu, możesz użyć LogCat. Nawet jeśli urządzenie nie było podłączone do komputera hosta w momencie awarii, podłączono urządzenie i wydając polecenie adb logcat pobierze całą historię logcat (przynajmniej w zakresie, w jakim jest buforowany, co zwykle stanowi przeładowanie danych dziennika , to po prostu nieskończone). Czy którakolwiek z tych opcji odpowiada na twoje pytanie? Jeśli nie, możesz spróbować wyjaśnić, czego szukasz?
źródło
Analiza Flurry zapewnia informacje o awarii, modelu sprzętu, wersji Androida i statystykach użytkowania aplikacji na żywo. W nowym zestawie SDK wydają się zawierać bardziej szczegółowe informacje o awarii http://www.flurry.com/flurry-crash-analytics.html .
źródło
Google zmieniło, ile faktycznie otrzymujesz raportów o awariach. Wcześniej otrzymywałeś tylko ręczne zgłoszenia błędów.
Od ostatniej konferencji programistów i wprowadzenia systemu Android Vitals otrzymujesz również raporty o awariach od użytkowników, którzy umożliwili udostępnianie danych diagnostycznych.
Zobacz awarie i błędy aplikacji nie odpowiada (ANR)
źródło
Możesz to zrobić bezpośrednio w Android Studio. Po prostu podłącz telefon, uruchom aplikację, pozwól jej się zawiesić, a będziesz mógł przeglądać stacktrace bezpośrednio w Android Studio.
źródło