android - titel - title tag länge




Wie erhalte ich von meiner Android-Anwendung Absturzdaten? (20)

Dies ist sehr brutal, aber es ist möglich, logcat überall auszuführen, so dass ein schneller und schmutziger Hack zu jedem catch-Block getRuntime().exec("logcat >> /sdcard/logcat.log");

Wie kann ich Absturzdaten (zumindest Stack-Traces) von meiner Android-Anwendung erhalten? Zumindest wenn ich an meinem eigenen Gerät arbeite, das per Kabel zurückgeholt wird, aber idealerweise von jeder Instanz meiner Anwendung, die auf der Festplatte läuft, damit ich sie verbessern und sie solider machen kann.


Es gibt diese Android-Bibliothek namens Sherlock . Sie erhalten den vollständigen Absturzbericht mit Informationen zu Geräten und Anwendungen. Immer wenn ein Absturz auftritt, wird eine Benachrichtigung in der Benachrichtigungsleiste angezeigt und beim Klicken auf die Benachrichtigung werden die Absturzdetails geöffnet. Sie können auch Absturzdetails mit anderen über E-Mail oder andere Freigabeoptionen teilen.

Installation

android {
    dataBinding {
      enabled = true
    }
}

compile('com.github.ajitsing:sherlock:[email protected]') {
    transitive = true
}

Demo


Es ist möglich, diese Ausnahmen mit Thread.setDefaultUncaughtExceptionHandler() , jedoch scheint dies die Android-Methode zur Behandlung von Ausnahmen zu Thread.setDefaultUncaughtExceptionHandler() . Ich habe versucht, einen Handler dieser Art zu verwenden:

private class ExceptionHandler implements Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread thread, Throwable ex){
        Log.e(Constants.TAG, "uncaught_exception_handler: uncaught exception in thread " + thread.getName(), ex);

        //hack to rethrow unchecked exceptions
        if(ex instanceof RuntimeException)
            throw (RuntimeException)ex;
        if(ex instanceof Error)
            throw (Error)ex;

        //this should really never happen
        Log.e(Constants.TAG, "uncaught_exception handler: unable to rethrow checked exception");
    }
}

Aber selbst mit dem erneuten Auslösen der Ausnahmen konnte ich nicht das gewünschte Verhalten erzielen, dh die Ausnahme protokollieren, während Android weiterhin die heruntergefahrene Komponente herunterfahren konnte, so dass ich nach einer Weile aufgab.


Für einen alternativen Absturz-Reporting / Exception-Tracking-Service, Raygun.io Sie sich Raygun.io - es hat eine Menge an Logik für die Behandlung von Android-Abstürzen, einschließlich anständiger Benutzerfreundlichkeit beim Einstecken in Ihre App (zwei Zeilen Code in Ihrer Hauptaktivität und ein paar XML-Zeilen, die in AndroidManifest eingefügt wurden).

Wenn Ihre App abstürzt, erfasst sie automatisch den Stack-Trace, Umgebungsdaten für Hard- / Software, Benutzer-Tracking-Informationen, benutzerdefinierte Daten usw. Sie wird asynchron an die API gesendet, sodass der UI-Thread nicht blockiert und zwischengespeichert wird auf die Festplatte, wenn kein Netzwerk verfügbar ist.

Disclaimer: Ich habe den Android-Anbieter gebaut :)


Google Play Developers Console bietet Ihnen die Stack-Traces von den Apps, die abgestürzt sind und die Berichte gesendet haben, und es gibt auch sehr gute Diagramme, die Ihnen helfen, die Informationen zu sehen, siehe Beispiel unten:


Google hat geändert, wie viele Absturzberichte Sie tatsächlich erhalten. Zuvor 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 es ermöglicht haben, Diagnosedaten zu teilen.

Sie sehen alle Abstürze von Android-Geräten, deren Nutzer sich für die automatische Nutzung von Nutzungs- und Diagnosedaten entschieden haben. Daten sind für die letzten zwei Monate verfügbar.

Zeigen Sie Abstürze und nicht reagierende Anwendungen (ANR) an


