Android ist ein Betriebssystem für mobile Geräte, dass seit 2007 hauptsächlich von der Firma Google entwickelt und vorangetrieben wird. Basierend auf einem Linux-Kernel wird eine Systemarchitektur bereit gestellt, die darauf ausgelegt ist, dass einzelne Programme (App-s) mit dem Betriebssystem und den von diesem bereit gestellten Diensten (z. B. zum Zugriff auf Telefoniefunktionen, WiFi, Standort-Ermittlung, ...), aber auch untereinander interagieren.

Nutzung bewährter Techniken und Konzepte

Bei Android wird nicht nur auf Linux als bewährtem Betriebssystem aufgebaut, sondern - in Hinblick auf die Erstellung von Programmen - auch auf das Konzept einer Rahmenstruktur (framework), in die die einzelnen Apps eingebettet werden. Damit wird, aus Sicht der Programme, auf der einen Seite die Nutzung der Infrastruktur ermöglicht, auf der anderen Seite führt das aber auch zu besondere Anforderungen, die sich aus der Einbettung ergeben. Hier findet man dann, als Java-Programmierer, ein (von der Arbeit mit Applets her bekanntes) altbewährtes Konzept wieder: die Arbeit mit Lebenszyklus-Methoden.

Applets waren am Beginn der Entwicklung von Java eine der Hauptattraktionen, die diese Sprache bekannt gemacht hat. Sie waren kleine Programme, deren Aufrufe in Webseiten eingebunden wurden - und damit war der Browser des Nutzers, der die Webseite anzeigte, zugleich die Rahmenstruktur, in die der Applet-Code eingebettet wurde. Er hatte sich also der Anzeige der Webseite, in die er eingebettet war, »unterzuordnen«. Auch wenn heute schon lange keiner mehr von Applets spricht, ist das Konzept der Einbettung von Programmen über Lebenszyklus-Methoden in eine größere Rahmenstrukturen hoch aktuell, und wird auch von den Hauptkomponenten von Android-Apps verwendet, insbesondere von den Activity - Objekten.

Neben der Programmiersprache Java, in der auch ein großer Teil von Android selber geschrieben ist, kann ich deshalb auch auf das Wissen zu weiteren, schon bekannten Programmiertechniken, zurück greifen. Da Android gleichzeitig in großen Teilen quelloffen ist und der Quellcode für das Java-API von Google mit zur Verfügung gestellt wird, kann man, in bestimmten Fällen, dort auch zu einzelnen Details »nachlesen«, die in der (schon recht umfangreichen) Dokumentation des Android-SDK-API nur kurz erwähnt sind.

top ↑

Neue Möglichkeiten

Daneben gibt es neue Möglichkeiten und Techniken, die zur Verfügung stehen, und die, unter anderem auch, die eigene Programmierarbeit erleichtern. Hierzu kann vor allem die Kodierung von Bedienoberflächen (GUI) mit XML genannt werden. Dadurch muss, im Normalfall, nur deklariert werden, »was« man an Bedienmöglichkeiten auf dem Gerätebildschirm (screen) angezeigt haben möchte, das Android-System kümmert sich dann um das Erzeugen und eine korrekte Verschachtelung der dazu nötigen Objekte. Durch ein ausgeklügeltes System der ID-Vergabe kann man auf einzelne Teile später beim Kodieren zurück greifen und dadurch nicht nur die hinter Bedienelementen wie Button, Eingabe- und Auswahlfeld stehende Funktionalität kodieren, sondern die Bedienoberfläche auch in gewünschtem (und sinnvollen) Umfang dynamisch verändern.

Die Techniken, sowohl zur Oberflächengestaltung als auch zu möglichen Programmstrukturen, haben sich in den Jahren des Bestehens von Android ebenfalls weiterentwickelt und sind ständig im Fluß. Hierzu zählt u. a. die Arbeit mit Fragment-en, mit denen sich Teilbereiche von Bedienoberflächen (inklusive zugehöriger Funktionalität) separat kodieren und einsetzen lassen. Das ermöglicht nicht nur, diese in verschiedenen »Anzeigeseiten« (Activity) einer App zu verwenden, sondern deren Layout auch bei Gerätedrehungen (Wechsel von portrait und landscape) effizient zu gestalten. So kann zum Beispiel im landscape-Modus die größere Breite dadurch genutzt werden, dass dort ein weiteres Fragment mit eingeblendet wird, im portrait-Modus dagegen nicht.

Weitere, neue Möglichkeiten ergeben sich aus der Hardware selber. Hierzu zählen nicht nur die heute i. A. von dieser unterstützte Medienwiedergabe für Bilder, Audio und Video, sondern auch der Zugriff auf die Hardware-Ausstattung wie Kamera und Sensoren, z. B. zur Standort-Ermittlung. Dadurch ergeben sich auch neue Möglichkeiten für die eigene Programmkonzeption. Als wichtiger Punkt in diesem Bereich muss unbedingt auch die Möglichkeit genannt werden, auf andere, bereits auf dem Android-Gerät installierte Apps zugreifen zu können. Auf diese Art und Weise wird auch zum Teil der Zugriff auf die Hardware realisiert. So gibt es zum Beispiel die Camera-App zum Zugriff auf die Kamera (hardware), oder eine Messaging-App zum Versenden von Kurznachrichten per SMS. Diese stellen ihrerseits Schnittstellen bereit, um sie von anderen Apps heraus nutzen zu können.

Somit erweist sich Android - aus Programmierersicht - als eine dynamische Plattform zur Entwicklung und Einbettung von eigenen Programmen, die in ständiger Bewegung und Weiterentwicklung ist. Neben »technischen« Aspekten spielen dabei auch Nutzererwartungen und -ansprüche ein wichtige Rolle. Diese umfassen inzwischen auch immer mehr das Bedürfnis nach Datensicherheit und Kontrolle über die eigenen Daten. Auch diesen muss man sich als Programmier im Bereich der Android-App - Programmierung stellen.

top ↑

App-Beispiel: PIA

Als Beispiel für die Anwendung einiger dieser Möglichkeiten und Techniken möchte ich die App PIA vorstellen. Ihre Funktionalität wird auf einer separaten Seite im Einzelnen beschrieben. Ein Download der App ist im Download-Bereich möglich.

Hier möchte ich kurz die Techniken auflisten, welche in der App genutzt werden:

  • Oberflächengestaltung mit XML, inklusive dynamischen Änderungen von Bedienelementen
  • Arbeit mit Fragmenten
  • Zugriff auf Sensoren/Systemdienste: GPS-Sensor, Zwischenablage
  • Zugriff auf andere Apps (vorhandene bzw. ggf. noch zu installieren): Kontakte-App, Messaging-App, Google Maps
  • Persistente Speicherung von Daten und eigenen Konfigurationseinstellungen