Ich habe eine App, die nicht auf dem Markt ist (mit einem Debug-Zertifikat signiert), aber Crash-Log-Daten erhalten möchte, wenn meine Anwendung abstürzt. Wo kann ich ein Protokoll finden, warum meine App abgestürzt ist?Wie bekomme ich Android-Absturzprotokolle?
Antwort
Wenn Ihre App von anderen Personen heruntergeladen wird und auf Remote-Geräten abstürzt, können Sie in eine Android-Fehlerberichtsbibliothek (in this SO post verwiesen) suchen. Wenn es sich nur um Ihr eigenes lokales Gerät handelt, können Sie LogCat.
verwenden. Selbst wenn das Gerät beim Auftreten des Absturzes nicht mit einem Host-Computer verbunden war, wird durch das Anschließen des Geräts und den Befehl adb logcat
der gesamte Logcat-Verlauf heruntergeladen dass es gepuffert ist, was normalerweise ein Looot von Log-Daten ist, es ist einfach nicht unendlich). Beantwortet eine dieser Optionen Ihre Frage? Wenn nicht, können Sie versuchen zu klären, wonach Sie suchen?
Kannst du ausführlich erklären, wie du den adb logcat Befehl verwendest? Führe ich das im Verzeichnis/SDK/tools aus?Gibt es irgendwelche Flaggen, die ich beachten sollte? usw. –
@ jesses.coktt Ja, einfach 'adb logcat' von dem Verzeichnis ausführen, in dem sich adb befindet. Alternativ können Sie die SDK-Tools verwenden, die im Eclipse-Plugin enthalten sind. –
Ok, vielen Dank. –
Wenn Sie Eclipse verwenden, stellen Sie sicher, dass Sie debuggen und nicht ausführen. Stellen Sie sicher, dass Sie sich in der Debug-Perspektive befinden (oben rechts) Möglicherweise müssen Sie mehrmals auf "Fortsetzen" (F8) drücken, damit das Protokoll gedruckt wird. Das Absturzprotokoll befindet sich im Logcat-Fenster unten - doppelklicken Sie für den Vollbildmodus und stellen Sie sicher, dass Sie nach unten scrollen. Sie werden für Fehler roten Text sehen, wird die Crash-Spur so etwas wie
09-04 21:35:15.228: ERROR/AndroidRuntime(778): Uncaught handler: thread main exiting due to uncaught exception
09-04 21:35:15.397: ERROR/AndroidRuntime(778): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dazlious.android.helloworld/com.dazlious.android.helloworld.main}: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.access$1800(ActivityThread.java:112)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Handler.dispatchMessage(Handler.java:99)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.os.Looper.loop(Looper.java:123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.main(ActivityThread.java:3948)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invokeNative(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at java.lang.reflect.Method.invoke(Method.java:521)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at dalvik.system.NativeStart.main(Native Method)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
09-04 21:35:15.397: ERROR/AndroidRuntime(778): ... 11 more
Die wichtige Teile für diese sind
09-04 21:35:15.397: ERROR/AndroidRuntime(778): Caused by: java.lang.ArrayIndexOutOfBoundsException
09-04 21:35:15.397: ERROR/AndroidRuntime(778): at com.example.android.helloworld.main.onCreate(main.java:13)
die uns sagen, es ist ein Array aus Ausnahme von Schranken für auf Zeile 13 von main.java in der onCrate-Methode.
+1 ok das war sehr albern von mir ... – UncleZeiv
Sie können Apphance verwenden. Dies ist ein plattformübergreifender Dienst (jetzt hauptsächlich Android, iOS mit anderen Plattformen auf dem Weg), der es ermöglicht, jedes mobile Gerät (Android, iOS jetzt - andere in der Entwicklung) remote zu debuggen. Es ist viel mehr als nur ein Crashlog, vielmehr ist es viel mehr: Protokollierung, Meldung von Problemen durch Tester, Crashlogs. Es dauert ungefähr 5 Minuten, um sich zu integrieren. Momentan können Sie Zugriff auf die geschlossene Beta anfordern.
Haftungsausschluss: Ich bin CTO von Polidea, einer Firma hinter Apphance und Co-Creator davon.
Update: Apphance ist nicht mehr geschlossen Beta! Update 2: Apphance ist verfügbar als Teil von http://applause.com bietet
Ich habe gerade apphance versucht und mag es. Die Dokumente haben einen wichtigen Punkt bei der Integration von apphance lib in Ihre App verpasst. mit der neuesten Version von Eclipse ADT, müssen Sie die apphance.jar im Verzeichnis 'libs' als [this] setzen (http://stackoverflow.com/a/9916751/9648) SO erklärt die Antwort. [Dieser GitHub-Commit] (https://github.com/johnnylambada/WorldMap/commit/235ac0461a91a080cca2cdcb7fd2059464165406) zeigt die Änderungen, die ich an meiner WorldMap-App vornehmen musste, um apphance zu verwenden. – JohnnyLambada
@HohnnyLambada Danke für Ihren Kommentar. Wir haben die Dokumentation aktualisiert, um dies zu verdeutlichen. –
Dies sollte nicht so viele Pfeile bekommen, es kostet 10x mehr als die meisten Entwicklungsbudgets ($ 2.500 pro Monat!) – user26676
Hier ist eine andere Lösung für Crash-Log.
Android Markt-Tool namens "Crash Collector"
Check folgenden Link für weitere Informationen
http://kpbird.blogspot.com/2011/08/android-application-crash-logs.html
Funktioniert nicht auf Android 4.1 und höher (neue Berechtigungen zum Lesen von Protokollen). – cat
Sie können ACRA verwenden aus this. Wenn Sie diese Bibliothek in Ihre Projekte aufnehmen und diese konfigurieren, könnten Sie Ihre Absturzberichte (in Ihre E-Mail oder gdocs) erhalten. Entschuldigung für mein schlechtes Englisch.
Wenn Sie nur nach dem Absturzprotokoll suchen, während Ihr Telefon mit dem Computer verbunden ist, verwenden Sie die DDMS-Ansicht in Eclipse und der Bericht befindet sich in LogCat innerhalb von DDMS, wenn Ihre App während des Debuggen abstürzt.
Sie können auch Bibliothek verwenden crashcatcher
Verwenden acra Crash Reporter für android app ..Acra lib
Die Art und Weise, dies zu tun ist, um die Thread.UncaughtExceptionHandler
Schnittstelle zu implementieren und zu Thread.setDefaultUncaughtExceptionHandler()
zu Beginn Ihrer Aktivität des onCreate()
passieren. Hier ist die Implementierungsklasse TopExceptionHandler
.
Hinweis: Wir lassen das Standard-AUTH des Android-Frameworks verarbeiten.
An der Spitze Ihrer Aktivität registrieren eine Instanz von oben Klasse wie folgt:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new TopExceptionHandler(this));
...
Dieser Handler den Trace in einer Datei speichert. Wenn ReaderScope
das nächste Mal neu gestartet wird, erkennt es die Datei und fragt den Benutzer, ob er sie per E-Mail an den Entwickler senden möchte.
Um den Stack Trace per E-Mail zu versenden, führen Sie den folgenden Code aus, um ihn in eine E-Mail zu packen.
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(ReaderScopeActivity.this.openFileInput("stack.trace")));
while((line = reader.readLine()) != null) {
trace += line+"\n";
}
} catch(FileNotFoundException fnfe) {
// ...
} catch(IOException ioe) {
// ...
}
Intent sendIntent = new Intent(Intent.ACTION_SEND);
String subject = "Error report";
String body = "Mail this to [email protected]: " + "\n" + trace + "\n";
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
sendIntent.putExtra(Intent.EXTRA_TEXT, body);
sendIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sendIntent.setType("message/rfc822");
ReaderScopeActivity.this.startActivity(Intent.createChooser(sendIntent, "Title:"));
ReaderScopeActivity.this.deleteFile("stack.trace");
Oder Sie können auch ACRA Fehlerberichterstattung System.Just verwenden Fügen Sie die ACRA.jar in Ihrem Projekt Libs und verwenden Sie den folgenden Code-Schnipsel vor Launchers Aktivität Klassendeklaration
@ReportsCrashes(formKey = "", mailTo = "[email protected];[email protected]", mode = ReportingInteractionMode.SILENT)
Wird nicht die Zeile defaultUEH.uncaughtException (t, e); Aufruf der Methode uncaughtException() unendlich? –
Dies ist von http://www.herongyang.com/Android/Debug-adb-logcat-Command-Debugging.html
können Sie adb verwenden:
adb logcat AndroidRuntime:E *:S
'adb logcat -d CRASH: E *: S *' –
Ja. Es funktionierte: adb logcat AndroidRuntime: E *: S –
Wenn Sie ein Suchen Sie nach einem grundlegenden Absturzberichtswerkzeug, versuchen Sie crashlytics.
Wenn Sie eine erweiterte Reporting-Tool benötigen, Checkout Gryphonet. Es protokolliert alle Abstürze zusammen mit der genauen Codezeile, die den Absturz verursacht hat, sowie automatisierte Markierungen, die Ihnen die Schritte zeigen, die der Benutzer vor dem Absturz gemacht hat, und mehr.
Viel Glück!
Versuchen Sie Carsh Log App von Android.
Verwenden Sie die link App zum Herunterladen.
Ich habe diese Bibliothek erstellt, um alle Ihre Probleme zu lösen. Crash Reporter is a handy tool to capture all your crashes and log them in device locally
Fügen Sie einfach diese Abhängigkeit und Sie sind gut zu gehen.
compile 'com.balsikandar.android:crashreporter:1.0.1'
Finden Sie alle Ihre Abstürze im Gerät lokal und beheben Sie sie nach Ihren Wünschen. Abstürze werden gespeichert, indem Datum und Uhrzeit Format einfach zu verfolgen. Darüber hinaus bietet es auch eine API für die Erfassung von protokollierten Ausnahmen unter Verwendung der Methode "unten".
CrashRepoter.logException(Exception e)
Was ist die Java-Klasse, die Sie verwendet haben, um die Crash-Logs eines Geräts zu erhalten? – Xenolion
können Sie versuchen, diese von der Konsole: -
adb logcat -b Absturz
- 1. Wie bekomme ich Hittyp?
- 2. Wie bekomme ich CCTray
- 3. Wie bekomme ich System.Web.Http.Owin?
- 4. Wie bekomme ich GetCustomAttributes?
- 5. Wie bekomme ich BigDecimalScale?
- 6. Wie bekomme ich Daten?
- 7. Wie bekomme ich Instanznummer
- 8. Wie bekomme ich sal.h
- 9. Wie bekomme ich ApplicationController?
- 10. Wie bekomme ich xjc?
- 11. Wie bekomme ich die Methodenaufrufhistorie?
- 12. Wie bekomme ich Bin Path?
- 13. Wie bekomme ich Favoriten Stern
- 14. Wie bekomme ich TimeZoneInfo Kurzname
- 15. Wie bekomme ich iframe Antwortheader?
- 16. Wie bekomme ich einen IXmlNamespaceResolver?
- 17. Wie bekomme ich PyQt4.phonon?
- 18. Wie bekomme ich das AssemblyTitle?
- 19. Wie bekomme ich .ipa Dateipfad
- 20. Doc2vec: Wie bekomme ich Dokumentvektoren?
- 21. Wie bekomme ich Python-Ausnahmetext
- 22. Wie bekomme ich UIImageView Koordinaten?
- 23. Wie bekomme ich die Dialoggröße?
- 24. Wie bekomme ich Geräte-Token?
- 25. Wie bekomme ich das Programmverzeichnis?
- 26. Wie bekomme ich dieses Objekt?
- 27. Wie bekomme ich Lambda-Ausdrucksparameter?
- 28. Wie bekomme ich einen Zeilenumbruch?
- 29. Wie bekomme ich checkboxreeviewer getselection?
- 30. Wie bekomme ich Datei Icon?
[Android-Bibliothek zu erfassen und zu berichten Abstürze] (https://github.com/ajitsing/Sherlock) –