Ich bin einer der Gründer von Bugsnag die wir genau für diesen Zweck entworfen haben. Bugsnag erfasst automatisch unbehandelte Ausnahmen in Android-Apps und sendet sie an unser Dashboard, wo Sie Fixes priorisieren und in Diagnoseinformationen eintauchen können.

Hier sind einige wichtige Dinge zu beachten, wenn Sie ein Crash-Reporting-System zusammen mit einigen Code-Schnipsel auswählen oder erstellen:

  • Erkennt unbehandelte Ausnahmen automatisch ( Beispielcode )
  • Erfasst Diagnosedaten wie Speichernutzung, Geräteinfo usw. ( Beispielcode )
  • Effektiv stürzen Gruppen durch Grundursache zusammen
  • Ermöglicht die Verfolgung von Aktionen, die der Benutzer vor jedem Absturz ausgeführt hat, um die Reproduktion zu unterstützen ( Beispielcode )

Wenn Sie einige Best Practices rund um das Thema Crash-Handling / -Reporting auf Android sehen möchten, können Sie den vollständigen Quellcode für die Crash-Reporting-Bibliothek von Bugsnag lesen, die vollständig Open Source ist. Zögern Sie nicht, diese auseinander zu nehmen und in Ihren eigenen Anwendungen zu verwenden!


Ich habe eine weitere tolle Webanwendung gefunden, um die Fehlerberichte zu verfolgen.

https://mint.splunk.com/

Kleine Anzahl von Schritten zum Konfigurieren.

  1. Melden Sie sich an oder registrieren Sie sich und konfigurieren Sie über den obigen Link. Sobald Sie mit dem Erstellen einer Anwendung fertig sind, wird eine Zeile wie unten beschrieben bereitgestellt.
Mint.initAndStartSession(YourActivity.this, "api_key");
  1. Fügen Sie im build.gradl der Anwendung Folgendes hinzu.
android {
...
    repositories {
        maven { url "https://mint.splunk.com/gradle/"}
    }
...
}

dependencies {
...
    compile "com.splunk.mint:mint:4.4.0"
...
}
  1. Fügen Sie den oben kopierten Code hinzu und fügen Sie ihn jeder Aktivität hinzu.

    Mint.initAndStartSession (YourActivity.this, "api_key");

Das ist es. Sie melden sich an und gehen zu Ihrem Anwendungs-Dashboard, Sie erhalten alle Fehlerberichte.

Hoffe es hilft jemandem.


Ich sehe, dass die Frage zu alt ist und hoffe, dass meine Antwort hilfreich für andere ist, die dasselbe Problem haben ...

Gib Crashlytics einen Versuch. Es gibt einen tiefen Einblick in alle Abstürze auf allen Geräten mit Ihrer Anwendung und senden Sie eine Benachrichtigung per E-Mail .. Und das Beste ist, es ist völlig kostenlos zu verwenden ..


In Android 2.2 ist es nun möglich, Crash-Berichte von Android Market-Anwendungen automatisch zu erhalten:

Mit der neuen Fehlerberichterstattung für Android Market-Apps können Entwickler Absturz- und Standberichte von ihren Benutzern erhalten. Die Berichte sind verfügbar, wenn sie sich bei ihrem Publisher-Konto anmelden.

http://developer.android.com/sdk/android-2.2-highlights.html


Obwohl viele der Antworten auf dieser Seite hilfreich sind, können sie leicht veraltet sein. Die AppBrain-Website aggregiert Statistiken, mit denen Sie die gängigste Crash-Reporting-Lösung finden können:

Android Absturzberichtsbibliotheken

Sie können sehen, dass Crashlytics zum Zeitpunkt der Veröffentlichung dieses Bildes in 5,24% der Apps und in 12,38% der Installationen verwendet wird.


Ok, nun habe ich mir die mitgelieferten Beispiele von Rrainn und Soonil angeschaut und eine Lösung gefunden, die die Fehlerbehandlung nicht durcheinander bringt.

Ich habe den CustomExceptionHandler so modifiziert, dass er den ursprünglichen UncaughtExceptionHandler aus dem Thread speichert, mit dem wir den neuen assoziieren. 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:

public class DefaultExceptionHandler implements UncaughtExceptionHandler{
  private UncaughtExceptionHandler mDefaultExceptionHandler;

