Fehlerberichterstattung a.k.a. Bugreport

Fehlerfreie Software gibt es nicht!

Diesem Satz kann man nur zustimmen, aber man kann lernen mit den auftretenden Fehlern umzugehen. Stürzt eine Android-Anwendung ab, so erhält man eine solche Meldung.

device-2014-09-17-183729

Leider fehlt es diesem Hinweis an Informationen, denn sowohl Benutzer als auch Entwickler können nichts damit anfangen. Lediglich das abrupte Programmende wird dem Benutzer deutlich gemacht. Während der Entwicklung hat man noch die Chance im Log nach der Ursache zu suchen, sobald die Anwendung an andere Verteilt wurde wird es jedoch schwierig mit der Fehlersuche. Ziel dieses Beitrags ist es nun, dass wir anstatt der Meldung „Anwendung XYZ wurde beendet.“ einen Dialog anzeigen, welcher dem Benutzer besser erklärt, was gerade passiert ist. Zudem soll man die Möglichkeit haben dem Entwickler einen Fehlerbericht zukommen zu lassen. Hierzu muss man das Rad nicht neu erfinden, denn es gibt bereits sehr einfach zu benutzende Bibliotheken dafür.

ACRA – Application Crash Report for Android

Eine recht einfache aber mächtige Bibliothek ist ACRA. Sie lässt sich einfach in vorhandene Anwendungen einbinden und bietet bereits von Haus aus viele Möglichkeiten der Berichterstattung. Um die Bibliothek in eurem Projekt zu nutzen müsst ihr euch nur auf der GitHub-Seite des Projekts das fertige Compilat herunterladen und es in den „libs“-Ordner eures Projekts hinterlegen.

2014-09-15 20_28_13-Java - BugreportSimple_src_de_matsta_tutorial_bugreportsimple_MainActivity.java

Damit alle in der Anwendung auftretende Fehler von ACRA erkannt werden, müssen wir unsere Anwendung anpassen. Hierzu legen wir eine neue Java-Klasse in unserem Paket an. Da wir die Klasse „Application“ erweitern wollen geben wir unsere neuen Klasse den Namen „BugreportApplication.java“.

2014-09-15 20_29_24-Java - BugreportSimple_res_layout_activity_main.xml - Eclipse

2014-09-15 20_29_53-Java - BugreportSimple_res_layout_activity_main.xml - Eclipse

Unsere neue Klasse erweitert nun die Klasse „Application“ und überschreibt das „onCreate“ Ereignis. Damit erreichen wir, dass ACRA beim Starten unserer Anwendung mit den vorgegebenen Parameter initialisiert wird. Die Parameter werden per Code Injection definiert. In unserem Beispiel sind die folgenden Parameter nötig:

  • formKey
    • Dieser Parameter wird nur zur Kompatibilität gesetzt. Er hat in diesem Beispiel keine Funktion.
  • mode
    • Hier geben wir an, wie der Benutzer über einen Fehler informiert werden soll. In unserem Fall soll ein Dialog angezeigt werden.
  • resDialogTitle
    • Hier geben wir die String-Ressource an, welche den Dialogtitel enthält.
  • resDialogText
    • Hier geben wir die String-Ressource an, welche den Dialoginhalt enthält.
  • mailTo
    • Hier geben wir die präferierte E-Mail Adresse an, an die der Fehlerbericht gesendet werden soll. In unserem Fall hat der Benutzer noch die Möglichkeit diese vor dem Versenden in seiner E-Mail App anzupassen.

In unserer String-Ressource müssen wir nun noch die zwei angegebene Strings eintragen.

Standardmäßig geht unsere App davon aus, dass die von der Klasse „Application“ abgeleitet wird. Damit statt dessen unsere „BugreportApplication“-Klasse verwendet wird, müssen wir dies im Manifest hinterlegen. Damit ACRA dem Benutzer auch einen Dialog anzeigen kann muss dieser ebenfalls im Manifest eingetragen werden.

Tritt in unserer Anwendung nun ein Fehler auf, so bekommt der Benutzer diesen Dialog angezeigt und kann sich entscheiden, ob er einen Fehlerbericht versenden möchte oder nicht.

device-2014-09-17-173347