Debugging von Android Anwendungen unter Eclipse

Wenn man Android Anwendungen mittels Eclipse programmiert so ist man auch in Besitz eines ausgewachsenen Debuggers, welcher einem bei der Fehlersuche hilfreich zur Seite steht. Damit wir etwas zum debuggen haben, bauen wir einen kleinen Fehler in unserer Hello World Programm ein. Das ganze sieht dann so aus:

package net.seeseekey.hello_world;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class hello_world extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

int result = 42/0;

TextView tv = new TextView(this);
tv.setText(result);
setContentView(tv);
}
}

Wenn wir das Programm starten stürzt es im Emulator ab, da eine Division durch Null nicht sehr beliebt ist. Um nun zu Debuggen müssen wir einen Breakpoint setzen. Diesen Breakpoint setzen wir an die Zeile int result = 42/0;. Ein Breakpoint wird gesetzt in dem man links von Quellcode auf der vertikalen Leiste eine Doppelklick vollführt.

Mittels Run -> Debug oder der F11 Taste starten wir das Programm im Debugmodus. Beim ersten Start im Debugmodus fragt uns Eclipse ob wir in die Debugansicht springen möchten was wir ablehnen. Das Programm startet dann ganz normal im Emulator bis der Debugger genau an der Stelle unterbricht wo wir den Breakpoint gesetzt haben.

Nun könnten wir z.B. den Term 42/0 in das Expression Fenster ziehen (Window -> Show View -> Other… -> Debug -> Expressions) und sehen dann das bei der Operation eine Divide by Zero herauskommt.

In dem View Debug befinden sich außerdem die Controls um durch das Programm oder in Funktionen hinein zu steppen. Soviel zum Debugging mittels Eclipse und Android :)

Hello World unter der Lupe

Heute wollen wir das Hello World Programm was in dem letzten Artikel beschrieben wurde ein klein wenig unter die Lupe nehmen. Dazu öffnen wir das Projekt erst einmal in Eclipse. Nachdem dies geschafft ist schauen wir uns die Datei hello_world.java an. Dort finden wir folgenden Code vor:

package net.seeseekey.hello_world;

import android.app.Activity;
import android.os.Bundle;

public class hello_word extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Wie man sieht wird die Klasse hello_world von der Klasse Activity abgeleitet. Bei Activity handelt es sich um eine Klasse welche für Standard GUI Anwendungen vorgesehen ist. Oder um Heise zu zitieren:

Im Android-Umfeld bezeichnet er eine lauffähige Einheit, also die Startklasse der Anwendung. Das Plug-in generiert daraus eine von android.app abgeleitete Klasse des angegebenen Namens.

Doch schauen wir uns erstmal unser Projekt an. Im großen und ganzen gibt es drei Ordner im Projekt, src, assets und res.

Im src befindet sich der Quellcode der Anwendung, der assets Ordner ist im leer und im res Ordner befinden sich drei Unterordner: drawable, layout und values. In dem Ordner drawable befinden sich die Grafiken in dem Ordner layout befindet sich das Layout (in einer XML Beschreibung) und im Ordner values stehen z.B. die Strings für Beschriftungen (bzw. in der values.xml).

Wer sich über die Datei R.java wundert. Diese Datei verknüpft die Ressourcen mit dem Programmcode. Sie braucht auch nicht angefasst werden, da sie stets automatisch erzeugt wird.

Weitere Informationen gibt es unter:
http://www.heise.de/developer/artikel/print/120124