Was Android-Entwickler darüber wissen sollten

Ressourcen und andere XML-Files


Wer mit der Android-Entwicklung startet, wird zunächst von einer Flut an XML-Dateien erschlagen. Dabei bietet diese Form der Konfiguration bei näherer Betrachtung und bei richtiger Anwendung eine gute Mischung aus Übersichtlichkeit und Struktur. Macht man sich allerdings über dieses generelle Vorgehen einmal näher Gedanken, kommen sofort einige Fragen auf: Vergrößert diese Flut an XML-Dateien das fertige APK nicht unnötig und ist XML-Processing nicht unglaublich langsam? Welche XML-Ressourcen gibt es überhaupt? Und wie kann ich eigene XML-Dateien definieren? Auf diese und weitere Fragen liefert diese Kolumne Antworten.

Um die brennendsten Fragen zuerst zu beantworten: Das viele XML macht Android-Anwendungen weder langsam noch führt es zu überhöhtem Speicherverbrauch. Dies liegt daran, dass alle XML-Dateien, die sich im Ordner res eines Android-Projekts befinden, bereits beim Kompilieren in Binärdateien umgewandelt werden. Auf diese Weise gelingt es, die Übersichtlichkeit von XML-Files zur Entwicklungszeit mit der hohen Performance und dem geringen Speicherverbrauch von Binärdateien zur Laufzeit zu kombinieren.

Beim Erzeugen der Binärdateien entsteht im Übrigen ein weiteres Artefakt, das Android-Entwicklern schon bekannt sein dürfte, nämlich die Klasse R. Diese enthält für jeden Unterordner des Ordners „res“ eine innere Klasse, die wiederum Konstanten für den Zugriff auf die Binärinformationen enthalten, die beim Kompilieren entstanden sind. So kann man z. B. im Java-Code auf das Element app_name aus einer XML-Datei in dem Ordner res/drawable zugreifen, indem man die Konstante R.drawable.app_name verwendet. Zusätzlich wird in R eine innere Klasse namens id generiert, die alle IDs aus den XML-Dateien enthält. Auf die ID my_id kann folglich über die Konstante R.id.my_id zugegriffen werden.

Die einzigen Dateien, die beim Kompilieren nicht in Binärdateien umgewandelt werden, sind alle Dateien, die sich in den Ordnern res/raw und res/xml befinden. Während res/raw für Dateien jeglichen Typs gedacht ist, ist der Ordner res/xml, wie der Name schon sagt, speziell für XML-Dateien gedacht, die nicht von Android in Binärdateien umgewandelt werden sollen. Für diese Dateien bietet Android XML-Parsing Out of the Box. Für beide Ordner erzeugt Android auch eine Unterklasse in der Klasse R, sodass man z. B. auf eine Datei namens myResource.xml, die im Ordner res/xml liegt, im Code über die Konstante R.xml.myResource zugegriffen werden kann.

Android-Resource-XML-Files

Für j...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang