Wie kann ich Absturzdaten (mindestens Stapelspuren) von meiner Android-Anwendung abrufen? Zumindest wenn ich an meinem eigenen Gerät arbeite, das per Kabel abgerufen wird, aber idealerweise von jeder Instanz meiner Anwendung, die in freier Wildbahn ausgeführt wird, damit ich es verbessern und solider machen kann.
android
crash
stack-trace
J. Pablo Fernández
quelle
quelle
Antworten:
Sie können die ACRA- Bibliothek (Application Crash Report für Android) ausprobieren :
Es ist einfach in Ihrer App zu installieren, hochgradig konfigurierbar und erfordert nicht, dass Sie irgendwo ein Serverskript hosten ... Berichte werden an eine Google Doc-Tabelle gesendet!
quelle
Für Beispielanwendungen und Debugging-Zwecke verwende ich eine einfache Lösung, mit der ich den Stacktrace auf die SD-Karte des Geräts schreiben und / oder auf einen Server hochladen kann. Diese Lösung wurde von Project android-remote-stacktrace (insbesondere den Teilen zum Speichern auf dem Gerät und zum Hochladen auf den Server) inspiriert und löst meines Erachtens das von Soonil erwähnte Problem. Es ist nicht optimal, aber es funktioniert und Sie können es verbessern, wenn Sie es in einer Produktionsanwendung verwenden möchten. Wenn Sie die Stacktraces auf den Server hochladen möchten, können Sie sie mit einem PHP-Skript (
index.php
) anzeigen. Wenn Sie interessiert sind, finden Sie unten alle Quellen - eine Java-Klasse für Ihre Anwendung und zwei optionale PHP-Skripte für den Server, auf dem sich die hochgeladenen Stacktraces befinden.Rufen Sie in einem Kontext (z. B. der Hauptaktivität) auf
CustomExceptionHandler
upload.php
index.php
quelle
HttpPost httpPost = new HttpPost(url);
muss sich jetzt in einer asynchronen Aufgabe (oder einem Handler ... einem separaten Thread) befinden, wenn Sie auf Honeycomb oder höher abzielenSie können auch
[BugSense] ausprobieren.Grund: Spam-Weiterleitung zu einer anderen URL . BugSense sammelt und analysiert alle Absturzberichte und liefert Ihnen aussagekräftige und visuelle Berichte. Es ist kostenlos und es ist nur 1 Codezeile, um zu integrieren.Haftungsausschluss: Ich bin Mitbegründer
quelle
In Android 2.2 ist es jetzt möglich, automatisch Crash-Berichte von Android Market-Anwendungen abzurufen:
http://developer.android.com/sdk/android-2.2-highlights.html
quelle
Es ist möglich, diese Ausnahmen mit zu behandeln
Thread.setDefaultUncaughtExceptionHandler()
, dies scheint jedoch mit der Methode von Android zur Behandlung von Ausnahmen in Konflikt zu geraten. Ich habe versucht, einen Handler dieser Art zu verwenden:Selbst beim erneuten Auslösen der Ausnahmen konnte ich nicht das gewünschte Verhalten erzielen, dh die Ausnahme protokollieren, während Android die Komponente, die es passiert war, weiterhin herunterfahren konnte, sodass ich sie nach einer Weile aufgab.
quelle
Constants.TAG
Teil des Android-Frameworks? Zum ersten Mal gesehen. Kann es nicht finden.Ich sehe, dass die Frage zu alt ist, und hoffe, dass meine Antwort für andere hilfreich ist, die das gleiche Problem haben ...
Probieren Sie Crashlytics aus . Es gibt einen detaillierten Einblick in alle Abstürze auf allen Geräten mit Ihrer Anwendung und sendet Ihnen eine Benachrichtigung per E-Mail. Und das Beste daran ist, dass die Verwendung völlig kostenlos ist.
quelle
Ok, nun, ich habe mir die bereitgestellten Beispiele von rrainn und Soonil angesehen und eine Lösung gefunden, die die Fehlerbehandlung nicht durcheinander bringt.
Ich habe den CustomExceptionHandler so geändert, dass er den ursprünglichen UncaughtExceptionHandler aus dem Thread speichert, den wir dem neuen zuordnen. Am Ende der neuen "uncaughtException" -Methode rufe ich einfach die alte Funktion mit dem gespeicherten UncaughtExceptionHandler auf.
In der DefaultExceptionHandler-Klasse benötigen Sie etw. so was:
Mit dieser Änderung des Codes unter http://code.google.com/p/android-remote-stacktrace haben Sie eine gute Arbeitsbasis, um sich vor Ort bei Ihrem Webserver oder auf der SD-Karte anzumelden.
quelle
Die Google Play Developers Console bietet Ihnen tatsächlich die Stapelspuren der Apps, die abgestürzt sind und die Berichte gesendet haben. Außerdem enthält sie sehr gute Diagramme, mit denen Sie die Informationen besser anzeigen können (siehe Beispiel unten):
quelle
Ich habe Crittercism für meine Android- und iOS-Apps verwendet - habe auf Techcrunch davon gehört. Ziemlich glücklich mit ihnen bisher!
quelle
Ich habe hier meine eigene Version erstellt: http://androidblogger.blogspot.com/2009/12/how-to-improve-your-application-crash.html
Es ist im Grunde das Gleiche, aber ich verwende eine E-Mail anstelle einer http-Verbindung, um den Bericht zu senden, und, was noch wichtiger ist, ich habe meinem Bericht einige Informationen wie Anwendungsversion, Betriebssystemversion, Telefonmodell oder verfügbaren Speicher hinzugefügt. .
quelle
Verwenden Sie diese Option, um die Ausnahmedetails abzufangen:
Speichern Sie dies in der Datenbank und pflegen Sie das Protokoll.
quelle
Sie können dafür auch einen ganzen (einfachen) Dienst verwenden und nicht nur eine Bibliothek. Unsere Firma hat gerade einen Service dafür veröffentlicht: http://apphance.com .
Es verfügt über eine einfache .jar-Bibliothek (für Android), die Sie in 5 Minuten hinzufügen und integrieren können. Anschließend sammelt die Bibliothek nicht nur Absturzinformationen, sondern auch Protokolle von laufenden Anwendungen. Außerdem können Ihre Tester Probleme direkt vom Gerät aus melden - einschließlich der gesamter Kontext (Gerätedrehung, unabhängig davon, ob sie mit einem WLAN verbunden ist oder nicht und mehr). Sie können die Protokolle mithilfe eines sehr schönen und nützlichen Webpanels anzeigen, in dem Sie Sitzungen mit Ihrer Anwendung, Abstürze, Protokolle, Statistiken und mehr verfolgen können. Der Service befindet sich derzeit in der Closed Beta-Testphase, aber Sie können den Zugriff anfordern und wir geben ihn Ihnen sehr schnell.
Haftungsausschluss: Ich bin CTO von Polidea und Mitentwickler des Dienstes.
quelle
Vielen Dank an die Ressourcen, die
Stackoverflow
mir dabei helfen, diese Antwort zu finden.Sie können Ihre Remote-Android-Absturzberichte direkt in Ihrer E-Mail finden . Denken Sie daran, dass Sie Ihre E-Mail-Adresse in die CustomExceptionHandler-Klasse einfügen müssen .
Erforderliche Schritte:
1.) Verwenden Sie in onCreate Ihrer Aktivität diesen Abschnitt Ihres Codes.
2.) Verwenden Sie diese überschriebene Version der CustomExceptionHandler-Klasse von (rrainn) gemäß meinem PHPScript.
quelle
Heute sind Firebase-Absturzberichte sehr beliebt und einfacher zu verwenden. Weitere Informationen finden Sie unter folgendem Link: Firebase Crash Reporting
Hoffe es wird dir helfen.
quelle
Dies ist sehr brutal, aber es ist möglich, Logcat überall auszuführen, sodass ein schneller und schmutziger Hack zu jedem Catch-Block hinzugefügt werden kann
getRuntime().exec("logcat >> /sdcard/logcat.log");
quelle
Es gibt ein Tool namens Fabric. Hierbei handelt es sich um ein Crash-Analyse-Tool, mit dem Sie Crash-Berichte abrufen können, wenn die Anwendung live und während der Entwicklung bereitgestellt wird. Das Hinzufügen dieses Tools zu Ihrer Anwendung war ebenfalls einfach. Wenn Ihre Anwendung abstürzt, kann dieser Bericht über den Absturz in Ihrem Fabric.io-Dashboard angezeigt werden. Der Bericht wurde automatisch abgefangen. Der Benutzer wird nicht um Erlaubnis gebeten. Ob er / sie den Fehler- / Absturzbericht senden möchte. Und das ist völlig kostenlos ... https://get.fabric.io/
quelle
Google Firebase ist die neueste Methode von Google (2016), mit der Sie Absturz- / Fehlerdaten auf Ihrem Telefon bereitstellen können. Fügen Sie es in Ihre build.gradle-Datei ein:
Schwerwiegende Abstürze werden automatisch protokolliert, ohne dass Benutzereingaben erforderlich sind. Sie können auch nicht schwerwiegende Abstürze oder andere Ereignisse wie die folgenden protokollieren:
quelle
Es gibt diese Android-Bibliothek namens Sherlock . Sie erhalten den vollständigen Absturzbericht sowie Informationen zu Geräten und Anwendungen. Bei jedem Absturz wird eine Benachrichtigung in der Benachrichtigungsleiste angezeigt. Beim Klicken auf die Benachrichtigung werden die Absturzdetails geöffnet. Sie können Absturzdetails auch per E-Mail oder über andere Freigabeoptionen mit anderen teilen.
Installation
Demo
quelle
Während viele der Antworten auf dieser Seite nützlich sind, können sie leicht veraltet sein. Auf der AppBrain-Website werden Statistiken zusammengefasst, mit denen Sie die beliebteste aktuelle Crash-Reporting-Lösung finden können:
Bibliotheken für Android-Absturzberichte
Sie können sehen, dass Crashlytics zum Zeitpunkt der Veröffentlichung dieses Bildes in 5,24% der Apps und 12,38% der Installationen verwendet wird.
quelle
Wir verwenden unser selbst entwickeltes System innerhalb des Unternehmens und es dient uns sehr gut. Es ist eine Android-Bibliothek, die Absturzberichte an Server sendet und Server, die Berichte empfangen und einige Analysen durchführen. Der Server gruppiert Ausnahmen nach Ausnahmenname, Stacktrace und Nachricht. Es hilft, die kritischsten Probleme zu identifizieren, die behoben werden müssen. Unser Service befindet sich jetzt in der öffentlichen Beta, sodass jeder es ausprobieren kann. Sie können ein Konto unter http://watchcat.co erstellen oder einfach einen Blick darauf werfen, wie es mit dem Demo-Zugriff http://watchcat.co/reports/index.php?demo funktioniert .
quelle
Wenn Sie sofort Antworten wünschen, können Sie logcat verwenden
$adb shell logcat -f /sdcard/logoutput.txt *:E
Wenn sich gerade zu viel Müll in Ihrem Protokoll befindet, löschen Sie ihn zuerst.
$adb shell logcat -c
Führen Sie dann Ihre App aus und logcat erneut.
quelle
Ich habe eine weitere großartige Webanwendung gefunden, um die Fehlerberichte zu verfolgen.
https://mint.splunk.com/
Kleine Anzahl zu konfigurierender Schritte.
Das ist es. Wenn Sie sich anmelden und zu Ihrem Anwendungs-Dashboard gehen, erhalten Sie alle Fehlerberichte.
Hoffe es hilft jemandem.
quelle
Für einen alternativen Crash-Reporting- / Exception-Tracking-Service besuchen Sie Raygun.io - es enthält eine Reihe netter Logik für die Behandlung von Android-Crashs, einschließlich einer anständigen Benutzererfahrung beim Einstecken in Ihre App (zwei Codezeilen in Ihrer Hauptaktivität und einige wenige) in AndroidManifest eingefügte XML-Zeilen).
Wenn Ihre App abstürzt, werden automatisch der Stack-Trace, Umgebungsdaten für Hard / Software, Benutzer-Tracking-Informationen, von Ihnen angegebene benutzerdefinierte Daten usw. abgerufen. Sie werden asynchron an die API gesendet, sodass der UI-Thread nicht blockiert wird, und zwischengespeichert auf die Festplatte, wenn kein Netzwerk verfügbar ist.
Haftungsausschluss: Ich habe den Android-Anbieter erstellt :)
quelle
Ich habe gerade angefangen, ACRA https://github.com/ACRA/acra mit Google Forms als Backend zu verwenden. Die Einrichtung und Verwendung ist sehr einfach. Dies ist die Standardeinstellung.
ABER das Senden von Berichten an Google Forms wird veraltet (und dann entfernt): https://plus.google.com/118444843928759726538/posts/GTTgsrEQdN6 https://github.com/ACRA/acra/wiki/Notice-on-Google -Form-Spreadsheet-Verwendung
Auf jeden Fall ist es möglich , eigenen Absender zu definieren https://github.com/ACRA/acra/wiki/AdvancedUsage#wiki-Implementing_your_own_sender Sie einen Versuch , um E - Mail - Absender zum Beispiel geben können.
Mit minimalem Aufwand ist es möglich, Berichte an bugsense zu senden: http://www.bugsense.com/docs/android#acra
NB Das kostenlose Bugsense-Konto ist auf 500 Berichte / Monat begrenzt
quelle
Spät zur Party unterstütze und glaube ich, dass ACRA die beste Option unter allen ist. Es ist einfach einzurichten und zu konfigurieren. Ich habe eine detaillierte Anleitung mit Eingaben aus aller Welt erstellt, um den Absturzbericht mit ACRA abzurufen und mit MandrillAp an meine E-Mail-Adresse zu senden.
Link zum Beitrag: https://androidician.wordpress.com/2015/03/29/sending-crash-reports-with-acra-over-email-using-mandrill/
Link zum Beispielprojekt auf github: https://github.com/ayushhgoyal/AcraSample
quelle
Ich bin einer der Gründer von Bugsnag, das wir genau für diesen Zweck entwickelt haben. Bugsnag erfasst automatisch nicht behandelte Ausnahmen in Android-Apps und sendet sie an unser Dashboard, wo Sie Korrekturen priorisieren und in Diagnoseinformationen eintauchen können.
Bei der Auswahl oder Erstellung eines Absturzmeldesystems sind einige wichtige Punkte zu beachten, zusammen mit einigen Codefragmenten:
Wenn Sie einige bewährte Methoden zur Behandlung / Berichterstellung von Unfällen unter Android kennenlernen möchten, können Sie den vollständigen Quellcode für die vollständig Open Source- Bibliothek für Absturzberichte von Bugsnag lesen. Sie können diese auch zerreißen und in Ihren eigenen Anwendungen verwenden!
quelle
Wenn Ihre App von anderen Personen heruntergeladen wird und auf Remote-Geräten abstürzt, sollten Sie sich eine Android-Fehlerberichtsbibliothek ansehen (auf die in diesem SO-Beitrag verwiesen wird ). Wenn es sich nur um Ihr eigenes lokales Gerät handelt, können Sie LogCat verwenden. Selbst wenn das Gerät zum Zeitpunkt des Absturzes nicht mit einem Host-Computer verbunden war, wird durch Anschließen des Geräts und Ausgeben eines Befehls adb logcat der gesamte Logcat-Verlauf heruntergeladen (zumindest in dem Maße, in dem er gepuffert ist, was normalerweise eine Menge Protokolldaten darstellt , es ist einfach nicht unendlich). Beantworten eine dieser Optionen Ihre Frage? Wenn nicht, können Sie versuchen zu klären, wonach Sie ein bisschen mehr suchen?
quelle
Flurry Analytics bietet Ihnen Absturzinformationen , Hardwaremodell, Android-Version und Statistiken zur Nutzung von Live-Apps. Im neuen SDK scheinen sie detailliertere Informationen zum Absturz zu bieten: http://www.flurry.com/flurry-crash-analytics.html .
quelle
Google hat geändert, wie viele Absturzberichte Sie tatsächlich erhalten. Bisher haben Sie nur manuell gemeldete Fehlerberichte erhalten.
Seit der letzten Entwicklerkonferenz und der Einführung von Android Vitals erhalten Sie auch Absturzberichte von Benutzern, die den Austausch von Diagnosedaten ermöglicht haben.
Anzeigen von Abstürzen und ANR-Fehlern (Application reagiert nicht)
quelle
Sie können dies direkt in Android Studio tun. Schließen Sie einfach Ihr Telefon an, führen Sie die App aus, lassen Sie sie abstürzen und Sie können den Stacktrace direkt in Android Studio anzeigen.
quelle