  //constructor
  public DefaultExceptionHandler(UncaughtExceptionHandler pDefaultExceptionHandler)
  {
       mDefaultExceptionHandler= pDefaultExceptionHandler;
  }
  public void uncaughtException(Thread t, Throwable e) {       
        //do some action like writing to file or upload somewhere         

        //call original handler  
        mStandardEH.uncaughtException(t, e);        

        // cleanup, don't know if really required
        t.getThreadGroup().destroy();
  }
}

Mit dieser Änderung am Code unter http://code.google.com/p/android-remote-stacktrace Sie eine gute Arbeitsgrundlage für die Anmeldung des Feldes auf Ihrem Webserver oder auf der SD-Karte.


Sie können auch einen ganzen (einfachen) Service dafür verwenden und nicht nur die Bibliothek. Unsere Firma hat gerade einen Service nur dafür veröffentlicht: http://apphance.com .

Es hat eine einfache .jar-Bibliothek (für Android), die Sie in 5 Minuten hinzufügen und integrieren und dann sammelt die Bibliothek nicht nur Informationen zum Absturz, sondern auch Protokolle von laufenden Anwendungen, und Ihre Tester können Probleme direkt vom Gerät aus melden Gesamter Kontext (Geräte-Rotation, ob es mit einem WLAN verbunden ist oder nicht und mehr). Sie können die Protokolle mit einem sehr schönen und nützlichen Web-Panel ansehen, wo Sie Sitzungen mit Ihrer Anwendung verfolgen können, Abstürze, Logs, Statistiken und mehr. Der Dienst befindet sich jetzt in der Phase der abgeschlossenen Beta-Tests, aber Sie können Zugriff anfordern, und wir geben ihn Ihnen sehr schnell.

Haftungsausschluss: Ich bin CTO von Polidea und Co-Creator des Dienstes.


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.


Spät zur Party unterstütze ich und glaube, dass ACRA die beste Wahl unter allen ist. Es ist einfach einzurichten und zu konfigurieren. Ich habe eine detaillierte Anleitung mit Eingaben von überall her erstellt, um den Absturzbericht mithilfe von ACRA abzurufen und ihn 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


Verwenden Sie dies, um die Ausnahmedetails abzufangen:

String stackTrace = Log.getStackTraceString(exception); 

Speichern Sie dies in der Datenbank und pflegen Sie das Protokoll.


Wenn Ihre App von anderen Personen heruntergeladen wird und auf Remote-Geräten abstürzt, können Sie in eine Android-Fehlerberichtsbibliothek (in diesem SO-Post verwiesen) suchen. Wenn es nur auf Ihrem eigenen lokalen Gerät ist, können Sie LogCat verwenden. Selbst wenn das Gerät im Falle eines Absturzes nicht mit einem Host-Computer verbunden war, wird das Gerät mit einem adb logcat-Befehl verbunden, der den gesamten Logcat-Verlauf herunterlädt (zumindest in dem Umfang, in dem er gepuffert ist, normalerweise ein großer Teil der Protokolldaten) , es ist einfach nicht unendlich). Beantwortet eine dieser Optionen Ihre Frage? Wenn nicht, können Sie versuchen zu klären, wonach Sie suchen?


Wenn Sie sofort Antworten wünschen, können Sie logcat

$adb shell logcat -f /sdcard/logoutput.txt *:E

Wenn gerade zu viel Junk in deinem Log ist, versuche es zuerst zu löschen.

$adb shell logcat -c

Versuchen Sie dann, Ihre App auszuführen und logcat erneut.



Google Firebase ist die neueste (2016) Methode von Google, mit der Sie Absturz- / Fehlerdaten auf Ihrem Telefon erhalten. Fügen Sie es in Ihre build.gradle-Datei ein:

compile 'com.google.firebase:firebase-crash:9.0.0'

Fatale Abstürze werden automatisch protokolliert, ohne dass Benutzereingaben erforderlich sind, und Sie können auch nicht-tödliche Abstürze oder andere Ereignisse protokollieren:

try
{

}
catch(Exception ex)
{
    FirebaseCrash.report(new Exception(ex.toString()));
}






stack-trace