Großer Beleg
Vergleich von Plattformen für Mobile Geräte
bearbeitet von
René Dienel
geboren am 27.08.1981 in Zittau
Matrikelnummer: 2928117
Technische Universität Dresden
Fakultät Informatik Institut für Systemarchitektur Professur Rechnernetze
Betreuer: Dr.-Ing. Thomas Springer Lehrstuhlinhaber: Prof. Dr. rer. nat. habil. Dr. h. c. Alexander Schill Bearbeitungszeit: 14.05.2008 - 14.02.2009
1
Inhaltsverzeichnis 1 Einleitung...... 3 1.1 Mobile Geräte...... 3 1.2 Limitierungen...... 4 1.3 Plattformen...... 4 1.4 Aufbau der Arbeit...... 5 2 Plattformen...... 6 2.1 Kriterienkatalog...... 6 2.1.1 Architektur...... 6 2.1.2 Laufzeitumgebung...... 6 2.1.3 Speicherverwaltung...... 6 2.1.4 Grafische Benutzungsoberfläche...... 7 2.1.5 Persistente Datenspeicherung...... 7 2.1.6 Multimediaunterstützung...... 7 2.1.7 Kommunikationsschnittstellen...... 7 2.1.8 Sicherheitsmechanismen...... 7 2.1.9 Native Programmierung ...... 7 2.1.10 Entwicklungsumgebung...... 7 2.1.11 Besonderheiten...... 8 2.2 Symbian...... 9 2.2.1 Java Micro Edition...... 10 2.2.2 Architektur...... 10 2.2.3 Laufzeitumgebung...... 13 2.2.4 Speicherverwaltung...... 14 2.2.5 Grafische Benutzungsoberfläche...... 15 2.2.6 Persistente Datenspeicherung...... 16 2.2.7 Multimediaunterstützung...... 17 2.2.8 Kommunikationsschnittstellen...... 18 2.2.9 Sicherheitsmechanismen...... 20 2.2.10 Native Programmierung...... 21 2.2.11 Entwicklungsumgebung...... 21 2.2.12 Besonderheiten der Plattform...... 22 2.3 Windows Mobile...... 23 2.3.1 .NET Compact Framework ...... 23 2.3.2 Architektur...... 24 2.3.3 Laufzeitumgebung...... 25 2.3.4 Speicherverwaltung...... 26 2.3.5 Grafische Benutzungsoberfläche...... 27 2.3.6 Persistente Datenspeicherung...... 28 2.3.7 Multimediaunterstützung...... 29 2.3.8 Kommunikationsschnittstellen...... 30 2.3.9 Sicherheitsmechanismen...... 30 2.3.10 Native Programmierung...... 31 2.3.11 Entwicklungsumgebung...... 31 2.3.12 Besonderheiten der Plattform...... 32 2.4 Android...... 33 2.4.1 Android-Plattform...... 33 2.4.2 Architektur...... 34 2
2.4.3 Laufzeitumgebung...... 37 2.4.4 Speicherverwaltung...... 39 2.4.5 Grafische Benutzungsoberfläche...... 40 2.4.6 Persistente Datenspeicherung...... 42 2.4.7 Multimediaunterstützung...... 43 2.4.8 Kommunikationsschnittstellen...... 43 2.4.9 Sicherheitsmechanismen...... 44 2.4.10 Native Programmierung...... 44 2.4.11 Entwicklungsumgebung...... 44 2.4.12 Besonderheiten der Plattform...... 45 2.5 Vergleich der Plattformen...... 46 3 Referenzanwendung...... 48 3.1 Konzept...... 48 3.2 Umsetzung...... 48 3.3 Webservice...... 49 3.4 Java ME Klient...... 50 3.5 .NET CF Klient...... 53 3.6 Android Klient...... 55 3.7 Auswertung...... 57 4 Ausblick...... 59 Literaturverzeichnis...... 60 Abbildungsverzeichnis...... 64 Abkürzungsverzeichnis...... 65 Einleitung 3
1 Einleitung Mobiltelefone und Digitale Assistenten haben mittlerweile Einzug in unseren Alltag gefunden. Seit Mitte April gibt es in Deutschland über 100 Millionen Mobilfunkan- schlüsse [BIT07]. Statistisch besitzt jeder fünfte Deutsche zwei Mobiltelefone. Diese werden inzwischen nicht mehr nur für ihren vorgesehenen Zweck verwendet. Tech- nologische Entwicklungen haben die Leistungsfähigkeit der Geräte und ihre Eigen- schaften enorm verbessert. Sie werden heutzutage als Digitalkamera oder Musik- player verwendet. Das Ziel des Mobile Computing, Informationen zu jeder Zeit und an jedem Ort abrufen zu können, wird durch neue Kommunikationstechnologien er- reicht. Neue Dienste für mobile Geräte, z.B. Stadtführung, Navigation oder Fahrplanaus- kunft, fördern die Entwicklung von innovativen Anwendungen. Der Markt wird von verschiedenen geschlossenen oder lizenzpflichtigen Systemen dominiert. Die Pro- grammierung von Anwendungen auf diesen ist sehr aufwendig oder nicht möglich. Die Systeme nutzen ihre eigenen Bibliotheken und unterstützen nur bestimmte Pro- grammiersprachen. Die Vielzahl der Geräte und die große Unterschiede in der Leis- tungsfähigkeit, der Größe des Bildschirms und der verfügbaren Eingabegeräte, er- schweren die gleichzeitige Entwicklung für eine große Anzahl an Geräten. Die An- wendungen müssen für das jeweilige Umgebung angepasst werden. Einen Ausweg bilden die mobilen Plattformen, auf denen Anwendungen unabhängig vom Gerätetyp und Ausstattung ausgeführt werden. Einige Plattformen sind bereits weit verbreitet und erhalten seit kurzem Konkurrenz aus dem Open Source Bereich.
1.1 Mobile Geräte Mobile Geräte können anhand ihrer Funktion klassifiziert werden. Mobiltelefone bie- ten Kommunikationsmöglichkeiten, wie ein Festnetztelefon, während Digitale Assis- tenten als transportables Datenarchiv dienen. Die Technologien der beiden Klassen entwickelten sich unabhängig voneinander weiter. Inzwischen enthält jedes Mobiltelefon ein Adressbuch und Funktionen mit denen Textnachrichten versendet werden können. Der technologische Fortschritt ermöglich- te die Entwicklung von kleineren und leistungsfähigeren Geräten. Das speziell entwi- ckelte Betriebssystem wurde um neue Anwendungen, wie Rechner, Spiele, Multime- diaplayer oder Webbrowser erweitert. Über die digitale Funkschnittstelle und das in- tegrierte Modem werden Sprache, Videos und Bilder übertragen. Mittlerweile hat sich das Mobiltelefon zum Feature Phone entwickelt. Diese Geräte enthalten speziel- le Funktionen, z.B. die integrierte Digitalkamera. Die heutige Generation hat sich von der reinen Sprachübertragung zur Datenkommunikation weiterentwickelt. Der Persönliche Digitale Assistent (PDA) verwandelte sich vom einfachen Termin- planer zu einem kompakten Taschencomputer. Dieser ist nicht größer als die Hand- fläche eines Menschen und dient der Verwaltung von elektronischen Dokumenten, Kontaktdaten und Terminen. Die gespeicherten Daten können überall abgerufen und verändert werden. Die digitalen Assistenten entwickelten sich zu leistungsfähigen Geräten mit neuen Eingabemöglichkeiten, großen Bildschirmen, größerem Speicher und wurden um drahtlose Kommunikationsschnittellen erweitert. Im Gegensatz zu den klassischen Mobiltelefonen verfügen sie über ein eigenes Betriebssystem, auf 4 Mobile Geräte dem zusätzliche Anwendungen installiert werden können. Aus den beiden unabhängigen Entwicklungszweigen bildete sich ein neuer Geräte- typ, das Smartphone. Dieser vereinigt die Funktionen der beiden Geräteklassen und verfügt über einen lokalen Speicher, höhere Rechenleistung und Multimediafunktio- nen. Der Austausch von Daten wird über die lokalen Verbindungsarten oder über die Verbindungsprotokolle des Mobiltelefons realisiert.
1.2 Limitierungen Im Vergleich zu Desktop-Computern sind die Ressourcen von mobilen Geräten ein- geschränkt. Die Beschränkungen sind im wesentlichen der Mobilität und der Größe des Gerätes geschuldet. Der Prozessor eines mobilen Gerätes arbeitet mit einer geringen Taktrate. Daher wer- den spezielle Aufgaben von zusätzlichen Mikrochips ausgeführt. Aufgrund der be- grenzten Rechenleistung sollten Berechnungen auf dem Gerät mit Bedacht ausge- führt und eventuell auf einen anderen Computer ausgelagert werden. Die Berechnung auf dem Gerät bietet eine schnellere Antwortzeit, benötigt aber zusätzlichen Speicher und Energie, während die Wartezeit, bei Ausführung auf einem Server, unangenehm für den Nutzer ist. Mobile Geräte besitzen nur einen Speicher von wenigen Megabytes für Anwendun- gen und Daten. Der Anwendung steht nur ein kleiner flüchtiger Speicher zur Verfü- gung. Daher sollte der Speicherverbrauch und die Größe der Anwendung minimiert werden. Der Datenspeicher ist durch die Größe des Speichermediums limitiert. Eine weitere Einschränkung für Mobiltelefone und Digitale Assistenten ist die Auflö- sung des Bildschirms. Diese schränkt die Menge der gleichzeitig darstellbaren Infor- mationen ein. Daher wird eine angepasste Menüführung benötigt, die auf die Einga- bemöglichkeiten abgestimmt ist. Diese sind sind meist unhandlich, die Stifteingabe ist ungewohnt und die alphanumerische Tastatur oder das ITU-T-Keypad1 ist zu klein. Eingaben sollten auf ein Minimum reduziert und die Navigation durch einfa- che Klicks oder Optionsfelder realisiert werden. Die Energie der Geräte ist begrenzt und kostbar. Daher sollten unnötige Aktivitäten, umfangreiche Berechnungen oder Tonausgabe vermieden werden. Datenverbindun- gen werden über drahtlose Netze hergestellt. Diese haben meist nur eine geringe Bandbreite und sind unzuverlässig.
1.3 Plattformen Anwendungen setzen grundlegende Funktionalitäten der Geräte voraus. Dazu gehö- ren Ein- und Ausgabegeräte, ein persistenter Speicher und Möglichkeiten der Kom- munikation. Diese werden durch die entsprechende Hardware angeboten. Die dafür erforderliche hardwarenahe Programmierung ist zeitintensiv und setzt Hardware- kenntnisse voraus. Deshalb wird eine abstrakte Sicht auf das System benötigt. Abbil- dung 1 zeigt die Architektur eines mobilen Gerätes, die aus vier aufeinander aufbau- enden Schichten besteht.
1 besteht aus den Zahlen 0-9 und den Zeichen * und # Plattformen 5
Abbildung 1: Struktur eines mobilen Gerätes [Talu06] Die Hardwareschicht beschreibt die Komponenten des Systems. Zu diesen gehört der Mikroprozessor2, ein digitaler Signalprozessor3, die Ein- und Ausgabegeräte, eine Energiequelle sowie der flüchtige und persistente Speicher. Diese sind meist auf ei- nem Printed circuit board4 integriert. In der darüber liegenden Schicht befindet sich das Betriebssystem. Das Systempro- gramm kontrolliert die Ressourcen des Systems. Es ermöglicht die Ausführung von Anwendungen und bildet die Basis für die Entwicklung von Anwendungsprogram- men. Moderne Betriebssysteme bieten dafür zahlreiche Dienste und Funktionen an. Auf diesen Funktionen baut die Softwareplattform auf. Diese stellt eine zusätzliche Abstraktionsebene zwischen dem Betriebssystem und der Anwendung dar. Die Platt- form definiert zum einen eine Ausführungsumgebung und zum anderen eine Pro- grammierschnittstelle. Die Laufzeitumgebung stellt die erforderlichen Basisfunktio- nen und -dienste für Anwendungen zur Verfügung und übernimmt, unabhängig von den darunter liegenden Schichten, die Verwaltung des Speichers und weiterer Res- sourcen. Die Anwendungen werden von einer Laufzeitumgebung ausgeführt, welche den zumeist vorkompilierten Anwendungscode interpretiert und in Maschinencode übersetzt. Die Programmierschnittstelle besteht aus der Klassenbibliothek, einer Sammlung vorgefertigter Klassen, Schnittstellen und Werttypen zur Wiederverwen- dung in Anwendungen, und bildet die Grundlage der Anwendungsprogrammierung. Die Plattform stellt die Umgebung für die oberste Schicht bereit. In dieser befinden sich die Anwendungen. Sie nutzen die Funktionen der Klassenbibliothek und sind von der restlichen Architektur unabhängig.
1.4 Aufbau der Arbeit Im ersten Teil der Arbeit wird ein Kriterienkatalog für den Vergleich von Plattformen erstellt. Anschließend werden die ausgewählten Plattformen Java Micro Edition, .NET Compact Framework und Android anhand der Kriterien analysiert. Der praktische Teil zeigt am Beispiel eines Bilderarchivs die Implementierung einer mobilen Anwendung auf den untersuchten Plattformen.
2 Mikrochip, auf dem alle Komponenten eines Prozessor vereinigt sind 3 Komponente zur Signalmanipulation 4 Leiterplatten mit gedruckter Schaltung 6 Plattformen
2 Plattformen In der heutigen Anwendungsentwicklung beschreibt der Begriff Plattform eine Soft- wareebene zwischen Betriebssystem und den Anwendungen. Sie stellt die benötigten Funktionen zur Ausführung von Anwendungen zur Verfügung, unabhängig von tiefe- ren Systemschichten. Für den Vergleich wird zunächst ein Kriterienkatalog entwickelt. Die zu untersuchen- den Plattformen werden, nach einer Beschreibung der Basissysteme, anhand der Kri- terien vorgestellt. Abschließend wird der direkte Vergleich der Plattformen durchge- führt.
2.1 Kriterienkatalog Im folgenden werden die Kriterien einer mobilen Plattform definiert. Anhand dieser kann eine Plattform untersucht und mit anderen verglichen werden.
2.1.1 Architektur Das Kriterium Architektur befasst sich mit dem Aufbau der Plattform aus einer ab- strakten Sicht und visualisiert das Funktionsprinzip. Dazu wird das System in die einzelnen Komponenten zerlegt. Diese werden charakterisiert und ihre Funktion in- nerhalb des Softwaresystems beschrieben.
2.1.2 Laufzeitumgebung Die mobile Plattform enthält, oberhalb der Hardware und dem Betriebssystem, eine unabhängige Softwareschicht, die generische Funktionen zur Verfügung stellt. Ein Teil dieser Schicht ist die Laufzeitumgebung. Sie verwaltet die Ressourcen der Platt- form und kontrolliert den Lebenszyklus der Anwendungen. Die virtuelle Maschine interpretiert den Anwendungscode und übersetzt ihn in Maschinenbefehle. erlaubt die Ausführung der Anwendungen unabhängig von der Hardware. Die Anwendung ist dadurch vom restlichen System getrennt.
2.1.3 Speicherverwaltung In diesem Kriterium werden die speziellen Verfahren der Speicherverwaltung be- trachtet. Mobile Geräte verfügen meist nur über einen kleinen Speicher. In diesem befinden sich die laufenden Anwendungen und die gespeicherten Daten. Der Spei- cher kann über Erweiterungsschnittstellen hinzugefügt werden und steht als weiterer Datenspeicher zur Verfügung. Das Prinzip der Auslagerung von Programmen kann aufgrund des geringen Speichers nicht angewendet werden. Daher benötigen die Ge- räte ein effizientes Speichermanagement. Diese Aufgabe wird vom Betriebssystem oder der Laufzeitumgebung der Plattform übernommen. In verwalteten Umgebungen übernimmt der Garbage Collector die Speicherbereinigung. Geeignete Verfahren wirken der Fragmentierung des Speicher entgegen. Weiterhin ist es sinnvoll mehr- fach genutzte Ressourcen in einem globalen Speicherbereich abzulegen und den Speicherbedarf zu minimieren. Kriterienkatalog 7
2.1.4 Grafische Benutzungsoberfläche Im Gegensatz zu modernen Computern besitzen mobile Geräte nur einen kleinen Bildschirm auf dem alle Informationen angezeigt werden. Dieser unterscheidet sich, abhängig von der Größe des Geräts, in der Auflösung und in der Anzahl der darstell- baren Farben. Die Grafikschnittstelle muss flexibel sein und sich an die Eigenschaf- ten der Geräte anpassen. Vordergründig sollen die vorgefertigten Bedienelemente der Grafikbibliothek, die Anpassung an die verschiedenen Eingabemöglichkeiten und die Positionierung auf dem Bildschirm betrachtet werden. Weiterführend sollen die ele- mentaren Grafikfunktionen und spezielle Möglichkeiten, wie 3D-Unterstützung, der Plattform aufgezeigt werden.
2.1.5 Persistente Datenspeicherung Anwendungen benötigen zum Sichern von Einstellungen oder anderen Daten einen persistenten Speicher. Das Kriterium fasst die Möglichkeiten der Plattform zusam- men, in welcher Form Daten im Gerät abgespeichert und gelesen werden können.
2.1.6 Multimediaunterstützung Das Kriterium widmet sich der Wiedergabe und Aufzeichnung von Mediendateien der mobilen Plattform. Dabei soll der Aufbau des Multimediasystems erklärt und auf die unterstützten Wiedergabe- und Aufnahmemöglichkeiten und Formate eingegan- gen werden.
2.1.7 Kommunikationsschnittstellen Mobile Geräte besitzen integrierte Funkschnittstellen zur Kommunikation über drahtlose Netze. In diesem Kriterium werden die Netzwerkfunktionen der Plattform vorgestellt. Darüber hinaus wird auf die unterstützten Verbindungstypen und Proto- kolle eingegangen.
2.1.8 Sicherheitsmechanismen Die Sicherheit innerhalb der Plattform ist auf mobilen Geräten von großer Bedeu- tung. Die Plattformen muss die Anwendungen sicher ausführen und die Beeinflus- sung des Systems verhindern. In diesem Kriterium wird auf die Sicherheitsmechanis- men der Plattform eingegangen, vordergründig auf die Prüfung des Byte-Code und der Integrität der Anwendungen. Zudem wird auf die Schutzmechanismen, das Rech- temodell und die Fehlerbehandlung eingegangen.
2.1.9 Native Programmierung Das Kriterium befasst sich mit dem Zugriff auf die Hardware und Funktionen des Betriebssystems. Daher sollen die Möglichkeiten aufgezeigt werden, wie native Pro- gramme oder Bibliotheken genutzt werden können.
2.1.10 Entwicklungsumgebung Für die Entwicklung von Anwendungen wird eine Entwicklungsumgebung für die 8 Kriterienkatalog
Plattformen benötigt. Daher soll auf das Software Development Kit und unterstützte Entwicklungsumgebungen eingegangen werden.
2.1.11 Besonderheiten Diesem Kriterium dient zum Beschreiben von besonderen Merkmalen der Plattform. Zudem kann auf spezielle Funktionen und Konzepte eingegangen werden. Symbian 9
2.2 Symbian Symbian ist ein Softwareunternehmen des finnischen Mobiltelefonherstellers Nokia. Das Unternehmen entwickelt und vertreibt das offene Betriebssystem Symbian OS. Symbian OS ist der direkte Nachfolger des EPOC-Betriebssystem der Firma Psion, welches 1997 im ersten Organizer eingesetzt wurde. Seit 1998 wird das System von einem Konsortium, bestehend aus Psion, Nokia, Sony, Ericsson und Motorola, wei- terentwickelt. Das Betriebssystem ist für Mobiltelefone und Organizer konzipiert und zeichnet sich durch Sicherheit, Stabilität und Erweiterbarkeit aus. Die Geräte werden in verschiedene Klassen eingeteilt. Diese wurden früher als Device Family Reference Design (DFRD) bezeichnet. Die Geräteklassen beschreiben unter anderem das Erscheinungsbild5 der grafischen Oberfläche, die vorinstallierten Anwendungen, die Anpassung an die speziellen Eingabegeräte und die Hardwarean- forderungen. Die wichtigsten Klassen der Symbian OS Version 6 waren Pearl, Crys- tal und Quartz. Das Pearl-Design beschreibt ein Mobiltelefon mit numerischem Ein- gabegerät und kleinem Farbbildschirm. Crystal-Design Geräte besitzen eine vollstän- dige alphanumerische Tastatur und einen großen Bildschirm im Querformat. Geräte des Quartz-Designs nutzen eine Stifteingabe auf einem berührungsempfindlichen Bildschirm im Hochformat. Diese Einteilung wurde in die heutigen Versionen über- tragen. Die Geräte werden als Smartphone, Communicator und PDA eingeteilt. Die Hersteller können darüber hinaus ihr eigenes Referenzdesign erstellen und wie bei- spielsweise Nokia durch sogenannte Series-Plattformen beschreiben. Diese sind spe- zielle Softwareplattformen für Geräte mit Symbian OS und bieten erweiterte Funktio- nen, z.B. eine individuelle Benutzungsoberfläche, zusätzliche Telefoniefunktionen, Java- und XHTML-Technologien und weitere Kommunikationsschnittstellen. Das Symbian OS Betriebssystem verwaltet den Speicher des Gerätes, welcher in drei Typen unterteilt wird. Der erste Typ ist ein Read Only Memory (ROM), indem sich das Betriebssystem und die vorgefertigte Software befindet. Der Zweite enthält die installierten Anwendungen und die abgespeicherten Daten. Der Dritte ist ein schnel- lerer Speicher und wird für die Ausführung der Anwendungen genutzt. Eine weitere Aufgabe des Betriebssystems ist die Energieverwaltung. Ein gesonderter Thread mit niedriger Priorität versetzt das System in den Ruhezustand, wenn es nicht benötigt wird. Das Betriebssystem unterstützt, neben Python und Flash-Lite, hauptsächlich die Pro- grammiersprachen C++ und Java für die Anwendungsentwicklung. Die native Pro- grammierung in C++ bietet den Programmierern hohe Flexibilität bei der Anwen- dungsentwicklung und Zugriff auf alle öffentlichen Funktionen des Betriebssystems. Die Programme nutzen die gleichen Schnittstellen, wie die integrierten Anwendun- gen. Aufgrund der speziellen Eigenschaften existiert für jede Geräteklasse ein eige- nes Software Development Kit (SDK) mit speziellen Werkzeugen und Emulatoren. Einige Herstellen stellen eine eigene Entwicklungsumgebungen bereit. Das Java Micro Edition Subsystem ist Teil des Symbian OS Betriebssystem und stellt die Plattform für Anwendungen in der Programmiersprache Java bereit. Die Java Plattform erlaubt die Ausführung von Anwendungen auf einer Vielzahl unterschiedli- cher Geräte. Im Gegensatz dazu ist der native C++ Code für die spezielle CPU-Ar-
5 eng.: Look & Feel 10 Symbian chitektur kompiliert und wird dadurch wesentlich schneller ausgeführt. Die Entwick- ler des Symbian OS betreiben einen großen Aufwand, um auch die Ausführung auf der Java Plattform zu beschleunigen. Dies wird durch eine, an das Betriebssystem angepasste, Implementierung der Java Virtuellen Maschine (JVM) erreicht. Weitere Verbesserungen werden durch die Dynamic Adaptive Compilation (DAC), die Java Byte-Code während der Laufzeit in nativen Code übersetzt, oder durch die Verwen- dung mehrerer Threads für die Ausführung erreicht. Der Zugriff auf Betriebssystem- funktionen wird über zusätzliche Programmierschnittstellen bereitgestellt. Diese sind Bestandteil des SDK für den Gerätetyp und gehören nicht zum Java ME-Standard. [Morr07]
2.2.1 Java Micro Edition Die Java Micro Edition (Java ME) ist die, von Sun Microsystems6 entwickelte, Java Plattform für mobile Endgeräte und eingebettete Systeme. Sie ist die kleinste der drei Java Editionen und speziell für den Einsatz auf Geräten mit beschränkten Ressourcen konzipiert. Die Java ME ist eine Sammlung von Technologien und Spezifikationen und und bietet eine vollständige Ablaufumgebung. Dadurch können Anwendungen auf verschiedenen Betriebssystem ausgeführt werden, für die es eine Laufzeitumge- bung gibt. Sie enthält eine große Menge standardisierter Programmierschnittstellen. Diese sind aus der Java Standard Edition (Java SE) übernommen oder für mobile Geräte neu erstellt. [Orti07]
2.2.2 Architektur Die Java Micro Edition, früher Java Plattform 2 Micro Edition, besteht aus horizon- talen Konfigurationen, vertikalen Profilen und optionalen Paketen.
Abbildung 2: Java ME in der Java Plattform [Sun08]
6 http://de.sun.com/ Symbian 11
• Konfiguration: Basis-Klassen für IO-Streams, Basistypen, Threads, Ausnah- men, Auflistungen, grundlegende Netzwerkklassen • Profile: GUI-Verwaltung, persistente Speicherung, Steuerung des Lebenszy- klus, Multimedia, spezifische Netzwerkklassen • optionale Pakete: File API, erweiterte Multimediaunterstützung, Webservice Die Konfigurationen, die Profile und die optionalen Pakete gehen aus Arbeitsgruppen des Java Community Process (JCP) hervor. Dieser bietet den beteiligten Herstellern die Möglichkeit eine, mit den Wettbewerbern, abgestimmte Schnittstelle für besonde- re oder neue Leistungsmerkmale zu spezifizieren. Grundsätzlich besteht keine Imple- mentierungspflicht der Spezifikation auf dem Endgerät. Ausgangspunkt ist der Java Specification Request (JSR) eines Mitglieds. Das Resultat ist die Spezifikation und eine Referenzimplementierung. Diese sind auf der Internetseite des Java Community Process7 für alle Java Editionen abrufbar. Die zwei wichtigsten Konfiguration der Java ME sind die Connected Device Config- uration (CDC) und die Connected Limited Device Configuration (CLDC). Die CDC ist durch die [JSR036], die CLDC 1.0 durch die [JSR030] und die CLDC 1.1 durch die [JSR139] spezifiziert. Diese definieren die verfügbaren Sprachmittel, den Funkti- onsumfang der JVM und die minimalen Anforderung an die Endgeräte. Der Prozes- sortyp, die minimale Kapazität des flüchtigen und permanenten Speicher und die Kommunikationsschnittstellen sind durch die Spezifikation festgelegt. Die Konfigu- rationen sind das Grundgerüst der Java Plattform für Geräte mit beschränkten Res- sourcen. Die Endgerätehersteller müssen die Spezifikation in vollem Umfang in ih- ren Geräten implementieren und die definierten Anforderung erfüllen. Dadurch wird die Portabilität gewährleistet. Die Profile sind von der darunter liegenden Konfiguration abhängig, da sie die Leis- tungsmerkmale und Teile der Klassenbibliothek voraussetzen. Sie enthalten zusätzli- che Klassen für die Verwaltung der Benutzungsschnittstelle, zur Speicherung persis- tenter Daten und zur Steuerung des Lebenszyklus der Anwendung. Die mobile Java Plattform setzt sich aus der Konfiguration, den Profilen und den optionalen Paketen zusammen. Die Connected Device Configuration ist eine umfangreiche Konfiguration und ba- siert im wesentlichen auf der Java Standard Edition (CDC 1.0 Java SE 1.3, CDC 1.1 Java SE 1.4.2). Sie setzt sich aus einer vollwertige Java Virtual Machine und einer umfangreichen Teilmenge der Java SE API zusammen. Aus diesem Grund unterstützt sie die Programmiersprache Java vollständig und ist gegenüber der Java Standard Edition nicht eingeschränkt. Sie definiert drei aufeinander aufbauende Profile:
Foundation Profile – die kleinste Teilmenge ohne grafische Komponenten
Personal Basis Profile – Teilpakete des Abstract Window Toolkit (AWT)
Personal Profile – alle Komponenten des AWT Die CDC ist für größere Geräte mit höherer Leistung und Speicherkapazität und Sys- teme ohne Eingabegerät und dauerhafter Netzwerkanbindung ausgelegt. Sie wird in in High-End-PDAs, Set-top Boxen oder eingebetteten Systemen eingesetzt.
7 www.jcp.org 12 Symbian
Die zweite Konfiguration der Java ME ist die Connected Limited Device Configura- tion. Sie besteht aus einer minimalen Klassenbibliothek und einer speziellen JVM mit eingeschränkten Funktionsumfang und geringem Speicherverbrauch. Im Kapitel Laufzeitumgebung wird genauer auf die Kilobyte Virtual Machine (KVM) eingegan- gen. Die Spezifikation der CLDC schreibt eine minimale Speicheranforderungen von 160kB permanenten und 32kB flüchtigen Speicher und einen 16 oder 32-bit Prozes- sor vor. Die CLDC ist damit für kleine mobile Endgeräte mit begrenzter Rechenleis- tung, geringer Speicherkapazität und drahtloser Kommunikationsschnittstelle mit niedriger Bandbreite geeignet. Sie findet Einsatz in Mobiltelefonen und Smart- phones.
Abbildung 3: CLDC Architektur [Brey06] Die CLDC bildet die Basis für das Mobile Information Device Profile (MIDP). Wei- tere Profile, beispielsweise das Information Module Profile [JSR195], welches in ein- gebetteten Systemen ohne grafischen Bildschirm verwendet wird, setzten die CLDC als Grundlage voraus. Darüber hinaus existieren noch die weniger bekannten Profile für digitale Assistenten (PDA Optional Packages [JSR075]) oder Set-Top-Boxen (Digital Set Top Box Profile [JSR242]). Das Mobile Information Device Profile ist das bekannteste Profil der CLDC. Es er- weitert die Konfigurationen und enthält die Funktionen für die Entwicklung mobiler Anwendungen. Die beiden Versionen des MIDP werden durch [JSR037] (MIDP 1.0) und [JSR118] (MIDP 2.0) spezifiziert und erfordern mindestens die CLDC 1.0. Die Spezifikationen legen, im Gegensatz zu den Konfigurationen, nur die minimalen An- forderungen fest. Zusammen mit der CLDC bilden sie eine umfangreiche Program- mierschnittstelle. Die Schwerpunkte der API liegen in der Benutzeroberfläche, Netz- werkfunktionen und die Speicherung persistenter Daten. Die zweiten Version enthält Verbesserung und neue Funktionen zur Wiedergabe von Medien, sichere Netzwerk- verbindungen und eine API für Spiele. Die Spezifikation des MIDP 2.0 schreibt eine Bildschirmauflösung von mindestens 96x54 Pixel und 1-Bit Farbtiefe, eine drahtlose Netzwerkverbindung mit limitierter Bandbreite, zusätzlich zur Konfiguration 256kB permanenten und 128kB flüchtigen Speicher und die Eingabemöglichkeiten fest. Diese Anforderungen dienen der Portabilität der Anwendungen und gewährleisten die Ausführung auf verschiedenen Endgeräten. Die Anwendungen des MID-Profils werden, in Anlehnung an Java Applets, MIDlets genannt. Sie werden in einer normalen Java Klasse implementiert und erben die Me- Symbian 13 thoden des Lebenszyklus zum Starten, Pausieren und Beenden der Anwendung von der abstrakten MIDlet-Klasse. Die Ereignisverarbeitung wird über Javatypische Eventlistener realisiert. Mehrere MIDlets können in einer MIDlet Suite, der kleinsten installierbaren Einheit, zusammengefasst werden. Die Kombination erlaubt den Zu- griff auf statische Klassenvariablen und gemeinsame Ressourcen in der Suite. Die Anwendung wird in ein Java Archiv (JAR) verpackt, welches den kompilierten Byte- Code, die Ressourcen (Bilder, Text) und das Manifest enthält. Das obligatorische Manifest enthält Meta-Informationen der Suite als Schlüssel-Wert-Paare. Zum Inhalt gehört der Name der Suite, die Version, der Ersteller, die Größe des Archivs, die be- nötigte Konfiguration und das Profil, sowie anwendungsspezifische Attribute. Der optionale Java Application Descriptor (JAD), mit gleicher Syntax, kann zusätzliche Informationen enthalten und wird zur Überprüfung der Konfiguration, des Profil und des benötigten Speicherplatzes während der Installation der Suite verwendet. Bei un- terschiedlichen Werten wird im MIDP 1.0 der Application Descriptor genutzt. In Ver- sion 2.0 sind MIDlet Suites mit widersprüchlichen Angaben unzulässig und führen zum Abbruch der Installation. Der JAD kann zusätzlich URLs für die Installation über das Over-The-Air Provisioning8 (OTA Provisioning) enthalten. In diesem Fall wird das Java Archiv nach erfolgreicher Überprüfung von einem Webserver über das Hypertext Transfer Protokoll geladen. Über diesen Mechanismus kann sich der Er- steller der Anwendung über die erfolgreiche Installation oder Deinstallation benach- richtigen lassen. Diese Aufgaben übernimmt die Application Management Software (AMS), die auch den Lebenszyklus der Anwendung steuert und Teil der Laufzeitum- gebung ist. Über den Profilen befinden sich die optionalen Pakete. Diese erweitern die Plattform um spezielle Klassen für den Zugriff auf die Hardware oder bieten zusätzliche Funk- tionen. Die unterstützten Pakete können von Hersteller zu Hersteller und innerhalb einer Produktlinie von Modell zu Modell variieren. Dadurch wird die Portabilität von Anwendungen eingeschränkt. Eine Überprüfungsmöglichkeit ist nicht vorgesehen. Einen Ausweg bildet Java Technology for Wireless Industry9 (JTWI). Diese Spezifi- kation ist ein neuer Versuch eine gemeinsame Basis für mobile Anwendungen zu schaffen, welche die Anforderungen der Konfigurationen und Profilen übersteigen. Die Geräte müssen die Eignung in speziellen Tests nachweisen. [Gigu02], [Gigu02a], [Mahm01], [Mare05]
2.2.3 Laufzeitumgebung Die Kilobyte Virtual Machine (KVM) ist die Laufzeitumgebung der CLDC. Sie un- terstützt zum einen die essentiellen Funktionen der Programmiersprache Java und ist für die Verwendung in Systemen mit geringer Speicherkapazität optimiert. Abhängig von der Zielplattform benötigt die KVM 40-80kB Speicher und ist durch die Imple- mentierung in C auf viele Plattformen portierbar. Die Laufzeitumgebung basiert auf der Virtuelle Maschine der Java SE. Aus dieser wurden einige Funktionen entfernt, die auf mobilen Geräten nicht benötigt werden. Die Fließkommaberechnung ist auf- grund fehlender Hardwareunterstützung nicht integriert. In Version 1.1 der CLDC wurde sie hinzugefügt und wird gegebenenfalls von einer Softwareimplementierung übernommen. Darüber hinaus fehlen die Funktionen des Java Native Interface (JNI),
8 Bereitstellung der Anwendung über die drahtlose Schnittstelle 9 http://java.sun.com/products/jtwi/ 14 Symbian da diese Bibliothek zu umfangreich ist. Die Funktionen der Introspektion10 sind nicht vorhanden, sodass die Serialisierung und Remote Method Invocation (RMI) nicht un- terstützt wird. Die KVM verwendet nur nebenläufige Threads. Thread-Gruppen11 oder Daemon-Threads existieren nicht, da der Programmablauf mit dem letzten User- Thread endet. Die Garbage Collection ist vorhanden, besitzt jedoch nicht die Fähig- keit Objekte zu finalisieren und genutzte Ressourcen automatisch freizugeben. Der Classloader der KVM kann nicht durch eine eigene Implementierung ersetzt werden. Darüber hinaus beinhaltet sie nur eine rudimentäre Fehlerbehandlung. Tritt ein Fehler auf, der nicht in der CLDC definiert ist, wird die KVM angehalten oder ein Objekt der Error-Klasse wird ausgeworfen. Diese Einschränkungen ermöglichen die Erstel- lung der KVM mit einem geringen Speicherplatzverbrauch. Die Implementierung, inklusive der KVM und den Java Bibliotheken, erfordert auf der Zielplattform mini- mal 128kB. Sie wird meist als Modul in einem Softwaresystem eingesetzt und kann Systemdienste und Anwendungen enthalten. [Sun00]
2.2.4 Speicherverwaltung Die Speicherbereinigung wird, wie die anderen Java Editionen, vom Garbage Col- lector durchgeführt. Dieser Dienst der virtuellen Maschine gibt nicht mehr genutzten Speicher frei. Im Gegensatz zu anderen Programmiersprachen (C, C++) kann in Java der Speicher nicht manuell freigegeben werden. Der gesamte Speicher wird von der KVM verwaltet. In Java gibt es keine Zeiger, da diese die Funktionsweise der Garbage Collection beeinflussen könnten. Die Klassenbibliothek bietet dem Pro- grammierer eine Methode um die Speicherbereinigung auszulösen. Die Laufzeitum- gebung entscheidet selbst, wann die Bereinigung durchgeführt wird. Der verwendete Algorithmus ist nicht vorgeschrieben und von der Implementierung der KVM abhän- gig. Der Garbage Collector entfernt ein Objekt, wenn es von keinem aktiven Thread referenziert wird. Dies ist der Fall, wenn der Thread beendet wird, die Referenz eines Objekts auf null gesetzt wird, oder das Objekt nur isolierte Referenzen enthält. Im Vergleich zu den anderen Java Editionen steht auf Java ME-Geräten nur sehr we- nig Speicher zur Verfügung. Daher ist eine solide Speicherverwaltung für ein zuver- lässiges System ausschlaggebend. Tritt ein interner Fehler auf, erzeugt die Fehlerbe- handlung eine Instanz einer Unterklasse der Error-Klasse. In der Konfiguration kön- nen bestimmte Fehler definiert werden, welche die Laufzeitumgebung beenden. Be- nötigt eine Anwendung mehr Speicher als zur Verfügung steht, wird der OutOfMemoryError ausgelöst. Er entsteht auf mobilen Geräten vor allem beim La- den von großen Dateien. Insbesondere tritt der Fehler bei komprimierten Bildern (z.B. JPEG) auf, da diese im Speicher entpackt werden. Ein weiteres Problem stellt die Fragmentierung des Speichers dar. Objekte werden erstellt, genutzt und danach verworfen. Dadurch wird der zusammenhängende freie Speicherbereich immer klei- ner. Die Fragmentierung kann durch Wiederverwendung von Objekten reduziert wer- den. Daher sollte der Großteil der Funktionalität in der MIDlet-Klasse implementiert werden, da diese über die gesamte Laufzeit im Speicher verbleibt. Dies reduziert den Aufwand der Garbage Collection und spart Energie. [Sun00a]
10 Analyse der Klassen zur Laufzeit 11 verwaltet hierarchische Threads oder Threadgruppen in Java SE Symbian 15
2.2.5 Grafische Benutzungsoberfläche Für die grafische Ausgabe und die Verarbeitung von Eingaben ist das Lowest Com- mon Denominator User Interface (LCDUI) verantwortlich. Anwendungen müssen auf verschiedenen Geräten, mit unterschiedlichen Eingabemöglichkeiten und Bild- schirmformaten lauffähig sein. Daher beinhaltet die Bibliothek den kleinsten gemein- samen Nenner der Fähigkeiten, die aus den minimalen Anforderungen des MID-Pro- fils hervorgehen. Die Auflösung des MIDP 1.0 und MIDP 2.0 muss minimal 96x54 Pixel bei 1-Bit Farbtiefe sein. Das LCDUI bietet Informationen über die Eigenschaf- ten des Gerätes an. Bereits beim Entwurf der Schnittstelle wurde berücksichtigt, dass Anwendungen von jedem Nutzer bedient werden können. Die Fähigkeiten der Gra- fikbibliothek kann durch Funktionen des Herstellers erweitert werden. Die Portabili- tät der Anwendung wird gewährleistet, wenn der plattformunabhängige Teil der API verwendet wird. Abbildung 4 zeigt die Aufteilung der grafischen Programmier- schnittstelle in die High-Level-API und Low-Level-API.
Abbildung 4: MIDP LCDUI Klassen [Krol02] Das Hauptelement der Benutzungsoberfläche ist die Klasse Display. Sie ist das Soft- wareabbild des physischen Bildschirms. Deshalb gibt es nur eine Instanz innerhalb eines MIDlets. Diese wird über die statische Methode getDisplay, unter Angabe des MIDlet abgerufen. Die Klasse bietet Methoden zum Abrufen und Setzen der Bild- schirmeigenschaften, des aktuell angezeigten Dialoges, sowie das Aufrufen der Vi- brationsfunktion. Die Klassen der Benutzungsschnittstelle befinden sich im Paket ja- vax.microedition.lcdui. Dialoge werden durch die abstrakte Klasse Displayable repräsentiert. In einem MID- let wird jeweils nur ein Displayable-Objekt dargestellt. Dieses wird auf dem Bild- schirm angezeigt, kann aber durch ein anderes MIDlet überlagert werden. Die Basis- klasse enthält die Methoden zum Setzen des Titels und des Laufbandes (Ticker), zur Veränderung der Größe, zum Abfragen der Sichtbarkeit und zum Hinzufügen oder Entfernen von Kommandos. Die High-Level-API ermöglicht die Portabilität von Anwendungen auf verschiedene 16 Symbian
Endgeräte. Sie wird durch die im Gerät implementierten abstrakten User Interface Widgets bereitgestellt. Das Erscheinungsbild und das Verhalten der Bedienelemente soll an die bekannten Komponenten des Endgerätes angepasst sein, um dem Benut- zer die Bedienung zu erleichtern. Dies bedeutet im Umkehrschluss, das ein MIDlet keine visuellen Veränderungen der Bedienelemente vornehmen kann, da diese im Er- messen der LCDUI Implementierung liegen. Die High-Level-API ist verantwortlich für das Zeichnen und Aktualisieren der Komponenten und unterstützt einfache Inter- aktionen, wie beispielsweise das Blättern über den physischen Bildschirm hinaus. Von den Eingabegeräten empfangene Kommandos werden an die Anwendung über die Schnittstelle CommandListener weitergeben. Die Unterklassen List, TextBox und Alert stellen bereits fertige Dialoge mit festgelegter Struktur und vorgefertigten Funktionen bereit. Zu diesen können keine weiteren Strukturelemente hinzugefügt werden. In die Unterklasse Form können Elemente der Basisklasse Item hinzugefügt werden. Die Darstellung der vorgefertigten Standardelemente Ein- und Ausgabefel- der, Auswahlfelder oder Bilder wird über Eigenschaften festgelegt. Mit geringen Pro- grammieraufwand können damit beliebige Dialoge erstellt werden. Eigene Elemente können durch Ableitung der CustomItem erstellt und hinzugefügt werden. Die Klasse Canvas der Low-Level-API bietet direkten Zugriff auf den Bildschirm und die Eingabegeräte. Sie bietet durch die Graphics-Klasse direkten Zugriff auf den angezeigten Inhalt auf Pixelebene. Der Ereignismechanismus verarbeitet die Eingabe über Tastatur oder Touchscreen und ruft die implementierten Methoden des Com- mandListener auf. Die API erlaubt es zudem auf hardwarespezifische Funktionen zu- zugreifen, z.B. zusätzliche Tasten (Game-Key, 5-Wege-Navigation). Das MID-Profil Version 2.0 definiert zusätzlich die Erweiterung Game API. Sie ent- hält Klassen zur Erstellung von Spielen auf mobilen Geräten. Sie bietet DoubleBuf- fering12, Animationen, Kollisionserkennung und weitere Funktionen. Diese und ande- re Erweiterungen nutzen die Low-Level-API um Zugriff auf den Bildschirm zu er- halten. [Hopk07]
2.2.6 Persistente Datenspeicherung Das Record Management System (RMS) bietet für das MID-Profil, welches einen permanenten Speicher voraussetzt, eine unabhängige Programmierschnittstelle für den lesenden und schreibenden Zugriff auf persistente Daten. Die Klasse RecordStore stellt eine einfache satzorientierte Datenbank dar. Sie wird über die statische Methode openRecordStore geöffnet oder erzeugt. Der Name des RecordStore muss innerhalb einer MIDlet Suite eindeutig sein. Alle MIDlets einer Suite können diese Datenbank nutzen. Der RecordStore besteht aus den Records, ei- ner Menge ungetypter Datensätze variabler Länge. Der Zugriff erfolgt durch einen automatisch vergebenen eindeutigen Identifikator, der die Funktion des Primär- schlüssels übernimmt. Das RMS bietet sequenziellen Zugriff auf die Datensätze. Diese können über die Schnittstellen RecordFilter gefiltert und RecordComparator sortiert werden. Die Version, der Zeitpunkt des letzten Zugriffs, sowie der verwende- te und zur Verfügung stehende Speicher kann abgerufen werden.
12 Technik zur beschleunigten Darstellung Symbian 17
Abbildung 5: RMS Struktur [Ghos02] Die Datensätze können aus strukturierten Byte-Sequenzen bestehen. Über die Klas- sen DataInputStream und DataOutputStream können diese in das und aus dem Byte- Array überführt werden. Das RMS garantiert das die Aufrufe unteilbare Operationen sind. Die Reihenfolge kann nicht gewährleistet werden, da mehrere Threads auf die Datenbank zugreifen können. Die Größe der Datenbank ist abhängig vom verfügbaren Speicherplatz im Gerät.
2.2.7 Multimediaunterstützung Für das Abspielen von multimedialen Inhalten existieren für die Java Micro Edition zwei Programmierschnittstellen. Die Media API ist in der Spezifikation des MID- Profil definiert. Sie ist eine direkte Teilmenge der in [JSR135] spezifizierten Mobile Media API (MMAPI). Diese ist ein optionales Paket und geht aus dem umfangrei- chen Java Media Framework13 hervor. Die Media API enthält keine vollständige Medienunterstützung. Sie ist speziell für Java ME-Geräte mit beschränkten Ressourcen vorgesehen und unterstützt zumindest minimale Multimediafähigkeiten. Sie unterstützt die Erzeugung und die Wiedergabe von Tönen. Die Mobile Media API erlaubt das Abspielen aus verschiedenen Medienquellen und zusätzlich die Aufnahme von Tonsignalen und von Bildern über die Kamera des Ge- rätes. Die Version der MMAPI, die unterstützten Aufzeichnungsquellen und Daten- formate werden über die Methoden getSupportedProtocols und getSupportedCon- tentTypes des Manager abgerufen und sind von der Implementierung des Geräteher- stellers abhängig.
13 http://java.sun.com/javase/technologies/desktop/media/jmf/ 18 Symbian
Abbildung 6: Mobile Media API Architektur [Mahm03] Beide Programmierschnittstellen folgen der gleichen Architektur und enthalten die drei Hauptkomponenten Manager, Player und Control. Der Manager ist die Haupt- komponente und stellt den erforderlichen Player für den Medientyp bereit. Der Typ wird über den Content Type14 in der MIME-Syntax identifiziert. Darüber hinaus ent- hält der Manager eine Methode um einfache Töne zu erzeugen und wiederzugeben, für die kein eigener Player benötigt wird. Der Player kann aus einem Datenstrom oder einer Datenquelle erzeugt werden. Der MediaLocator wird in URI-Syntax spe- zifiziert. Die Verbindung wird unter Einsatz des Generic Connection Framework, auf das im nächsten Kapitel eingegangen wird, erstellt. Der Player enthält Methoden zur Steuerung des Lebenszyklus, der aus fünf Zuständen besteht. Die Zustände bieten die Kontrolle über die zeitaufwendigen Operationen, wie das Aufbauen der Verbindung und das Übertragen der Daten vom Server. Der Programmierer kann den Zustands- übergang über Methoden beeinflussen um ein unterbrechungsfreies Abspielen sicher- zustellen. Der aktuelle Status kann direkt abgerufen oder über einen vorher registrier- ten EventListener mitgeteilt werden. Neben Informationen über das Medium bietet der Player vom Medium abhängige Controls, mit denen die Verarbeitung der Daten im Player gesteuert wird. Der Zugriff erfolgt über die Methoden des Interfaces Con- trollable. Beispielsweise enthält ein allgemeiner Audioplayer ein VolumeControl zum Steuern der Lautstärke. Ein MIDI-Player bietet zusätzlich die TempoControl, zum Ändern der Wiedergabegeschwindigkeit, und PitchControl, zum Ändern der Tonhö- he, an. Die unterstützten Controls werden über die Methode getControls abgerufen. [Mahm03]
2.2.8 Kommunikationsschnittstellen Die Java ME nutzt das Generic Connection Framework (GCF), da die Klassen der Java SE für den mobilen Einsatz ungeeignet sind. Die Gründe liegen in der Größe des Byte-Codes der Klassen, dem inkonsistente Umgang mit unterschiedlichen Proto- kollen und der geringen Flexibilität beim Austausch von Protokollimplementierun- gen. Die Klassen des GCF befinden sich im Paket javax.microedition.io. Das GCF ist ein erweiterbares, generisches Framework für Endgeräte mit beschränk- ten Ressourcen. Es ist mobil einsetzbar und ermöglicht die Kommunikation über
14 klassifiziert die Daten Symbian 19
Netzwerkprotokolle. Abbildung 7 zeigt einen Überblick über die Hierarchie des GCF. Verbindungen werden über die Klassen Connector, unter Angabe einer URL, erstellt. Die Schnittstelle Connection stellt den Basistyp für alle Verbindungen dar. In jeder Hierarchieebene wird die Funktionalität der Schnittstellen erweitert. Das GCF bietet paket- und datenstrombasierte Verbindungen über die Schnittstellen Datagram- Connection, InputConnection und OutputConnection an. Die StreamConnection ist repräsentiert die Verbindung für eine bidirektionale Kommunikation. Der Zugriff auf inhaltsbasierte Informationen, z.B. Länge, Typ und Kodierung wird über die Schnitt- stelle ContentConnection bereitgestellt. Die StreamConnectionNotifier-Schnittstelle kann eine Anwendung über das Eintreffen eines asynchronen Datenstromes informie- ren. Das GCF bietet eine einheitliche Programmierschnittstelle für verschiedene Pro- tokolle.
Abbildung 7: Generic Connection Framework [Orti03] Ausgangspunkt jeder Kommunikation ist die Schnittstelle Connection. Sie repräsen- tiert die Verbindung, unabhängig vom Übertragungsprotokoll. Sie stellt die Funktio- nalität bereit, die auf alle Verbindungstypen angewendet werden kann. Für die wich- tigsten Protokolle wird eine abgeleitete Schnittstelle bereitgestellt, die den Zugriff auf die spezifischen Eigenschaften ermöglicht. Die Verbindung wird über die stati- sche open-Methode der Klasse Connector angelegt. Die Daten werden gesendet, wenn die Größe des Sendepuffers erreicht ist oder die Verbindung geschlossen wird. Der erste Parameter enthält das Protokoll, die Netzwerkadresse und optionale Para- meter als Schlüssel-Wert-Paare definiert. Der Aufbau folgt der Struktur scheme:tar- get[;parameters]. Weitere Parameter legen die Art der Kommunikation und die Be- handlung von Zeitüberschreitungen fest. Die empfangenen Daten werden über einen InputStream bereitgestellt. Im MIDP 2.0 ist das HTTP und das Hypertext Transfer Protocol Secure (HTTPS) der Anwendungsschicht des OSI-Referenzmodells15 unmittelbar enthalten. Weiterhin
15 ISO/IEC 7498-l 20 Symbian werden die Verbindungen Socket, Server-Socket, Secure-Socket-Layer (SSL), UDP- Datagramm, und Seriell unterstützt. Die Implementierung dieser Verbindungstypen ist optional und muss von der Implementierung des Herstellers nicht unterstützt wer- den. Optionale Pakete ermöglichen den Zugriff auf weitere Verbindungstypen, bei- spielsweise Bluetooth [JSR082]. [Mahm03a]
2.2.9 Sicherheitsmechanismen Die Java Plattform ist für sicherheitskritische Umgebungen ausgelegt. Der Einsatz des Sicherheitsmodells der Java Standard Edition ist aufgrund der beschränkten Res- sourcen nicht möglich. Daher wurde es für die CLDC vereinfacht und besteht aus drei Ebenen. Die Low-Level Sicherheit der Laufzeitumgebung sichert, dass die aus- geführte Anwendung den Regeln der Programmiersprache Java entspricht und ver- hindert das falsche oder schadhafte Klassendateien das System beeinflussen. Der Class-File-Verifier prüft den Anwendungscode auf fehlerhafte Anweisungen und Re- ferenzen auf ungültige Speicherbereiche. Fehlerhafte Dateien werden zurückgewie- sen. Die rechenintensive Überprüfung ist, wie in Abbildung 8 dargestellt, zweigeteilt. Die Präverifikation wird während der Erstellung des Archivs in der Entwicklungsum- gebung durchgeführt und übernimmt den Großteil der Überprüfung. Die Laufzeitum- gebung des Endgeräts prüft nur die vorhandene Struktur und die Gültigkeit der kom- pilierten Klassen.
Abbildung 8: 2-Phasen Byte-Code-Verifikation in CLDC [Schm06] Weitere Sicherheitsmechanismen befinden sich auf Anwendungsebene. Die Anwen- dungen werden in einer abgeschlossenen Umgebung, der Java Sandbox, ausgeführt und können nur vorher definierte Bibliotheken nutzen. Dadurch wird die Beeinträch- tigung des Systems und der Ressourcen durch schadhafte Programme verhindert. Die Implementierung der CLDC unterbindet das Überschreiben von Klassen der System- pakete. Das Trusted Application Model des MID-Profils ergänzt den Schutz auf der dritten Ebene. Die Spezifikation definiert ein erweiterbares System von Berechtigun- Symbian 21 gen. Damit ein MIDlet mit einem Webserver kommunizieren kann, muss es über die Berechtigung eine Netzwerkverbindung aufzubauen verfügen. Diese werden vom Hersteller oder vom Anwendungsentwickler über sogenannte Protection Domains festgelegt. Diese enthält eine Liste mit Operationen. Der Modus legt fest, ob die Operation verweigert, erlaubt oder der Benutzer gefragt wird. Die Java Micro Edi- tion enthält vier vorgefertigte Domänen: • Minimal – keine Berechtigungen • Untrusted – Nachfrage beim Nutzer • Trusted – äquivalent zu Maximum • Maximum – alle Berechtigungen
Die MIDlet Suite kann zusätzlich eine digitale Signatur und ein Zertifikat enthalten. Über diese wird die Authentizität und Integrität des Java Archiv geprüft. [Knud03], [Kull04]
2.2.10 Native Programmierung Die Java Micro Edition unterstützt aus Sicherheitsgründen keinen Zugriff auf native Programme oder Hardwarefunktionen. Die Implementierung des Java Native Inter- face ist zu umfangreich für CLDC Zielsysteme. Der Zugriff auf herstellerspezifische Funktionen ist durch optionale Pakete möglich. Funktionen des Basissystems können vom Hersteller in die virtuelle Maschine implementiert werden. [Maso08]
2.2.11 Entwicklungsumgebung Für die Entwicklung existiert neben den herstellerspezifischen Software Develop- ment Kits das Sun JavaTM Wireless Toolkit for CLDC16. Es ist ein modernes Werkzeug für die Entwicklung von Anwendungen für Mobiltelefone der CLDC und des MIDP. Teil des SDK sind die Java ME Standardbibliotheken, die Implementierung optiona- ler Pakete, die Dokumentation der Programmierschnittstellen, Programme für die Er- stellung der MIDlet Suite in einem Java Archiv, ein umfangreicher Emulator für un- terschiedliche Gerätetypen und Beispielanwendungen. Mitgelieferte Werkzeuge stel- len zusätzliche Informationen über den aktuellen Status des Emulators, beispielswei- se die Kommunikation über das Netzwerk oder der momentane Speicherverbrauch, dar. Die herstellerspezifischen SDK enthalten die Bibliotheken für den Zugriff auf die Funktionen des Endgeräts. Das SDK kann durch zusätzliche Module in bekannte Entwicklungsumgebungen, wie Eclipse17 und NetBeans18, integriert werden. Diese bieten die bekannten Funktio- nen wie Quellcodevervollständigung, intelligente Hinweise für die Fehlerkorrektur und Syntaxhervorhebung.
16 http://java.sun.com/products/sjwtoolkit/ 17 http://www.eclipse.org/ 18 http://www.netbeans.org/ 22 Symbian
Abbildung 9: NetBeans IDE mit Mobility Pack Besondere Funktionen bietet das Mobility Pack19 der NetBeans Entwicklungsumge- bung an. Teil des Moduls ist der Visual Mobile Designer und der Mobile Game Builder, zur einfachen Erstellung der grafischen Oberfläche, die Unterstützung für mehrere Zielplattformen, die automatische Erstellung von Proxyklassen für den Zu- griff auf Webservices und weitere Werkzeuge zum Erstellen und Testen der Anwen- dungen.
2.2.12 Besonderheiten der Plattform Die Java ME Plattform ist die am weitesten verbreitete Plattform und wird auf vielen Geräten eingesetzt. Sie wird als zusätzliches Modul in viele Betriebssysteme inte- griert. Programme werden in der objektorientierten Programmiersprache Java ge- schrieben und der kompilierte Byte-Code durch eine optimierte Laufzeitumgebung ausgeführt. Die Plattform bietet eine Programmierschnittstellen die durch optionale Pakete erweitert werden kann.
19 http://www.netbeans.org/features/javame/index.html Windows Mobile 23
2.3 Windows Mobile Windows Mobile ist ein Betriebssystem für mobile Endgeräte und gehört zur Embed- ded Produktreihe von Microsoft. Es basiert auf dem Windows CE Betriebssystemkern und erweitert die Funktionalität um gerätespezifische Eigenschaften für Mobiltelefo- ne und Digitale Assistenten. Der Windows CE Kernel ist für den Einsatz auf Geräten mit beschränkten Ressourcen optimiert. Er ist für die Verwaltung der Prozesse, des Speichers und der Energie zuständig und enthält die wichtigsten Gerätetreiber. Der Kernel steht für unterschiedliche Prozessorarchitekturen zur Verfügung und wird in mobilen Geräten und eingebetteten Systemen verwendet. Windows Mobile wird auf telefoniezentrierten Smartphones und datenzentrierten Pocket PC's verwendet. Für die unterschiedlichen Gerätearten existieren drei Versio- nen von Windows Mobile. Die Windows Mobile Classic Version enthält typische An- wendungen für Taschencomputer mit Stiftbedienung, wie z.B. Terminplaner, Adress- verwaltung und Synchronisationssoftware. Die zweite Version ist Windows Mobile Standard und für Smartphones mit mobiltelefontypischer Tastatur und kleinem Bild- schirm optimiert. Die Windows Mobile Professional Version erweitert die Classic Version um Telefonfunktionen und wird auf Smartphones mit Touchscreen einge- setzt. Das Design der Windows Mobile Oberfläche ist stark an die PC-Version von Win- dows angelehnt. Über das Hauptelement (Start) können die installierten Programme gestartet werden. Bekannte Programme, wie der Internet Explorer, der Windows Me- dia Player und Büroprogramme wurden auf die mobile Plattform übertragen. Das Windows Mobile SDK ermöglicht nur die Entwicklung von nativen Anwendun- gen. Daneben wird das .NET Compact Framework unterstützt.
2.3.1 .NET Compact Framework Das .NET Compact Framework ist ein direkter Ableger des Desktop- und Server-Fra- meworks. Es ermöglicht die einfache und effiziente Erstellung robuster Anwendun- gen mit dem Ziel, diese zu jeder Zeit, an jedem Ort und auf jedem Gerät zur Verfü- gung zu stellen. Das .NET Compact Framework wurde für Geräte mit beschränken Ressourcen entwickelt. Um es auf mobilen und eingebetteten Systemen mit wenig Arbeitsspeicher und geringer Prozessorleistung einsetzen zu können, wurde sehr viel Wert auf hohe Leistung und geringe Größe gelegt. Das Framework wurde dafür von Grund auf neu erstellt. Dennoch bietet es die Funktionen des Standard .NET Frame- work. Die direkte Verwandtschaft zum Standard .NET Framework steigert die Pro- duktivität, da bereits erlernte Fähigkeiten aus der Desktop- und Server-Entwicklung genutzt werden können. Von außen betrachtet erscheint es als direkte Portierung des .NET Framework. Die Gemeinsamkeiten der beiden Produkte sind auf den höheren Ebenen beabsichtigt. Sie verwenden das gleiche Programmiermodell und Dateifor- mat. Beide basieren auf dem ECMA20 Common Language Infrastructure (CLI) Stan- dard21, einer Spezifikation für sprach- und plattformunabhängige Anwendungsent- wicklung. Dieser definiert die Architektur und die Komponenten eines Systems, auf dem der standardisierte Zwischencode, der Common Intermediate Language22 (CIL), 20 European Computer Manufacturers Association internationale Normierungsorganisation 21 ECMA-335 22 früher Microsoft Intermediate Language 24 Windows Mobile ausgeführt werden kann. Der Common Type System (CTS) Standard definiert wie Da- tentypen im Speicher abgebildet werden. Es ist Teil der CLI Spezifikation und er- laubt die Entwicklung mehrsprachiger Anwendungen. Das Virtual Execution System (VES) des Standards bietet die Ausführungsumgebung für verwalteten Code. Es ist für die Übersetzung des CIL-Codes in Maschinencode verantwortlich und führt die Anwendung auf der Plattform aus. Dadurch wird die Ausführung von Anwendungen auf verschieden Betriebssystemen und unterschiedlichen Prozessorarchitekturen er- möglicht. Der Zwischencode wird vom Compiler des .NET Compact Framework er- stellt und ist mit dem des Standard .NET Framework binär kompatibel. Durch die Kompilierung in CIL-Code ist der Quellcode von der Entwicklungssprache unabhän- gig. Das .NET Compact Framework unterstützt derzeit die Programmiersprachen C# und Visual Basic .NET. Weitere Programmiersprachen können durch Bereitstellung eines Compilers, der CIL-Code erzeugt, hinzugefügt werden. Aufgrund der unter- schiedlichen Bedingungen unterscheidet sich die Laufzeitumgebungskomponente der beiden Frameworks. Sie ist an die speziellen Anforderungen des mobilen Gerätes an- gepasst. Das .NET Compact Framework besteht aus der Common Language Runtime (CLR) und einer Klassenbibliotheken. Die Klassenbibliothek des Framework wird in Com- mon Intermediate Language ausgeliefert. Eine vorkompilierte Bibliothek benötigt den vierfachen Speicherplatz und ist nur auf einer Prozessorarchitektur lauffähig. Der CIL-Code wird zur Laufzeit in Maschinencode umgewandelt. Die Verwendung von verwaltetem Code und die Unterstützung für neue Technologien erlaubt die Entwick- lung von neuartigen Anwendungen auf verschiedenen mobilen Endgeräten. [Will04]
2.3.2 Architektur Die Architektur des Framework folgt dem gleichen Aufbau wie das Standard .NET Framework. Sie wird in die, in Abbildung 10 dargestellten, Bereiche für Maschinen- code (Native Code) und verwalteten Code (Managed Code) aufgeteilt.
Abbildung 10: .NET Compact Framework Architektur [Wigl03] Der native Teil besteht aus dem Platform Adaption Layer (PAL), der Ausführungs- umgebung und dem Basisbetriebssystem. Im Gegensatz zum Desktop-Framework, kann das .NET Compact Framework auf ei- ner Vielzahl unterschiedlicher Betriebssysteme ausgeführt werden. Dies wird durch Windows Mobile 25 die Abstraktionsschicht zwischen Betriebssystems und Laufzeitumgebung gewähr- leistet. Der PAL setzt die Programmierschnittstellen des Betriebssystems auf die An- forderungen des .NET Compact Framework um und erlaubt die Ausführung der Laufzeitumgebung und der Klassenbibliothek auf verschiedenen Hardware- und Softwareplattformen, da sie die Unterschiede des darunter liegenden Betriebssystems versteckt. Über dem PAL befindet sich die Hauptkomponente des .NET Compact Frameworks, die Laufzeitumgebung (Execution Engine). Sie ist für die Ausführung der Anwen- dungen verantwortlich. Eine der Hauptaufgaben ist die Verwaltung des Speichers. Der integrierte Just-In-Time23 (JIT) Compiler übersetzt den CIL-Code in ausführba- ren Maschinencode. Für jeden unterstützen Prozessortyp wird eine Implementierung der Laufzeitumgebung zur Verfügung gestellt. Der verwaltete Teil der Architektur besteht aus der Klassenbibliothek des .NET Com- pact Framework, gerätespezifischen Bibliotheken und den Anwendungen. Die Klassenbibliothek besteht aus hierarchischen Namensräumen, in denen die Klas- sen und Typen enthalten sind. Die CLI-konforme Bibliothek ist auf mehrere Dateien aufgeteilt. Diese werden durch Referenzen an die Anwendung gebunden. Dadurch wird der Speicherverbrauch reduziert, da nur die benötigten Dateien Teil der Anwen- dung sind. Eine Datei kann mehrere Namensräume enthalten und ein Namensraum kann auf mehrere Dateien verteilt sein. Bei der Erstellung der Anwendungen sucht der Compiler in den referenzierten Bibliotheken nach den verwendeten Klassen und Schnittstellen. Die Basisklassen sind im Namensraum System enthalten und bilden das Fundament jeder Anwendung. Sie bieten unter anderen Datei-I/O, Aufzählungen, primitive Datentypen und Netzwerkunterstützung. Zur Einhaltung der ECMA Spezi- fikation sind die Funktionen für die Verarbeitung von XML-Daten und Webservice- unterstützung in zusätzlichen Bibliotheken enthalten. Der interoperable Mechanis- mus des Frameworks leitet Aufrufe zwischen der CLR und dem Betriebssystem wei- ter und bietet Zugriff auf native Softwarekomponenten. Auf der Klassenbibliothek bauen die Anwendungen des .NET Compact Framework auf. Sie können durch eigene oder vom Hersteller bereitgestellte Bibliotheken erwei- tert werden. [Yang07]
2.3.3 Laufzeitumgebung Die Laufzeitumgebung des .NET Compact Framework ist die Common Language Runtime. Sie ist für die Verwaltung und Ausführung der .NET Anwendungen zustän- dig und für Geräte mit eingeschränkten Ressourcen optimiert. Sie nutzt die Funktio- nalität der Anpassungsschicht um auf die Betriebssystemdienste zuzugreifen. Dieser Unterschied zur Desktop-Variante bietet eine höhere Flexibilität. Durch den Aus- tausch der Schicht kann ein anderes Betriebssystem unterstützt werden. Anwendun- gen werden, im Gegensatz zu anderen Plattformen, im Prozess der CLR ausgeführt. Dieser wird vom Application Domain Host des Betriebssystems bereitgestellt. Die Anwendung wird in dem Prozess in einer eigenen Anwendungsdomäne gestartet und voneinander isoliert. Die CLR verwaltet die Anwendungsdomänen und stellt sicher, dass die Ressourcen nach Beendigung der Anwendung freigeben werden. Eine der wichtigsten Aufgaben der Laufzeitumgebung ist die Übersetzung des ver-
23 Kompilierung während der Laufzeit 26 Windows Mobile waltetem Code. Diese findet in drei Schritten während der Laufzeit statt. Im ersten Schritt wird der CIL-Code geladen. Anschließend übersetzt der optimierte JIT-Com- piler diesen in Maschinencode. Im dritten Schritt werden referenzierte Bibliotheken geladen und der benötigte Teil übersetzt. Nachdem der ClassLoader die Assembly- Information geladen hat, wird der TypeChecker gestartet. Dieser führt vor der Über- setzung des CIL-Code eine Typprüfung durch. Die verwendeten Datentypen in Me- thoden und von Variablen werden auf Typverletzungen geprüft. Dadurch werden nicht initialisierte Variablen und Aufrufe von Methoden mit falschen Parametern ver- hindert. Anschließend wird die Kompilierung des CIL-Codes auf Methoden- und Ty- penebene durchgeführt. Es wird nur der benötigte Code übersetzt und für den späte- ren Aufruf im Anwendungsspeicher gesichert. Bereits kompilierter Code steht somit für die sofortige Ausführung zur Verfügung. Im Gegensatz zu interpreterbasierten Systemen wird die Ausführungsgeschwindigkeit durch den nativen Code gesteigert. Für das .NET Compact Framework existieren zwei unterschiedliche JIT-Compiler. Der IJIT-Compiler ist schnell und erzeugt nativen Code für die vom Framework un- terstützen Prozessortypen. Er ist, im Vergleich zum SJIT-Compiler, nicht optimal. Der SJIT ist der meist genutzte Compiler für die Pocket PC Plattform und speziell für ARM-Prozessoren optimiert. Die Kompilierung benötigt mehr Zeit, erzeugt aber nativen Code, der vom Prozessor schneller ausführt werden kann. Die zusätzlich be- nötigte Zeit wird durch die Wiederverwendung von zwischengespeicherten Maschi- nencode und der beschleunigten Ausführung unerheblich. Optimierungen des Quell- codes durch den Compiler verhindern eine exzessive Nutzung der JIT-Kompilierung. Durch das Method Inlining werden beispielsweise aufgerufene Methoden mit der an- deren Methoden zusammengefasst. Beide Compiler übersetzen nur den benötigten Code. Die Laufzeitumgebung versucht diesen, während der gesamten Laufzeit der Anwendungen im Speicher zu halten, da die Wiederverwendung von kompilierten Codes die Anzahl der Übersetzungsvorgänge reduziert. Wird mehr Speicher benötigt als zur Verfügung steht, entfernt die CLR einzelne kompilierte Methoden aus dem Speicher. Das Kriterium für die Auswahl ist die Aufrufhäufigkeit. Die am wenigsten genutzte Methode wird ausgewählt und entfernt. In Extremsituationen, bei komple- xen Anwendung die viel Speicher benötigen oder viele Anwendungen parallel ausge- führten werden, wird der gerade übersetzte Maschinencode sofort wieder aus dem Speicher entfernt. [Rubi03], [Wigl07], [Salm05], [Will04]
2.3.4 Speicherverwaltung Eine der Stärken des .NET Compact Framework liegt in der effizienten Nutzung der Ressourcen. Es übernimmt die Aufgaben der Speicherverwaltung und setzt keine Memory Management Unit, virtuellen Speicher oder Speicherschutzfunktionen vor- aus. Der verfügbare Speicher besteht aus Read Only Memory und Random Access Memory (RAM). Im ROM befindet sich das Betriebssystem und die Dateien des .NET Compact Framework. Die Integration des Frameworks in den ROM spart wert- vollen Speicherplatz im RAM ein, da dieser gleichzeitig als Daten- und Arbeitsspei- cher genutzt wird. Zum einem enthält er die Datenstrukturen und den kompilierte CIL-Code der ausgeführten Anwendungen und zum anderen die Anwendungsdateien. Der Speicher wird bis zu einer, vom Gerät vorgegebenen, Obergrenze belegt. Nicht mehr referenzierte Objekte oder bereits übersetzter Maschinencode werden beim Er- reichen der Grenze entfernt. Dadurch können umfangreiche Programme mit minima- Windows Mobile 27 len Leistungseinbußen auch auf Systemen mit geringem Speicher ausgeführt werden. Wird mehr Speicher benötigt als zur Verfügung steht, wird eine Ausnahme ausgelöst oder die Anwendung beendet und die verwendeten Ressourcen freigegeben. Dadurch wird ein stabiles System gewährleistet. Eine .NET Anwendung wird in einer eigenen Anwendungsdomäne gestartet. Der Do- mänenhost wird vom Windows CE Betriebssystem bereitgestellt und benötigt keinen zusätzlichen Speicherplatz. Die CLR legt für die Verwaltung der Anwendung eine kleine Menge statischer Daten im Speicher an. Der ClassLoader der Laufzeitumge- bung kann einzelne Blöcke einer Datei lesen. Dadurch kann er Teile des zu überset- zenden CIL-Codes laden ohne eine vollständige Kopie der Bibliothek im Speicher anzulegen. Die Bereinigung des Speichers führt der Garbage Collector aus. Er verwendet den Mark-and-Sweep Algorithmus. In periodischen Abständen werden die Objekte mar- kiert, die sich nicht mehr im Gültigkeitsbereich befinden. Bei Überschreitung der de- finierten Grenze des Speichernutzungsverhältnisses werden die markierten Objekte entfernt. Anschließend wird der Speicher defragmentiert. Die Objekte im Speicher werden neu angeordnet und dadurch größere zusammenhängende Bereiche geschaf- fen. Da die Laufzeitumgebung die Position der noch verwendeten Objekte kennt, stellt die Bewegung im Speicher kein Problem dar. Die Garbage Collection wird ent- weder in einer oder in allen Anwendungsdomänen gleichzeitig durchgeführt. Wäh- rend der Bereinigung wird die Ausführung der Anwendung angehalten. Nachdem alle nicht mehr verwendeten Objekte entfernt wurden, wird diese fortgesetzt. Zusätzlich kann der Garbage Collector den kompilieren Maschinencode entfernen. Wenn der verfügbare Speicher knapp wird, versucht das Betriebssystem Hintergrun- danwendungen zu beenden. Die .NET Anwendung wird über das Deactivate-Ereignis benachrichtigt und kann ihre Anwendungsdaten sichern. [Salm05]
2.3.5 Grafische Benutzungsoberfläche Für die grafische Oberfläche wurde ein Großteil der Steuerelement aus dem Desktop- Framework übernommen. Diese sind in ihren Eigenschaften und Funktionen einge- schränkt. Anwendungen werden immer als Vollbild dargestellt. Diese erhält ein Menü, welches am unteren Bildschirmrand angezeigt wird. Eine Konsole ist im .NET Compact Framework nicht enthalten. Bei der Entwicklung der Grafikbibliothek wurde auf zwei Ziele Wert gelegt. Zum ei- nem soll sie die Erstellung von grafischen Oberflächen aus den High-Level-Steuer- elementen und zum anderen das grafisches Zeichnen und Bitmapoperationen für 2D- Objekte unterstützen. Die Klassen befinden sind in zwei verschiedenen Namensräu- men. Die Grafikbibliothek nutzt die Fähigkeiten des darunter liegenden Windows CE Betriebssystem. Zum Bereich der High-Level-Elemente wird der Namensraum Mi- crosoft.WindowsCE.Forms gezählt werden. Dieser wird durch Referenzieren der Windows CE Bibliothek bereitgestellt und enthält Klassen um spezielle Funktionen des Betriebssystems nutzen zu können. Diese bieten beispielsweise Zugriff auf die Hardwaretasten und Eingabegeräte des Geräts oder spezielle Eigenschaften des Sys- tems, wie die Orientierung des Bildschirms. Der Namensraum System.Windows.Forms bietet eine Teilmenge der High-Level- Steuerelemente des Standard .NET Framework. Er enthält die wichtigsten Elemente, 28 Windows Mobile z.B. Button, TextBox, Label, RadioButton, ComboBox, ListBox, TreeView, Message- Box und ein WebBrowser-Steuerelement. Die Implementierung der Steuerelemente ist auf geringen Speicherverbrauch und hohe Leistung optimiert. Daher werden nicht alle Eigenschaften und Ereignisse unterstützt. Eigene Steuerelemente können durch das Ableiten von den Basisklassen erweitert oder benutzerdefinierte Steuerelemente erstellt werden. Die Klassen der Low-Level-Programmierung befinden sich im Namensraum Sys- tem.Drawing. Auch dieser Namensraum beinhaltet eine Teilmenge der Bibliothek des Desktop-Framework. Die Klasse Graphics stellt Methoden zum Ausführen von Zei- chen-, Füll- und Transformationsoperationen bereit. Die CreateGraphics-Methode der High-Level-Elemente erzeugt das Graphics-Objekt zum Zeichnen in dem Steuer- element. Die abstrakte Image-Klasse stellt Funktionen für die Erzeugung von Bildern aus verschiedenen Quellen und einfache Operationen bereit. Über die DrawImage Methode des Graphics-Objekts wird das Bild auf den Bildschirm oder in den Ar- beitsspeicher gezeichnet. Prozessorintensive Funktionen und Eigenschaften sind im .NET Compact Frame- work nicht vorhanden. Einige Elemente stehen aufgrund der Eingabemöglichkeiten nur auf der Pocket PC Plattform zur Verfügung. [Yang07]
2.3.6 Persistente Datenspeicherung Das .NET Compact Framework bietet verschiedene Möglichkeiten an, um Daten per- sistent zu sichern. Seit Version 2.0 des Frameworks kann, über die Registry-Klasse aus dem Micro- soft.Win32 Namensraum, auf die Registrierungsdatenbank des Windows Betriebssys- tem zugegriffen werden. Anwendungen können in dieser Einstellungen ablegen. Die- se stehen beim nächsten Start der Anwendung zur Verfügung. Der Aufbau der Daten- bank ist an den der anderen Windows Versionen angelehnt. Über statische Methoden können Schlüssel-Wert-Paare aus der Datenbank abgerufen oder abgelegt und Unter- schlüssel erzeugt oder gelöscht werden. Eine weitere Möglichkeit bietet der System.IO Namensraum. Er enthält Klassen um Dateioperationen durchzuführen. Die File-Klasse enthält Funktionen zum Lesen und Schreiben von Dateien. Informationen können über die FileInfo- und DirectoryInfo- Klassen abgerufen werden. Der Zugriff auf den Inhalt der Datei wird über spezielle Reader- und Writer-Klassen bereitgestellt. Der BinaryReader wird verwendet um pri- mitive Datentypen aus einem Datenstrom zu lesen, während der TextReader Zeichen- ketten lesen kann. Dieser wird durch die abstrakte Klasse Stream repräsentiert. Der Zugriff auf das Dateisystem kann vom Hersteller gesperrt sein und führt zu einer Si- cherheitsausnahme. [Yang07] Die umfangreichste Funktionalität bietet die Technologie ADO.NET des .NET Fra- mework. Sie bietet eine Datenbankschnittstelle und effiziente Verwaltung von Daten aus verschiedenen Quellen. Im Namensraum System.Data befinden sich die Klassen zur Verwaltung, Anzeige und Synchronisation der Daten. Der Zugriff auf die Daten kann direkt, über SQL Anweisungen, oder indirekt, über ein Datenobjekt im Ar- beitsspeicher, erfolgen. Das Hauptelement der ADO.NET Architektur ist das Data- Set. Es besteht aus Tabellen, die durch Relationen verbunden sein können, und kann ein XML-Schema enthalten. Die DataTable-Klasse bietet Zugriff auf die Spalten und Windows Mobile 29
Zeilen einer Tabelle und enthält die Einschränkungen. Im Gegensatz zu anderen Da- tenbanktechnologien ist in ADO.NET die Unterstützung für XML integriert. Das Da- taSet und die DataTable können XML-Dateien lesen und schreiben. [Pant05],
Abbildung 11: ADO.NET DataSet Struktur [Micr03] Darüber hinaus steht für die Betriebssysteme Windows Mobile und Windows CE eine optionale Komponente zur Verfügung, der Microsoft SQL Server CE. Dieser bietet die Funktionen einer relationalen Datenbank und ist für mobile Geräte konzipiert. Er arbeitet effizient und kann komplexe SQL-Anfragen auf der lokalen Datenbank aus- führen. Der Server verfügt über die Standardeigenschaften einer Datenbank und kann als DataProvider genutzt werden. Dieser ermöglicht den Zugriff auf die Daten aus unterschiedlichen Datenquellen. Die Größe der Datenbank ist auf 2GB beschränkt. Der Server besteht aus der Datenbase Engine, dem Client Agent und dem Query Analyzer. Dieser bietet eine grafische Oberfläche zum Erstellen und Strukturieren ei- ner Datenbank. Die Datenbank unterstützt die Befehle INSERT, UPDATE und DE- LETE und CREATE, DROP und ALTER. .NET Anwendungen nutzen die Schnittstelle DataProvider aus dem System.Data.Sql- ServerCE Namensraum um auf die Daten der Datenbank zuzugreifen. Über Remote Data Access (RDA) können Teile einer entfernten Datenbank lokal repliziert und von einer mobilen Anwendung genutzt werden. Veränderungen werden protokolliert und bei Verbindung zum Datenbankserver übertragen. [Fox03]
2.3.7 Multimediaunterstützung Das .NET Compact Framework bietet keine explizite Multimediaunterstützung an. Auf diese wurde wegen des zusätzlichen Speicherplatzes verzichtet. Über einen Shell-Aufruf kann der Windows Media Player zum Abspielen von Video- und Audi- odateien genutzt werden. Zusatzbibliotheken, wie das OpenNETCF Smart Device Framework24, bieten komfortablen Zugriff auf die multimedialen Eigenschaften des Gerätes. [Pant05] Dennoch kann das Waveform Audio Interface des Windows CE Betriebssystems ge- nutzt werden. Der Zugriff auf die Schnittstelle wird durch die Platform Invoke (P/In- voke) Bibliothek ermöglicht. Diese erlaubt den Aufruf von native Funktionen. Im Ar- tikel [Schw04] wird eine Beispielimplementierung zur Wiedergabe und Aufnahme von Audiodaten vorgestellt.
24 http://www.opennetcf.org/ 30 Windows Mobile
2.3.8 Kommunikationsschnittstellen Das .NET Compact Framework stellt Bibliotheken für den Zugriff auf Netzwerk- funktionen im Namensraum System.Net bereit. Dieser bietet einen Teil der Funktio- nalität des .NET Framework an, darunter Socketprogrammierung und Verbindungen über das Hypertext Transport Protokoll. Die abstrakte Klasse WebRequest ist die Basisklasse für Protokolle der Anwendungs- schicht des OSI-Referenzmodells. Die statische Methode Create erzeugt unter Anga- be eines Uniform Resource Identifier (URI) eine Instanz der Verbindung. Für die Pro- tokolle http, https und file werden spezifische Klassen bereitgestellt, die Funktionen für Zugriff auf die speziellen Eigenschaften enthalten. Über die HttpWebRequest- Klasse können beispielsweise die Werte des HTTP-Headers und die HTTP-Methode festgelegt werden. Den Aufruf der GetResponse-Methode stellt die Verbindung zum Webserver her und liefert das WebResponse-Objekt. Diese enthält Informationen über den Status und die Antwort als Datenstrom. Aus dem Datenstrom wird über spezielle StreamReader einzelne Zeichen oder die komplette Nachricht gelesen werden. Über die Socket-Klasse wird der Zugriff auf die Transportschicht des OSI-Referenzmo- dells ermöglicht. Der System.Net.Sockets Namensraum bietet Klient- und Serverim- plementierungen für die Transportprotokolle TCP und UDP an. Das .NET Compact Framework bietet darüber hinaus eine Bibliothek für die Infrarot- schnittstelle des Gerätes an. Diese arbeitet über Sockets und enthält Funktionen um andere Geräte zu suchen. Für die Bluetooth-Schnittstelle wird keine Bibliothek ange- boten. [Wigl07]
2.3.9 Sicherheitsmechanismen Grundsätzlich erlaubt die Sicherheitsrichtlinie des .NET Compact Framework die un- eingeschränkte Ausführung von Anwendungen. Gerätehersteller können eine eigene Sicherheitsrichtlinie definieren und die Ausführung von Programmen verweigern und den Zugriff auf Ressourcen einschränken. Softwarehersteller können eigene Sicher- heitsanforderungen in der Anwendung implementieren. Die Richtlinien unterschei- den sich je nach Art des Gerätetyps. Die Anwendungen werden innerhalb einer Anwendungsdomäne isoliert ausgeführt. Die CLR verwaltet mehrere Anwendungsdomänen, von denen jede eine eigene Ko- pie der Klassenbibliothek nutzt. Dies bietet den Vorteil der Fehlerisolation und ver- bessert die Stabilität des Gesamtsystems. Die Laufzeitumgebung behält die Kontrolle über die Anwendungen, verhindert den Zugriff auf fremden Speicherbereich und stellt sicher, dass die genutzten Ressourcen nach Beendigung der Anwendung freige- geben werden. Ein weiteres Sicherheitskonzept ist im Entwurf der Laufzeitumgebung zentral veran- kert. Basierend auf einem Beweis werden Zugriffsrechte durch definierte Regeln er- teilt. Die Überprüfung kann anhand einer kryptographische Signatur des Herstellers oder den sogenannten starken Namen25 einer Softwarekomponente erfolgen. Dieser setzt sich aus dem Namen, der Versionsnummer sowie einem öffentlichen Schlüssel und einer digitalen Signatur zusammen und wird aus der Assembly erstellt. Anhand dieser Informationen werden die Rechte der Anwendungen eingeschränkt. Diese be- einflussen die Ausführung der Anwendungen oder den Zugriff auf Ressourcen.
25 eng.: strong name Windows Mobile 31
Das Windows Mobile Sicherheitsmodell bestimmt ob eine Anwendungen ausgeführt wird. Der Anwendungscode wird zuerst auf eine Signatur geprüft und die Rechte der Anwendung festgelegt. Enthält die Anwendung keine Signatur wird die Sicherheits- richtlinie des Gerätes verwendet. In dieser ist festgelegt, ob Anwendungen ohne Si- gnatur ausgeführt werden. Ist die Ausführung erlaubt, wird eine weiterer Wert der Richtlinie geprüft. Über diesen wird festgelegt, ob der Benutzer seine Zustimmung geben muss. Stimmt dieser zu oder wird die Zustimmung nicht benötigt erhält die Anwendung vollständigen Zugriff auf das Gerät. [Yang07]
2.3.10 Native Programmierung Über den Platform Invoke (P/Invoke) Mechanismus können native Funktionen, die in C oder C++ geschrieben sind, aus verwalteten Code aufgerufen werden. Dies erlaubt die Verwendung vorhandener Funktionen. Beispielsweise können dadurch Funktio- nen des Betriebssystems oder native Bibliotheken des Geräteherstellers genutzt wer- den, die nicht als verwalteten Code angeboten werden. Die Funktionalität wird im Namensraum System.Runtime.InteropServices bereitgestellt. Das .NET Compact Framework unterstützt seit Version 2.0 die Interaktion mit dem Component Object Model (COM). Über dieses objektorientierte Programmiermodell können native Komponenten genutzt werden. Diese wird über eine bereitgestellte Typenbibliothek oder eine manuell definierte Schnittstelle der Anwendung zur Verfügung gestellt. [Maue09], [Wigl07]
2.3.11 Entwicklungsumgebung Microsoft stellt für die Entwicklung von Anwendungen für intelligenten Geräte ein Software Development Kit zur Verfügung. Dieses enthält Bibliotheken, Dokumentati- on und Beispielcode. Weiterer Bestandteil sind die Abbilder der unterstützten Geräte- plattformen. Diese werden vom Device Emulator ausgeführt. Auf diese Weise kön- nen die Anwendungen getestet werden. Da das SDK nur die Bibliotheken für Win- dows Mobile enthält, muss das .NET Compact Framework zusätzlich installiert wer- den.
Abbildung 12: Visual Studio IDE Die Werkzeuge des SDK integrieren sich in die Entwicklungsumgebung Visual Stu- dio. Damit bietet sie umfassende Unterstützung für die Erstellung von nativen und verwalteten Anwendungen für mobile Geräte. Sie stellt, unabhängig von der verwen- deten Programmiersprache, einen Quellcodeeditor mit Syntaxprüfung, Schlüsselwor- thervorhebung und eine Onlinehilfe bereit. Der Formulardesigner unterstützt die Er- stellung von Benutzeroberflächen und der Debugger bietet Funktionen zum Finden 32 Windows Mobile von Fehlern. Die Visual Studio Tools übernehmen das Verpacken der Anwendung und Ressourcen in ein komprimiertes CAB-Archiv. Diese vereinfacht die Bereitstellung der Anwendung auf dem Gerät.
2.3.12 Besonderheiten der Plattform Das .NET Compact Framework ist die mobile Version des .NET Framework und für Geräte mit beschränken Ressourcen konzipiert. Die Anpassungsschicht der Architek- tur erlaubt die Ausführung auf unterschiedlichen Betriebssystemen. Die optimierte Common Language Runtime überwacht die Ausführung der Anwendungen und die verwendeten Ressourcen. Der integrierte Just-In-Time-Compiler übersetzt den stan- dardisierten Byte-Code in Maschinencode. Die Klassenbibliothek ist eine Untermen- ge der .NET Framework Klassenbibliothek und enthält optimierte Funktionen. Die Eigenschaften des Betriebssystems können über nativer Funktionen genutzt werden. Für die Entwicklung von Anwendungen werden die gleichen Werkzeuge, Program- miermodell und Dokumentation genutzt. Derzeit wird das .NET Compact Frame- work nur von den Betriebssystemen Windows CE und Windows Mobile unterstützt. Android 33
2.4 Android Auf Initiative von Google wurde im Jahr 2007 die Open Handset Alliance26 gegrün- det, um offene Standards für mobile Geräte zu entwickeln. Zu den Mitgliedern zäh- len mehr als 30 namhafte Unternehmen, darunter die Gerätehersteller (Original Equipment Manufacturer) Samsung, Motorola und HTC, die Chiphersteller (Core Technology Vendor) Texas Instruments und Intel, die Netzbetreiber (Operators) T- Mobile und Telefonica und die Softwareunternehmen (Independent Software Vendor) E-Bay und Nuance. Das gemeinsames Ziel ist die Entwicklung einer mobilen Platt- form für eine neue Klasse von Mobiltelefonen, dem Handset-Standard. Diese stan- dardisierte Plattform trägt den Namen Android27 und soll durch verbesserte und neue Funktionen, intuitive Bedienung, eine hohe Individualisierung des Endgerätes und geringe Kosten der Endgeräte beim Kunden zur verstärkten mobilen Onlinenutzung führen. Die Geräte sollen die Entwicklung neuer und innovative Anwendungen er- möglichen. Android ist die erste offene und freie mobile Plattform für Smartphones. Bereits im Juli 2005 erwarb Google die bis dahin unbekannte Android-Plattform durch Übernah- me der Firma Android Inc. [Elgi05]
2.4.1 Android-Plattform Android definiert den gesamten Aufbau der Plattform, vom Betriebssystem bis zu den Anwendungen, und ist deshalb mehr als eine Ausführungsumgebung und An- wendungsframework. Die Komponenten der Plattform stehen alle unter der Open- Source Lizenz. Dies bedeutet, dass für die Verwendung des Systems keine Lizenz- kosten für den Endgerätehersteller anfallen. Aus diesem Grund wird ein Linux Kern als Betriebssystem eingesetzt und durch eine große Menge an austauschbaren Open- Source Bibliotheken vervollständigt. Vollendet wird die Plattform durch die Laufzeit- umgebung und das umfangreiche Anwendungsframework. Die Offenheit steht im Mittelpunkt der Android-Plattform. Diese Philosophie unter- scheidet sie von anderen Plattformen und erstreckt sich über alle Komponenten. Der Programmierer kann die Hardware über das Anwendungsframework ohne großen Aufwand nutzen. Bereits vorinstallierten Anwendungen können angepasst oder er- setzt werden. Beispielsweise kann die übliche Anzeige der Telefontastatur zum Wäh- len durch eine eher altertümliche Wahlscheibe ersetzt werden oder der integrierte E- Mail-Klient angepasst werden, so dass er nur über die sichere Verbindung des Fir- menservers arbeitet. Die offene Einstellung setzt sich bei den Integrationsmöglichkeiten der Hardware fort. Die Gerätehersteller haben die freie Wahl bei der Ausstattung ihrer Geräte. Ne- ben den verbreiteten Übertragungstechniken, GSM, GPRS, Bluetooth oder WLAN, wird auch Satellitentelefonie unterstützt. Die Plattform stellt keine Anforderungen an die Form und Größe des Bildschirms. Die Eingabe kann über Touchscreen, Tastatur, Wahlräder, Tasten am Gehäuse oder über Sprachsteuerung erfolgen. Über die typi- schen Merkmale, wie die integrierte Digitalkamera, Speicherkartenerweiterungen und GPS-Empfänger, hinaus ist das System offen für die Integration weiterer Hard-
26 http://www.openhandsetalliance.com/ 27 http://www.android.com/ 34 Android warekomponenten, z.B. hochqualitative Soundausgabe, DVB-H- und 3D-Grafik- chips. Die Android-Plattform stellt keine hohen Anforderungen an die Hardware. Das System benötigt ca. 40 MB Speicher und 10 MB Speicher für die Anwendungsbiblio- theken. Somit ist es bereits auf Geräten mit 64 MB Arbeitsspeicher lauffähig. Die OHA geht davon aus, dass die Kombinationsmöglichkeiten zu einer Vielfalt an Handsets führt, welche sich nicht nur von Design, sondern auch durch die Ausstat- tungsmerkmale unterscheiden. Nur eine knappe Woche nach Ankündigung der Plattform veröffentlichte Google im November 2007 das erste Software Development Kit. Seit August 2008 steht es in der Version 1.0 zur Verfügung. Zusätzlich wird Google eine Internetplattform für Andro- id-Anwendungen bereitstellen, auf der Nutzer suchen und Entwickler ihre Anwen- dungen anbieten können. Mit der Android Developer Challenge hat Google zudem einen Wettbewerb gestartet, um Anwendungen für Android-Geräte zu entwickeln. [Cond08], [Scha08]
2.4.2 Architektur Die Architektur der Android-Plattform teilt sich in die 4 Schichten.
Abbildung 13: Architektur [Goog08] Die unterste Schicht bildet das Betriebssystem von Android. Die Plattform setzt, statt kompletter Neuentwicklung, auf ein Betriebssystem aus dem Open-Source Bereich. Aufgrund der freien Verfügbarkeit des Quelltextes kommt der unter GNU General Public License (GPL) stehende Linux Kernel 2.6 zum Einsatz. Dieser bietet die Sys- temdienste Sicherheit, Speicherverwaltung, Prozessverwaltung, Netzwerkunterstüt- zung und Dateisystemzugriff. Die Lizenz gestattet die Optimierung des eingesetzten Kernels für den Einsatz auf mobilen Endgeräte. Dieser steht derzeit für die ARM-Mi- kroprozessoren zur Verfügung, die in mobilen Geräten eingesetzt werden. Weitere Android 35
Prozessorarchitekturen sind durch spezielle Anpassungen möglich. Die Veränderun- gen am Kernel müssen unter der gleichen Lizenz veröffentlicht werden und stehen jedem kostenlos zur Verfügung. Der Linux Kernel bietet neben den Kernsystemdiensten eines Betriebssystems, eine modulare Architektur für gemeinsam genutzte Bibliotheken und ein bewährtes Trei- bermodell. Er bildet damit eine einheitliche Abstraktionsschicht zwischen Hardware und Software. Neue Hardware kann über Treiber der Hersteller in das Linux Be- triebssystem integriert werden. Der Android-Kernel enthält alle hardwarenahen Trei- ber (Abbildung 13) für den Zugriff auf den Bildschirm, Kamera, Bluetooth oder WiFi, Dateisystem und USB-Geräte, sowie Dienste für die Kommunikation zwischen Prozessen und eine erweiterte Energieverwaltung. Der Philosophie der Android-Platt- form entsprechend steht der Quellcode28 der Öffentlichkeit zur Verfügung. Für die Entwicklung des Kernel bietet Google eine Versionsverwaltung an, über die die neus- ten Verbesserungen und Fehlerbehebungen abgerufen werden können. Die zweite Schicht der Android-Plattform teilt sich in die nativen C und C++ Biblio- theken und die Laufzeitumgebung. Die Bibliotheken sind die Grundlage für die Dienste und das Anwendungsframe- work. Sie bieten grundlegende Funktionen und fördern die Wiederverwendung von Komponenten mit der Leistungsfähigkeit der nativen Implementierung. Auch die Bi- bliotheken sind für Geräte mit beschränkten Ressourcen optimiert. Da sie Bestandteil jeder Anwendung sind, wurde ihre Größe im Speicher minimiert und die Ausfüh- rungsgeschwindigkeit verbessert. Die Hauptbibliothek ist die Bionic libc, eine von Google entwickelte C Bibliothek. Sie ist nur halb so groß wie die GNU libc, enthält spezifische Funktionen des Android-Systems und ist die Basis für weitere native Bi- bliotheken. Diese sind in Abbildung 13 im grünen Bereich dargestellt. Die Schicht enthält die Systemdienste, den Surface Manager zur Darstellung mehrerer Schichten auf dem Bildschirm und Bibliotheken mit Browser-, Multimedia-, OpenGL- und Da- tenbankunterstützung. Zusätzlich beinhaltet die Schicht noch Bibliotheken der Hard- wareabstraktionsschicht, die die Schnittstelle zu den Treibern definieren und das An- droid-System mit der Hardware verbindet. Der gelbe Bereich in Abbildung 13 enthält die Laufzeitumgebung. In diesem befin- det sich die Dalvik Virtual Machine (Dalvik VM), die Hauptkomponente der Android- Plattform. Sie wurde speziell für Android entwickelt und für Umgebungen, in denen die Rechenleistung, der Haupt- und Datenspeicher nur beschränkt zur Verfügung ste- hen, optimiert. Die Dalvik VM führt die Anwendungen auf dem System aus. Sie bil- det die Basis für die Portabilität von Programmen auf verschiedene Android-Syste- me. Auf weitere Details wird im folgendem Kapitel Laufzeitumgebung eingegangen. Ein weiterer Bestandteil der Laufzeitumgebung sind die in Java implementierten Ba- sisbibliotheken (Core Libraries). Sie enthalten den größten Teil der Funktionalität der Java Programmiersprache. Die nächste Schicht bildet das umfangreiche Anwendungsframework der Android- Plattform. Dieses stellt Klassen, Schnittstellen und Typen für die Entwicklung von Anwendungen und Softwarekomponenten zur Verfügung und ist in der Programmier- sprache Java implementiert. Das Framework bietet zahlreiche vorgefertigte Kompo- nenten und ist die Schnittstellen für alle Anwendungen. Es besteht aus dem Apache Harmony Projekt, der Open Source Java SE-Implementierung der Apache Software
28 http://source.android.com/ 36 Android
Foundation, und spezifischen Paketen des Android-Systems. Weitere Bibliotheken enthalten Funktionen zum Testen der Anwendung und bieten Zugriff auf die Hardwa- re. Darüber hinaus bietet das Framework eine Vielzahl integrierter Manager und Content Provider. Diese verwalten die Darstellung auf dem Bildschirm bieten den Zugriff auf die unterstützten Eingabemöglichkeiten, das Netzwerk, Speichermedien, und Telefoniefunktionen. Das modulare Framework stellt damit die Basis für gleich- berechtigte und austauschbare Anwendungen dar. In der obersten Schicht befinden sich die Anwendungen. Im Gegensatz zu anderen Plattformen nutzen alle Anwendungen die gleiche Programmierschnittstelle. Durch die parallelen Ausführung können Anwendungen einfach verbunden und Funktionen von anderen Anwendungen genutzt werden. Die Anwendungen können durch Alter- nativen ergänzt oder ersetzt werden. Das Anwendungsmodell von Android besteht aus den drei Teilen Android Package, Task und Prozess. Im Gegensatz zu den meisten Betriebssystemen besteht in Android keine 1-zu-1 Relation zwischen Anwendungscode, der Anwendung und dem Prozess. Anwendungsteile können in einem eigenem Prozess ausgeführt oder als Teil ein an- deren Anwendungen genutzt werden. Das Android Package (APK) enthält den An- wendungscode und die Ressourcen der Anwendung und wird in komprimierter Form abgespeichert. Dadurch können die Anwendungen einfach verteilt und auf den An- droid-Systemen installieren werden. Ein Task repräsentiert für den Nutzer eine An- wendung und besteht aus Komponenten mehrere Anwendungen. Die Dalvik VM wird in einem eigenem Linux Prozess gestartet und führt die Anwendung in einem Thread aus. Eine Anwendung kann aus vier kombinierbaren Anwendungsblöcken bestehen, der Activity, Broadcast Intent Receiver, Service oder Content Provider. Die eingesetzten Komponenten müssen in der globalen Datei AndroidManifest.xml deklariert werden. Sie befindet sich im Stammverzeichnis jeder Android-Anwendung und enthält globa- le Werte, die Beschreibung der Programmteile und deren Eigenschaften, sowie die benötigten Zugriffsrechte auf die Systemdienste. Die Aktivität ist der zentrale Baustein für Programme mit grafischer Oberfläche. Sie wird in einer separaten, von der Basisklasse Activity abgeleiteten, Klasse implemen- tiert. Eine Aktivität repräsentiert eine einzelne Benutzeroberfläche der Anwendung. Eine Anwendung besteht meist aus mehreren Aktivitäten. Sie ist für die Anzeige auf dem Bildschirm und für die Behandlung von Nutzereingaben zuständig. Im Manifest wird die Startaktivität festgelegt. Die Aktivitäten können von anderen Anwendung gestartet werden. Beim Wechsel wird die aktuelle Aktivität pausiert, der Zustand gesi- chert und auf dem History Stack im Systemprozess abgelegt und die neue Aktivität angezeigt. Nach Beendigung wird die vorherige Aktivität wieder gestartet und ihr Zu- stand wiederhergestellt. Aktivitäten einer Anwendung können sich als Broadcast Intent Receiver im System registrieren und durch Nachrichten mit einer Absichtserklärung, dem Intent, gestartet werden. Die Nachrichten werden als Broadcast im System gesendet. Dieser Mecha- nismus wird genutzt um zu einer Aktivität oder zu einer anderen Anwendung zu wechseln. Die Absichtserklärung setzt sich aus einer Aktion und den Daten, die durch einen Uniform Resource Identifier repräsentiert werden, zusammen. Registrie- ren sich mehrere Aktivitäten zu einer Aktion werden diese in einer Auswahlliste an- gezeigt. Da die Anwendungen gleichberechtigt sind, können vorinstallierten Anwen- Android 37 dungen durch Eigene ersetzt werden, indem sie auf die gleichen Systemnachrichten reagieren. Der Mechanismus erlaubt das Wiederverwenden von Aktivitäten über die Grenzen einer Anwendung hinaus und ist nicht so trivial wie das Erstellen und An- zeigen eines Fensters auf anderen Plattformen.
Abbildung 14: Interaktion der Anwendungskomponenten [Huebn08] Ein Service ist ein Dienst der im Hintergrund für eine längere Zeit ausgeführt wird. Er besitzt meist keine grafische Oberfläche und verfügt über keine direkte Interaktion mit dem Benutzer. Dieser kann beispielsweise zum Abspielen von Mediendateien ge- nutzt werden. Eine Anwendung kann sich mit dem Service verbinden und über eine definierte Schnittstelle kommunizieren. Die Daten einer Anwendung sind durch die User ID des Linux Prozesses vom Sys- tem geschützt. Fremde Anwendungen können aufgrund des Sicherheitsmodells nicht auf diese zugreifen. Um die Daten anderen Anwendungen zur Verfügung zu stellen wird ein Content Provider benötigt. Dieser bietet Standardfunktionen zum Abrufen, Einfügen, Ändern und Löschen der Daten an. Die genaue Implementierung der Da- tenspeicherung ist dem Content Provider überlassen. Er muss die Methoden der ab- strakten Klasse ContentProvider implementieren um den Zugriff zu ermöglichen. Der Content Provider wird durch eine eindeutige URI mit dem Schema content:// re- präsentiert. Das Anwendungsframework enthält Provider für Audio-, Video- und Bilddaten oder für den Zugriff auf die Kontaktliste des Android-Systems. Diese Liste hält die Kontakte in einem globalen Datenbankobjekt bereit. [Morr08], [SDT08]
2.4.3 Laufzeitumgebung Hauptbestandteil der Laufzeitumgebung ist die von Dan Bornstein und anderen Goo- gle Ingenieuren für die Android-Plattform entwickelte Dalvik VM. Diese virtuelle Maschine wurde speziell für Umgebungen mit beschränktem Speicher, limitierter Energieversorgung und geringer Leistung optimiert. Sie ist für parallele Ausführung vorbereitet, da jede Anwendung in einer eigenen Instanz ausgeführt wird. Anwen- 38 Android dungen werden in der Programmiersprache Java geschrieben und nutzen die Biblio- theken der Java Standard Edition. Der Byte-Code wird durch den Standard Java Compiler erstellt. Die Dalvik VM ist, im Gegensatz zur Java VM (Stackmaschine), eine Registermaschine. Sie benötigt für die Ausführung von komplexen Operationen weniger Maschinencodebefehle, da die Operanden in Registern abgelegt sind. Dies bedeutet, dass der erzeugte Byte-Code des Standard Java Compiler nicht lauffähig ist. Deshalb müssen die kompilierten Klassendateien in sogenannte Dalvik Executables29 konvertiert werden, bevor sie auf der Android-Plattformen ausgeführt werden kön- nen. Die Transformation findet während der Erstellung des Android Package statt und wird vom Dalvik Cross Assembler durchgeführt. Aus mehreren Java Klassenda- teien wird eine Dalvik Executable erstellt. Sie enthält den Dalvik Byte-Code mit effi- zienter Speichernutzung und optimierten Datenstrukturen. Die Verwendung der Java SE-Bibliotheken der Apache Harmony Implementierung steigert die Chance, dass vorhandene Bibliotheken genutzt werden können. Die Android-Anwendung wird von der Dalvik VM ausgeführt. Die Instanz wird aus Sicherheitsgründen in einem eigenen Linux Prozess gestartet und dadurch die Beein- flussung des Gesamtsystems im Fehlerfall verhindert. Der Hauptprozess erzeugt durch Aufspaltung30 den Anwendungsprozess und startet die Dalvik VM Instanz. Die Anwendung wird durch den Intent mit der Aktion Action.MAIN gestartet und die im Manifest definierte Aktivität angezeigt. Die Anwendungen verbleiben nach Beendi- gung im Speicher. Das System entfernt unwichtige oder ungenutzte Anwendungen wenn zusätzlicher Speicher benötigt wird. Für die Kommunikation zwischen den Prozessen, z.B. grafischer Oberfläche und Service, wird die Android Interface Definition Language (AIDL), eine Schnittstellen- beschreibungssprache für Inter Process Communication (IPC), genutzt. Dafür muss das zu tauschende Objekt in die primitiven Datentypen des Systems überführt wer- den. Die AIDL besteht aus einer einfachen Syntax zur Definition von Funktionen ei- ner Schnittstelle. Der Lebenszyklus einer Anwendung wird von der Laufzeitumgebung verwaltet. Der aktuelle Zustand wird durch das System ermittelt und der Anwendung mitgeteilt. Die Laufzeitumgebung analysiert die Anwendungsteile der gestarteten Prozesse und legt die Priorität der Anwendung anhand definierter Regeln fest. Abbildung 15 zeigt die Zustände einer Aktivität und die Methoden, die beim Zustandswechsel vom System aufgerufen werden. Eine Aktivität wird als aktiv bezeichnet wenn sich die Benutzero- berfläche im Vordergrund befindet. Beim Starten einer weiteren Aktivität wird der in- terne Status der aktuellen Aktivität gesichert und diese in einen pausierten Zustand gesetzt. Die Aktivität verbleibt im Speicher, sodass sie innerhalb kurzer Zeit wieder aktiviert werden kann. Benötigt eine andere Anwendung den Speicher, wird eine pausierte Aktivität entfernt und der zugehörige Prozess beendet. Kommt eine bereits beendete Aktivität wieder in den Vordergrund wird diese neu gestartet und der gesi- cherte Status wiederhergestellt. Der Prozess einer zerstörten Aktivität wird vom Sys- tem beendet. Bei der Entwicklung muss der Mechanismus der Priorisierung beachtet werden, damit eine zeitaufwendige Operation nicht vorzeitig durch das System been- det wird. Die genaue Auflistung der Prioritäten befindet sich in der Android Doku- mentation31 unter dem Punkt Application Life Cycle.
29 Android spezifisches Byte-Code Format 30 Linux fork 31 http://code.google.com/intl/de-DE/android/documentation.html Android 39
Abbildung 15: Lebenszyklus einer Android Aktivität [Goog08]
Die Energieverwaltung setzt auf dem im Kernel integrierten Energiemanagement auf. Sie verfolgt einen aggressiven Ansatz. Der Prozessor, der Bildschirm und andere Ge- räte werden deaktiviert, wenn sie nicht benötigt werden. Die automatische Deaktivie- rung kann über den Power Manager verzögert oder verhindert werden. Beispielswei- se muss für das Abspielen einer Musikdatei den Prozessor aktiv sein, während der Bildschirm nach ein paar Sekunden ausgeschaltet werden kann. [Born08], [Brad08], [Prin08]
2.4.4 Speicherverwaltung Die Bereitstellung von Speicher ist die Aufgabe des Betriebssystems. Das Memory Management Subsystem des Linux Kernel ist für die Verwaltung des Arbeitsspeichers zuständig. In den höheren Schichten ist die Dalvik VM und der optimierte Byte-Code für eine optimierte Speichernutzung verantwortlich. Der Standard Java Compiler erstellt eine virtuelle Abbildungstabelle mit den Signaturen der Methoden für jede Klasse, für gleiche Signaturen werden mehrfache Einträge angelegt. Diese Einträge verbrauchen zusätzlichen aber unnötigen Speicher. Nach der Konvertierung zu Dalvik Byte-Code zeigt jede Klasse nur auf eine einzige Kopie der Signatur. Dies bringt eine wesentli- 40 Android che Verringerung des Speicherverbrauchs innerhalb einer Anwendung mit sich. Jede Anwendung wird aus Sicherheitsgründen in einer eigenen Dalvik VM in einem einzelnen Linux Prozess ausgeführt. Aufgrund der Struktur einer Java Klassendatei enthält jeder Java VM Prozess eine eigene Kopie von vielfach genutzten Anwen- dungscode, beispielsweise einer HashMap. Die Dalvik VM nutzt ein anderes Spei- cherlayout für Byte-Code. Die Klassen verweisen alle auf ein einzige Kopie des An- wendungscodes im Speicher. Dies reduziert zusätzlich den benötigten Speicher. Die Optimierungen werden durch das Zusammenfassen mehrerer Java Klassendatei- en zu einer Dalvik Executable ermöglicht und bei der Erstellung des Android Packa- ge durchgeführt.
2.4.5 Grafische Benutzungsoberfläche Die Offenheit der Android-Plattform, bezüglich Bildschirmgröße, Auflösung und Eingabemöglichkeiten, verlangt nach speziellen Elementen für die grafische Benut- zungsoberfläche. Das Framework enthält neu entwickelte GUI-Komponenten, die einfacher als die Elemente der Swing32 Grafikbibliothek, aber mächtiger als die Items des LCDUI der Java Micro Edition sind. Die Klassen befinden sich im Paket an- droid.view.
Abbildung 16: Hierarchie von Layout und View [Goog08] Ein einfacher grafischer Bildschirm wird in Android durch die Klasse View repräsen- tiert. Diese verwaltet einen rechteckigen Bereich des Bildschirms, ist für das Zeich- nen des eigenen Inhalts zuständig und gibt Benutzereingaben an den zuständigen View weiter. Diese Basisklasse bildet die Grundlage für alle interaktiven Benutzerele- mente, den Widgets. Diese vordefinierten Elemente verwalten sich selbst und ermög- lichen eine einfache und schnelle Erstellung grafischer Oberflächen. Das Framework enthält neben den Standardelementen Button, CheckBox, RadioButton, EditText, Pro- gressBar auch neuartige und komplexere Elemente wie ImageButton, Gallery, Ana-
32 http://java.sun.com/docs/books/tutorial/uiswing/index.html Android 41 log- und DigitalClock oder Date- und TimePickerDialog. Abbildung 16 zeigt, das mehrere Elemente in Gruppen, den ViewGroups, in einer Baumstruktur angeordnet werden können. Die ViewGroup-Klasse enthält spezielle Funktionen zur Verwaltung der Elemente. Die Anordnung der Elemente auf dem Bildschirm wird über Layouts realisiert. Das GUI-Framework enthält zu diesem Zweck vorgefertigte Layoutklassen, die die Steu- erelemente oder Gruppen anordnen. Die Kindelemente dieser Klassen werden an- hand von Eigenschaften, den LayoutParams, in dem Layout positioniert. Die Höhe und Breite der Elemente kann dynamisch an den Inhalt oder absolut festgelegt wer- den. Die wichtigsten Layouts sind das Absolute-, Relative- und das LinearLayout. Im TableLayout können Daten in tabellarischer Form angezeigt werden. Die Layouts ge- hören zu den ViewGroups und lassen sich gleichermaßen hierarchisch anordnen. Da- durch können die besonderen Eigenschaften der Layouts kombiniert werden. Android unterstützt neben der programmatischen Erstellung auch die deklarative Be- schreibung der Benutzeroberfläche. Die Struktur und Eigenschaften der Elemente wird in einer XML-Datei definiert. Diese kann von einer Aktivität angezeigt werden. Zur Laufzeit kann auf die Elemente über das Attribut android:id des XML-Elements zugegriffen werden.
Abbildung 17: Beispiel eines XML-Layouts Abbildung 17 zeigt den Aufbau der XML-Datei und die beschriebene Benutzerober- fläche. Im Wurzelelement wird die Referenz auf das Android-Schema eingebunden. Dadurch kann die Beschreibung der Oberfläche validiert werden. Das Hauptelement beschreibt ein relatives Layout. Es nutzt die zur Verfügung stehende Breite (fill_par- ent) und benötigte Höhe (wrap_content) aus und definiert einen Abstand (padding) 42 Android von 10 Pixel zu den inneren Elementen. Das erste Widget ist ein editierbares Textfeld und enthält den Text „Hello World!“, sowie die globale ID EditText1. Die Schaltflä- che wird unter dem Textfeld (layout_below) am rechten Rand (layout_alignPar- entRight) des darüber liegenden Elements ausgerichtet. Auf die Elemente kann über die Methode findViewByID unter Angabe der android:id aus der globalen Ressour- cenklasse zugegriffen werden. Diese wird durch das Android Asset Packaging Tool (AAPT) erstellt. Die spezielle List Activity vereinfacht die Anzeige von Daten aus einer Datenquelle. Die Bereitstellung der Daten erfolgt über einen Data Adapter. Dieser stellt die Ver- bindung zwischen Datenquelle und der Anzeige dar. Er bietet Zugriff auf die einzel- nen Einträge und ist für die angezeigten Daten und das Layout zuständig. Das Framework bietet noch weitere spezielle Anzeigeelemente, beispielsweise einen konfigurierbaren Dialog oder Benachrichtigungen auf dem Bildschirm. Zu diesen ge- hört auch der Surface Manager. Dieser verwaltet das Grafiksubsystem und ist für die Darstellung von 2D-Inhalten zuständig. Die Bilder werden durch die Canvas-Klasse erstellt. Sie stellt die benötigten Funktionen zum Zeichnen von Linien, Grafiken oder Text bereit. Teil des Android-Systems ist eine 3D-Grafikbibliothek für Eingebettete Systeme. Die OpenGL ES enthält einen Teil der Funktionen der OpenGL Bibliothek und ist für den Einsatz auf mobilen Plattform optimiert. Wie auch die Schnittstelle des Multimedi- aframework ist die OpenGL ES API Teil des Anwendungsframework und auch ver- fügbar, wenn das Gerät keine Hardwarebeschleunigung unterstützt. In diesem Fall wird die Softwareberechnung der Bibliothek genutzt. Die in Android unterstützte OpenGL ES 1.0 korrespondiert mit der Desktop-Variante OpenGL 1.3 und unterstützt die gleichen Funktionen für die Anzeige dreidimensionaler Objekte. [Hase08]
2.4.6 Persistente Datenspeicherung Das Android-System unterstützt mehrere Möglichkeiten um Daten persistent auf dem Gerät abzuspeichern. Die SharedPreferences bieten eine einfache Möglichkeit um Anwendungseinstellun- gen zu sichern. Diese werden als Schlüssel-Wert-Paare zu einer Liste hinzugefügt und im Anwendungsverzeichnis als XML-Datei abgelegt. Der Zugriff auf die ge- meinsamen Einstellungen ist unter Angabe des Namens innerhalb eines Android Package möglich. Über die statischen Methoden openFileInput und openFileOutput der Context-Klasse können, unter Angabe des Dateinamens, Dateien im files Verzeichnis der Anwendung gelesen und geschrieben werden. Der Zugriff aus einer anderen Anwendung ist auf- grund des Sicherheitsmodells des Linux Dateisystems nicht möglich, da jede Anwen- dung vom System eine eigene Linux User ID erhält. Projektspezifische statische Da- ten können während der Erstellung des Android Packages im Verzeichnis res, in den Unterverzeichnissen xml, wenn es XML-Dateien sind, und raw für andere Dateien abgelegt und zur Laufzeit gelesen werden. Zusätzlich ist in Android die Datenbank-Engine SQLite 3.5 integriert. Das Anwen- dungsframework enthält Klassen zum Zugriff auf die Datenbank. Über diese können die SQL-Anfragen an die Datenbank gesendet werden. Die Daten können über den Content Provider-Mechanismus anderen Anwendungen zur Verfügung gestellt wer- Android 43 den. Der Zugriff auf die Daten erfolgt über einen Cursor, der auf den aktuellen Da- tensatz zeigt. Die Funktionen der Datenbank sind nicht eingeschränkt, es werden alle Eigenschaften des SQLite Standards unterstützt Die Datenbank wird ebenfalls in An- wendungsverzeichnis abgespeichert.
2.4.7 Multimediaunterstützung Die Multimediabibliothek von Android basiert auf der OpenCORE33 Bibliothek der PacketVideo Corporation. Diese stellt ein Medienframework für mobile Geräte be- reit. Das Framework unterstützt aktuelle Audio-, Video- und Bildformate, wie MPEG4, H.264, MP3, AAC, AMR, JPEG und PNG. Das Framework stellt die Klassen MediaPlayer und MediaRecorder, sowie den Au- dioManager zur Verfügung. Die Player-Klasse kann Audio- und Videomedien von verschiedenen Quellen wiedergeben. Diese kann eine Ressource innerhalb des An- droid Packages, eine Datei im Dateisystem oder ein Datenstrom sein. Die statische Methode create stellt die Verbindung zur Quelle her und bereitet, durch Aufrufen von prepare, das Abspielen vor. Um die Anwendung durch das Puffern nicht zu blockie- ren kann die die Vorbereitung asynchron gestartet werden. Der Player liefert zudem Statusinformationen, wie die aktuelle Position und die Gesamtspielzeit. Die Audiodaten werden zum Standardausgabegerät gesendet. Der AudioManager ist für die Lautstärke zuständig und leitet den Datenstrom zu den angeschlossenen Gerä- ten, wie Kopfhörer, Lautsprecher oder Bluetooth-Headset, weiter. Der MediaRecorder kann bisher nur Audiosignale aufzeichnen, Videoaufzeichnung wird in späteren Versionen unterstützt. Die Aufnahme wird durch den Zustandswech- sel zu Recording gestartet. Für die Aufnahme wird neben der Quelle das Ausgabefor- mat und -ziel benötigt. Teil der Media API ist ein Generator für Telefontöne (DTMF) und eine Klingelton- verwaltung. Eine interessante Klasse ist der FaceDetector. Diese enthält eine Metho- de mit der Gesichter in einem Bild gesucht und der Mittelpunkt oder die Position der Augen ermittelt werden kann. Die Media API ist ein essentieller Bestandteil des An- wendungsframework. Die unterstützten Formate können sich jedoch von Gerät zu Gerät unterscheiden.
2.4.8 Kommunikationsschnittstellen Die Funktionen für den Zugriff auf die Netzwerkschnittstellen befinden sich im Pa- ket java.net. Dieses enthält die Standard Javaklassen der Apache Harmony Imple- mentierung. Die Klassen bieten Zugriff auf die Transportschicht des OSI-Referenz- modells. Darüber hinaus werden Klassen zur Verfügung gestellt, die bereits Netz- werkfunktionen enthalten. Die Socket-Klasse repräsentiert einen Client-Socket. Die- ser kann unter Angabe eines Hostnamen oder der IP-Adresse und der Portnummer er- stellt werden. Der Datenaustausch erfolgt über Ein- und Ausgabeströme. Die Klasse ServerSocket bietet einen Service für verbindungsorientierte Sockets an. Eine paket- orientierte Verbindung kann über die DatagramSocket-Klasse erzeugt werden. Auf höherer Ebene kann eine Verbindung aus einer URL-Instanz erzeugt werden. Diese liefert eine UrlConnection, eine Verbindung über das angegebene Protokoll. An- schließend können weitere Parameter gesetzt und die Verbindung hergestellt werden. 33 http://www.packetvideo.com/products/core/ 44 Android
Daten werden über den OutputStream gesendet und den InputStream gelesen. Für ei- nige Protokolle existieren eigene Implementierungen, über die protokollspezifische Eigenschaften verändert werden können. Spezialisierte Netzwerkfunktionen für HTTP werden durch die Apache HttpComponents34 Bibliothek bereitgestellt. Die Android-Plattform hat keine integrierte Unterstützung für Webservices über SOAP und stellt keinen XML-RPC Klienten bereit. Die vom Server empfangene Antwort kann manuell mit einen der drei XML-Parser verarbeitet werden. Im android.net Paket sind spezielle Klassen für den Zugriff auf die Funkschnittstelle enthalten. Der Connectivity Manager liefert Information zur Netzwerkschnittstelle und sendet Nachrichten, wenn sich der Status ändert. Über die NetworkInfo-Klasse können detaillierte Informationen zur Funkverbindung abgerufen werden und die DhcpInfo-Klasse liefert das Ergebnis einer DHCP Anfrage. [Murp09]
2.4.9 Sicherheitsmechanismen Auf die Sicherheit muss speziell in einem offenen System, wie der Android-Platt- form, geachtet werden. Aus diesem Grund erstrecken sich die Sicherheitsmechanis- men über alle Schichten. Jede Dalvik VM wird in einem eigenen Linux Prozess unter einer eigenen User ID ausgeführt. Dadurch sind die Anwendungen in einer Sandbox isoliert, da der Zugriff auf fremden Speicher vom Linux Kern verhindert wird. Auf Anwendungsebene schützt ein Sicherheitsmodell vor unberechtigtem Zugriff. Android-Anwendungen werden die benötigten Rechte nur bei der Installation ge- währt. Nachträglich kann eine Anwendung keine weiteren Berechtigungen erlangen. Damit wird die Privatsphäre geschützt und Schadsoftware verhindert.
2.4.10 Native Programmierung Einige mobilen Plattformen erlauben einen direkten Zugriff auf die Hardware und native Bibliotheken. Anwendungen in Android können auf diese nicht zugreifen. Die Google Gruppen Android Developers35 und Android Internals36 enthalten Hinweise, das die Entwickler der Android-Plattform an einem nativen SDK arbeiteten, welches das aus Java bekannte Java Native Interface nutzt. Die Schnittstelle erlaubt die Aus- führung von nativen Anwendungen oder Bibliotheken, die in einer anderen Program- miersprache geschrieben sind. Neben Sicherheitsrisiken besteht bei nativem Anwen- dungscode das Problem der Portabilität, da dieser nicht in einer virtuellen Maschine ausgeführt wird und nur für eine bestimmte Prozessorarchitektur erstellt ist. Bisher erlaubt die Android-Plattform den Zugriff nur über das Anwendungsframe- work. Dieses stellt Klassen für den Zugriff auf die Kommunikationsschnittstellen be- reit. Die WiFi API erlaubt beispielsweise den Zugriff auf Hardwarefunktionen der Funkschnittstelle. Über diese können Status- und Netzwerkinformationen ausgelesen und Verbindungen aufgebaut oder getrennt werden.
2.4.11 Entwicklungsumgebung Das Android SDK enthält die erforderlichen Werkzeuge für die Anwendungsentwick-
34 http://hc.apache.org/ 35 http://groups.google.com/group/android-developers 36 http://groups.google.com/group/android-internals Android 45 lung und steht für die Windows-, Linux- und Mac-Plattform zur Verfügung. Es be- steht aus dem Emulator und einer Vielzahl weiterer Werkzeuge zum Erstellen, Verpa- cken und Installieren der Anwendung. Der Emulator kann mit unterschiedlichen Auf- lösungen, Bildschirmorientierungen und Eingabemöglichkeiten gestartet werden.
Abbildung 18: Eclipse mit Android Developer Tools Für die Entwicklungsumgebung Eclipse wird das Android Developer Tools (ADT) PlugIn bereitgestellt. Durch diese können die Funktionen der Entwicklungsumge- bung genutzt werden. Zudem verbessert es die Entwicklung und Fehlersuche durch grafische Editoren und Statusanzeigen. Dazu gehört der GUI-Designer, über den das XML-Layout erstellt werden kann, und eine zusätzliche Ansicht in Eclipse, in wel- cher der aktuelle Zustand des Emulators und die Meldungen des Dalvik Debug Man- ager Service (DDMS) angezeigt werden. Das PlugIn nutzt die im SDK enthaltenen Kommandozeilenwerkzeuge, welche auch von den vorgefertigten Scripten für die Er- stellung von der Kommandozeile verwendet werden. [Murp09]
2.4.12 Besonderheiten der Plattform Android ist eine, auf Linux basierende, offene Softwareplattform für mobile Geräte. Sie definiert die gesamte Architektur vom Betriebssystem bis zu den Anwendungen. Das Anwendungsframework ist die Basis für alle Anwendungen und nutzt native Bi- bliotheken. Diese bieten ein leistungsfähiges Multimediaframework, eine integrierte Datenbank und ein umfassende Grafikfunktionen. Die Dalvik VM übersetzt den opti- mierten Byte-Code in Maschinencode und verwaltet die Ausführung der Anwendun- gen. Die Plattform wird durch die Open Handset Alliance weiterentwickelt. 46 Vergleich der Plattformen
2.5 Vergleich der Plattformen Plattform Java ME .NET CF Android Architektur Konfigurationen PAL Bibliotheken Profile CLR Framework optionale Pakete Klassenbibliothek Anwendungen Laufzeitumgebung JVM (CDC) CLR Dalvik VM KVM (CLDC) JIT MIDlet Speicherverwaltung Laufzeitumgebung Laufzeitumgebung Laufzeitumgebung Garbage Collector Garbage Collector Garbage Collector Benutzeroberfläche LCDUI Windows Forms Views Items Controls Widgets Datenspeicherung RecordStore Registry Preferences Dateisystem Dateisystem SQL Server CE SQLite Multimedia Media API (Töne) Waveform Audio OpenCORE Bi- MMAPI Interface (Audio) bliothek (Audio/Video) Windows Media (Audio/Video) Player Kommunikation Generic Connetion System.Net Java API Framework Sicherheit Preverification Anwendungsdomä- Prozessebene Protection Domains ne Rechtemodell Native optionale Pakete P/Invoke nicht möglich Programmierung des Herstellers Win32 Funktionen Entwicklung Java Wireless Tool- .NET CF SDK Android SDK, kit Visual Studio .NET Android Develop- Netbeans Mobility ment Tools Programmiersprache Java C#, VB.NET Java
Die drei untersuchten Plattformen stellen alle eine Laufzeitumgebung und eine Pro- grammierschnittstelle bereit. Die Plattformen Java ME und .NET CF können in be- stehende Systeme integriert werden, während die Android-Plattform ein eigenes Sys- tem beschreibt. Alle Plattformen führen die Anwendungen in einer virtuellen Maschi- ne aus. Der vorkompilierte Byte-Code wird in Maschinenbefehle übersetzt. DieLauf- zeitumgebung steuert die Ausführung der Anwendung und verwaltet den Speicher, sowie den Zugriff auf Systemdienste. Die Java ME- und die .NET CF-Plattform füh- ren eigenständige Anwendungen aus. Auf der Android-Plattform können Komponen- ten fremder Anwendungen genutzt werden. Die grafischen Oberflächen unterschei- den sich aufgrund der Einsatzgebiete voneinander. Die Java ME-Plattform bietet nur eine einfache Grafikschnittstelle mit den wichtigsten Elementen. Das .NET CF ent- hält die Steuerelemente des .NET Framework. Die Android-Plattform enthält dagegen Vergleich der Plattformen 47 eine Grafikbibliothek mit neuartigen Elementen. Alle Plattformen bieten den Zugriff auf verschiedene Datenspeicher an. Die Java ME-Plattform enthält eine einfache Da- tenbank. Die beiden anderen Plattformen bieten eine umfangreiche Datenbank- schnittstellen und den Zugriff auf Dateien an. Die .NET CF-Plattform enthält die ge- ringste Multimediaunterstützung, da die Basisplattform für den Geschäftsbereich vorgesehen ist. Die beiden anderen Plattformen werden im Konsumerbereich einge- setzt und bieten umfangreiche Multimediafunktionen an. Die Standardfunktionen der Java ME-Plattform werden durch das optionale Paket MMAPI erweitert, während die Android-Plattform eine umfangreiche Multimediabibliothek enthält. Die Plattfor- men enthalten Netzwerkfunktionen über die Standardprotokolle. Die Systemstabilität der Plattformen wird durch die Isolation der Anwendungen gewährleistet. Die Java ME verwendet das Sandbox-Modell, das .NET CF isoliert die Anwendung in einer eigenen Anwendungsdomäne innerhalb der Laufzeitumgebung und das Android-Sys- tem stellt einen eigenen Prozess bereit. Zudem enthalten die Java ME und Android ein Rechtesystem, über das der Zugriff auf Funktionen erlaubt wird. Alle Plattformen prüfen den Quellcode auf ungültige Anweisungen bereits während der Erstellung des Byte-Codes. Die Laufzeitumgebungen führen diesen in einem geschützten Bereich aus und enthalten eine Fehlerbehandlung. Spezielle Funktionen werden auf der Java ME-Plattform über optionale Pakete angeboten. Im .NET CF können diese über Bi- bliotheken bereitgestellt werden. Das Anwendungsframework der Android-Plattform enthält die gesamte Funktionalität und kann nicht erweitert werden. Das Software Development Kit steht für alle Plattformen kostenlos zur Verfügung und kann über Erweiterungen in Entwicklungsumgebungen integriert werden. 48 Referenzanwendung
3 Referenzanwendung In diesem Kapitel wird eine Referenzanwendung entwickelt, um die Fähigkeiten der verschiedenen Plattformen zu testen. Ziel ist die prototypische Implementierung ei- nes Bilderarchivs und der Klienten für jede Plattform.
3.1 Konzept Die Hauptkomponente des Bilderarchivs ist ein Webserver. Auf dem Server werden die Bilder abgelegt. Der Zugriff auf die Funktionen des Archivs werden über einen Webservice bereitgestellt. Über diesen werden die Informationen über das Bild abge- rufen und können verändert werden.
Abbildung 19: Konzept Der mobile Klient nutzt den Webservice zum Abrufen der Informationen. Das Bild und die Aufnahmeposition können auf dem Gerät angezeigt und die Daten zwischen- gespeichert werden.
Abbildung 20: Anwendungsfalldiagramm In Abbildung 20 ist ein UML37-Anwendungsfalldiagramm der Referenzanwendung dargestellt.
3.2 Umsetzung Der Webservice bietet Zugriff auf das Bilderarchiv. Er stellt die Funktionen zum Auf- listen, Abrufen und Ändern der Bilder und deren Eigenschaften bereit. Weiterhin
37 Unified Modeling Language der Object Management Group Umsetzung 49 können von diesem die Bilder, sowie automatisch erstellte und für den Klienten an- gepasste Vorschaubilder, abgerufen werden. Der mobile Klient greift über den Webservice auf das Bilderarchiv zu. In einer Liste werden die Vorschaubilder und die Namen angezeigt. Beide werden auf dem Gerät gesichert. Für die Einträge können die Eigenschaften des Bildes und weitere Infor- mationen abgerufen werden. Bestimmte Informationen (Name, Collection, Schlag- worte) sind veränderbar und können mithilfe des Webservice in das Archiv abgespei- chert werden. Das Bild wird auf dem mobilen Gerät in einer angepassten Auflösung dargestellt. Der Aufnahmeort kann in einer Kartenansicht angezeigt werden.
3.3 Webservice Der Webservice des Bildarchivs wurde mit der Eclipse 3.4.0 for Java EE Developers entwickelt. Für die Ausführung des Dienstes wird der Apache Tomcat 5.5 und die Axis Engine benötigt. Apache Axis ist eine Implementierung des SOAP und unter- stützt den Programmierer bei der Erstellung von Webanwendungen. In einem Dy- namic Web Project wurden die grundlegenden Operationen des Webservice definiert. Mithilfe der Web Standard Tools und der Axis Engine wurde die Web Service De- scription Language (WSDL) Datei und die Proxyklassen automatisch erstellt. Die Erzeugung des Dienstes aus der Javaklasse führt zu schnellen Ergebnissen. Im weite- ren Verlauf der Entwicklung wurde die WSDL-Datei verändert und aus dieser die Serviceklassen erzeugt. Die Implementierung des Bildarchivs befindet sich in der PictureArchiveService- Klasse. Diese enthält die Funktionen zum Abrufen der Liste aller Bilder, der Eigen- schaften eines Bildes, zum Ändern des Bildnamens und der Collection und zum Hin- zufügen und Entfernen von Schlagwörtern (Tag) zu einem Bild.
Abbildung 21: Klassendiagramm PictureArchive Das Archiv besteht aus mehreren Picture-Objekten, die unter einer eindeutigen ID im Archiv gespeichert werden. Die Datenstruktur wird im Projektordner, mittels XM- LEncoder, als XML-Datei abgelegt. Die Funktionen zum Laden und Speichern des Archivs befinden sich in der Klasse Tools im Paket pictureserver.helper. Zudem ent- hält die Klasse Methoden zur Erstellung und Aktualisierung des Bilderarchivs. Die 50 Webservice
Picture-Objekte werden über die statischen Methoden der Klasse PictureProc er- stellt. Diese nutzt die metadata extractor38 Bibliothek um Meta-Informationen aus den Bild zu gewinnen. Neben der Größe und des Aufnahmedatums des Bildes wer- den auch vorhandene geografische Informationen ausgelesen. Zudem können diese über die ImageIO-API39 gewonnen werden, da nicht alle Bilder diese Meta-Informa- tionen enthalten. Die Eigenschaften werden als PictureInfo-Objekt und die geografi- schen Informationen als GeoInfo-Objekt zum Bild hinzugefügt. Der Webservice bie- tet folgende Operationen an: Rückgabetyp Methode PictureItem[] getPictureItemList() PictureInfo getPictureProperties(long picture_id) GeoInfo getPictureGeoProperties(long picture_id) String getPictureURL(long picture_id) String getPictureThumbURL(long picture_id, int width, int height) boolean addPictureTag(long picture_id, String tag) boolean removePictureTag(long picture_id, String tag) boolean setPictureCollectionName(long picture_id, String name) PictureItem[] getPicturesByCollection(String name) String[] getCollectionNames() boolean setPictureName(long picture_id, String picturename) 3.4 Java ME Klient Für die Entwicklung des Java ME-Klienten wurde das Sun Java Wireless Toolkit 2.5.2 for CLDC verwendet. Dieses stellt neben der Java ME-Bibliothek mit vielen optionalen Paketen auch den Emulator und weitere Werkzeuge für die Entwicklung zur Verfügung. Die Entwicklungsumgebung NetBeans IDE 6.5 und das Modul Visual Mobile Development unterstützen die Entwicklung von Anwendungen für mobile Geräte. Der Visual Mobile Designer erleichtert die Erstellung der grafischen Oberflä- che. In einem Visual MIDlet wird der Bildschirm des Geräts angezeigt. Im Screen Designer werden die grafischen Elemente aus einer Palette ausgewählt und auf dem Bildschirm platziert. In dieser Ansicht werden auch die Kommandos der Telefontas- ten festgelegt. Im Flow Designer wird der Anwendungsfluss zwischen den Bildschir- men und den Kommandos des MIDlets dargestellt. Das Projekt besteht aus den Paketen picturearchive.gui, picturearchive.net und pictu- rearchive.proxy. Der größte Teil der Funktionalität befindet sich in der Klasse Pictu- reArchiveJ2MEClient im Paket gui. Diese ist ein Visual MIDlet und bietet die erläu- terten Vorteile bei der Erstellung der Anwendung. Für das Laden und Anzeigen der Bilder ist die Klasse ViewCanvas zusammen mit der WaitForm und dem NetWorker verantwortlich. Das Endgerät muss das optionale Paket J2ME Web Services Specific- ation [JSR172] unterstützen. Dieses bietet eine Implementierung für den Zugriff auf Webservices. Weiterhin wird die CLDC und das MIDP 2 vorausgesetzt.
38 http://www.drewnoakes.com/code/exif/ 39 http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/ImageIO.html Java ME Klient 51
Abbildung 22: Klassendiagramm Java ME Klient Der Startbildschirm ist ein List Screen der High-Level-API mit den zwei Einträgen Show Picture List und Show Settings. Bei Auswahl eines Listeneintrages wird der zu- gehörige WaitScreen auf dem Bildschirm angezeigt. Ein WaitScreen ist eine von Net- Beans zur Verfügung gestellte Ansicht und mit einem SimpleCancelableTask, in dem Aufgaben ausgeführt werden, verbunden. Beim Wechsel der Ansicht auf einen Wait- Screen wird der Task gestartet. Der WaitScreen besitzt zwei Kommandos die nach er- folgreicher Ausführung oder im Fehlerfall ausgeführt werden. Im Flow Designer wird der Zielbildschirm festgelegt. Der Klient zeigt einen Alert beim Auftreten eines Fehlers an. Dieser enthält Informationen zum aufgetretenen Fehler und muss bestä- tigt werden. Im Settings-Formular befinden sich vier TextField-Elemente um den Endpunkt des Webservice festzulegen. Die Komponenten der Webservice-URL werden in einem ei- genen Element angezeigt. Zudem enthält das Formular zwei ChoiceGroup-Elemente zum Aktivieren der Zwischenspeicherung auf dem Gerät und der Anzeige der Vor- schaubilder. Das PictureList-Formular besteht aus einer ChoiceGroup, mehreren ImageItems und einer grafischen Anzeige der Speicherbelegung. Über das Auswahlelement können die Listeneinträge gefiltert werden. Damit sich die Auswahlmöglichkeiten der Choi- ceGroup ausklappen und dadurch weniger Platz verbrauchen, muss die Eigenschaft TYPE auf POPUP gesetzt werden. Aus der aktuellen Liste werden die ImageItems erstellt und das Standardkommando hinzugefügt. Dafür wird das Layout auf Button gesetzt und gleichzeitig das MIDP 2 Layout aktiviert um die vertikale Anordnung zu erlauben. Über das Menü kann zu den Detailansichten gewechselt oder die Listenein- träge vom Gerät gelöscht werden. Durch Aktivieren des Standardkommandos der Listeneinträge werden die Informa- tionen vom Webservice geladen und bei Erfolg das PictureProperties-Formular ange- zeigt. Dieses stellt neben dem Namen und der Collection die Auflösung, Schlüssel- wörter und das Aufnahmedatum dar. Der Name und die Collection des Bildes können verändert werden. Im Menü befinden sich die Kommandos zum Wechseln zur Bild- und Kartenansicht und zum Übertragen der Änderungen zum Archiv. 52 Java ME Klient
Abbildung 23: Java ME Klient Screenshots Zum Anzeigen des Bildes wird die Low-Level-API verwendet. Das Bild wird über die Grafikfunktionen direkt auf den Bildschirm gezeichnet. Die Java ME-API erlaubt das Anzeigen von komprimierten Bildern. Der Klient lädt das Bild vom Webserver in einer angepassten Größe. Das Originalbild kann bei ausreichendem Speicher ange- zeigt und der sichtbare Ausschnitt verschoben werden. Für die Anzeige des Aufnah- meortes wird die Google Static-Maps API40 genutzt. Dieser Service erstellt, durch Angabe der geografischen Länge und Breite, der Größe des zu erstellenden Bildes und der Zoomstufe, einen Landkartenausschnitt. Das erzeugte Bild wird anschlie- ßend auf dem Bildschirm angezeigt. Über die Tasten des Telefons kann der Aus- schnitt verschoben und die Zoomstufe verändert werden. Für die grafische Oberflä- che werden nur die Elemente des MIDP verwendet, um größtmögliche Portabilität zu erreichen. Der Zugriff auf den Webservice wird über einen Proxy hergestellt. Dieser wird mit Hilfe des Werkzeugs wscompile erstellt. Aus der WSDL-Datei des Webservice wird für jede Operation und jeden Datentyp eine eigene Klasse und der Servicestub er- zeugt. Dieser kodiert jede Operation mit ihren Parametern in die entsprechende SOAP-Nachricht und dekodiert die empfangene Antwort. Über Methoden kann der Webservice Endpoint und die Nutzerauthentifizierung verändert werden. Das Bild wird vom Webservice durch die Klasse NetWorker in einem eigenen Thread geladen. Für die Übertragung wird eine Verbindung über HTTP hergestellt und aus den emp- fangenen Daten ein Objekt der Klasse Image erzeugt. Unter Zuhilfenahme der DataInputStream-Klasse kann ein komprimiertes Bild direkt in den Speicher ge- schrieben werden. Um Ressourcen zu sparen wird der Thread nach der Ausführung angehalten und nach der Veränderung der URL wieder gestartet. [Gigu03] Die Einstellungen, Einträge und Vorschaubilder werden in eigene RecordStores ge- speichert. Die Daten werden über die RecordId ausgelesen. In den Einstellungen sind die Einträge anhand festgelegter Indizes gespeichert und dadurch jederzeit direkt ab- rufbar. Die beiden anderen RecordStores nutzen das Verfahren von Ortiz [Orti06a]. Ein PictureItem aus der vom Webservice empfangenen Liste wird als eigener Eintrag angelegt. Die Daten werden in das Byte-Array unter Zuhilfenahme eines DataOut- putStreams übertragen. Mit diesem können primitive Datentypen in das Byte-Array geschrieben und wieder ausgelesen werden. Die eindeutige Bild-Id wird an den An-
40 http://code.google.com/intl/de-DE/apis/maps/documentation/staticmaps/ Java ME Klient 53 fang des Arrays gespeichert, um das PictureItem wiederzufinden. Das gleiche Ver- fahren wird für die Speicherung des Vorschaubilder genutzt. Der Eintrag besteht aus der Bild-Id, der Breite und Höhe, sowie die RGB-Daten des Bildes für die Rekon- struktion. Um einen Eintrag wiederzufinden, wird der Anfang eines Records gelesen, die Bild-Id dekodiert und die RekordId ermittelt. Probleme entstehen bei der Generierung des Stubs aus der von Axis erzeugten Webservicebeschreibung. Die Datentypen werden verändert und führen zu Fehlern bei der Dekodierung der SOAP-Nachrichten.
3.5 .NET CF Klient Für die Erstellung des Klienten wurde das Windows Mobile 5.0 Pocket PC SDK ver- wendet. Dieses enthält mehrere Emulatorabbilder. Zum Testen der Anwendung wur- de das Pocket PC 2003 SE Abbild verwendet. Das SDK integriert sich in die Ent- wicklungsumgebung Visual Studio .NET. Der Klient benötigt das .NET Compact Framework 2.0. Die Projektmappe enthält neben den Windows Forms Klassen, noch weitere Hilfs- klassen und die Ressourcen der Anwendung. Über die Verweise werden die verwen- deten Klassen für die Verarbeitung von XML, Zugriff auf ADO.NET Funktionen und die Grafikbibliothek bereitgestellt. Weiterhin wurde der Webverweis hinzugefügt.
Abbildung 24: Klassendiagramm .NET CF Klient Nach dem Start der Anwendung wird die MainForm angezeigt. Diese enthält die Auswahlbox und ein ListView-Steuerelement, in dem die Namen und Vorschaubilder angezeigt werden. Die Darstellung kann über den Button verändert werden. Im unte- rem Bereich befindet sich die Statusanzeige, welche über die aktuelle Operation in- formiert. Das Menü enthält die Einträge zum Anzeigen der Einstellungen, Laden und Löschen der Einträge und zum Beenden des Programms. Über die Auswahlbox kön- nen die angezeigten Elemente des ListViews gefiltert werden. Durch Auswählen eines 54 .NET CF Klient
Elements wird zu den Detailinformationen gewechselt. Im der SettingsForm werden die Einstellungen des Programms angezeigt. Dazu ge- hören die EditBoxen, in denen das Schema, der Host, der Port und der Pfad des Webservices angezeigt werden. Darunter befindet sich ein Button zum Testen der Verbindung zum Webservice durch senden einer HTTP-HEAD Anfrage an die URL. Zuvor werden die einzelnen Elemente der URL auf ihre Gültigkeit überprüft. Im un- teren Teil befinden sich die weiteren Einstellungen für den Netzwerk-Timeout und die Auswahlboxen für die Zwischenspeicherung und das Anzeigen der Vorschaubil- der. In der Statuszeile wird die IP-Adresse des Gerätes angezeigt. Über das Menü können die Einstellungen gespeichert oder verworfen werden.
Abbildung 25: .NET CF Klient Screenshots Das Hauptelement der DetailForm ist ein TabControl. Dadurch kann einfach zwi- schen den Ansichten gewechselt werden. Der PropertiesTab zeigt die Informationen des Bildes an. Die Schlagwörter werden in einer ListBox angezeigt. Im PictureTab wird das Bild entsprechend der verfügbaren Bildschirmbreite angezeigt. Über die Buttons unter dem Bild kann es vergrößert oder als Vollbild auf dem Bildschirm an- gezeigt werden. Anhand des Seitenverhältnisses des Bildes wird die Orientierung in der Vollbildansicht verändert. Für die Kartenansicht wird ebenfalls die Google Stat- ic-Maps API verwendet. Die Ansicht kann über die Buttons und die Richtungstasten verändert werden. Im Menü befindet sich der Eintrag zum Schließen der Form, zum Wechseln zum vorherigen und nächsten Bild der ausgewählten Collection und zum Editieren der Eigenschaften des Bildes. Für letzteres wird wird zum TabControl ein neuer Tab hinzugefügt. In diesem werden die veränderbaren Informationen ange- zeigt. Aus der Schlagwortliste kann der markierte Eintrag entfernt und ein neuer aus der EditBox hinzugefügt werden. Über die darunter liegenden Buttons werden die Veränderungen zum Webservice übertragen oder verworfen. Die Klassen und Typen für die Verbindung zum Webservice werden durch Hinzufü- gen des Webverweises automatisch erzeugt. Die Netzwerkoperationen werden je- weils in einem eigenen Thread ausgeführt. Während der Operationen werden die Steuerelemente der Form deaktiviert und eine Animation in der oberen rechten Ecke des Bildschirms angezeigt. Nach Beendigung werden die Elemente wieder aktiviert und das Ergebnis oder eine Fehlermeldung ausgegeben. Vor jeder Verbindung wird zum einem ein Netzwerk- und zum anderen ein Verbindungstest durchgeführt. Im ersten Test wird überprüft ob dem Gerät eine IP-Adresse zugewiesen wurde. Der Zweite sendet eine HTTP-HEAD-Anfrage an die verwendete URL und der empfan- .NET CF Klient 55 gene Statuscode überprüft. Die Methoden für die Tests befinden sich in der Klasse NetWorker, mit der auch die Bilder vom Webservice geladen werden. Die Einstellungen des Programms werden in einer XML-Datei im Programmordner gespeichert. Die Implementierung befindet sich in der Klasse Settings. Über definier- te Schlüssel können die Werte abgerufen und gesichert werden. Diese Implementie- rung war notwendig, da die Speicherung von Einstellungen in der Projektmappe auf der mobilen Plattform nicht zur Verfügung steht. Die PictureItem-Objekte werden in einem DataSet abgelegt, welches ebenfalls in einer XML-Datei gespeichert wird. Die Vorschaubilder werden als BMP-Dateien in dem Unterverzeichnis thumbs gesichert. Probleme ergaben sich bei der Zuordnung der Vorschaubilder zu den Listeneinträgen. Die Bilder werden in einer separaten ImageList abgelegt. Diese wird dann als Eigen- schaft zum ListView hinzugefügt und in jedem ListViewItem die Eigenschaft Image- Index gesetzt. Da dieser nach dem Filtern nicht mehr übereinstimmt muss die Image- List erneut erstellt werden. [Sjoes03], [Stru05]
3.6 Android Klient Für die Erstellung des Klienten wurde das Android SDK 1.0 R1 für Windows ver- wendet. Als Entwicklungsumgebung wurde die Eclipse IDE Version 3.4.0 in Verbin- dung mit dem Android Development Tools 0.8.0 PlugIn genutzt. Dieses enthält viele Erweiterungen für die Entwicklung von Anwendungen. Dazu gehört das Erstellen des Projektes, der Ressourcenklasse und des Android Packages. Zusätzlich wird eine neue Perspektive hinzugefügt, mit der man auf das Dateisystem zugreifen und über den Dalvik Debug Monitor Service den internen Zustand der Anwendung überwa- chen kann. Neben dem Projektwizard, der die notwendigen Dateien einer Android- Anwendung erstellt, registriert sich noch der grafische Layouteditor. Weiterhin kann der Emulator mit dem aktuellen Projekt direkt gestartet werden.
Abbildung 26: Klassendiagramm Android Das Projekt ist in die drei Javapakete picturearchive.views, picturearchive.proxy und picturearchive.helper aufgeteilt. Die Klassen des Pakets views enthalten die Aktivitä- ten, die für die Anzeige der Bildschirme verantwortlich sind. Im Paket proxy befin- den sich die Klassen, die für die Verbindung zum Webservice benötigt werden, sowie die verwendeten Typen. Weitere Hilfsklassen für den Zugriff auf die Datenbank und 56 Android Klient die Klasse zum Sichern der Einstellungen befinden sich im Paket helper. Im Manifest der Anwendung sind neben den Aktivitäten die benötigten Rechte für den Zugriff auf das Netzwerk, für die Kartenansicht und zum Ändern der Bildschirmausrichtung de- finiert. Der größte Teil der Benutzeroberfläche wurde deklarativ in XML-Dateien de- finiert. Die in der Anwendung verwendeten Bilder befinden sich im Verzeichnis drawables. Nach dem Starten der Anwendung wird die MainView-Aktivität angezeigt. Diese ent- hält neben der Auswahlbox (Spinner) ein GridView Element, in dem die Vorschaubil- der und die Namen angezeigt werden. Die Einträge der beiden Elemente werden un- ter Zuhilfenahme eines ArrayAdapter hinzugefügt. Für die Anzeige der Vorschaubil- der wurde dieser in einer eigenen Klasse erweitert. Nach Auswahl einer Collection wird die Liste der Bilder erneut gefüllt. Durch Auswahl eines Eintrages wird die Pro- pertyView-Aktivität gestartet. Des weiteren sind die Methoden zum Laden der Liste und der Vorschaubilder aus dem Gerätespeicher oder vom Webservice implementiert. Über das Menü können die Einträge entfernt und erneut geladen, sowie die Einstel- lungen aufgerufen werden. Die Ansicht der Einstellungen teilt sich in drei Bereiche. Im ersten befinden sich vier EditText-Elemente zur Definition der Webserviceadresse. Darunter befindet sich ein Button zum Testen der URL. Dafür wird eine HTTP-HEAD-Anfrage gestartet und der Status der Antwort ausgewertet. Im danebenliegenden Textfeld wird das Ergebnis der Prüfung angezeigt. Im zweiten Bereich kann die Speicherung der Daten und die Anzeige der Vorschaubilder aktiviert und die Timeoutzeit der Netzwerkverbindung festgelegt werden. Der dritte Bereich dient zur Definition des Schlüssels für die Kar- tenansicht. Dieser wird für das MapView-Element benötigt. Die Ansicht der Eigenschaften des Bildes ist zweigeteilt. Beim ersten Aufruf werden die Eigenschaften in tabellarischer Form dargestellt. Über einen Schalter mit Status- anzeige (ToggleButton) kann zwischen der Anzeige- und der Editieransicht der Ei- genschaften umgeschaltet werden. Bei Aktivierung wird das Layout der Anzeigeta- belle versteckt und das Layout mit den editierbaren Elementen angezeigt. In diesem befinden sich EditText-Elemente für den Namen und die Collection des Bildes, sowie eine Liste mit den Schlagwörtern des Bildes. Diese können durch berühren entfernt werden. Über ein weiteres EditText-Element werden neuer Schlagwörter hinzugefügt. Der Speichern Button überträgt nur die veränderten Werte zum Webservice. Über zwei weitere Buttons kann zur Bild- und Kartenansicht gewechselt werden. Die PictureView-Aktivität lädt das der Breite des Bildschirm angepasste Bild vom Webservice. Durch einen Druck auf das Bild werden im unteren Bereich die Kon- trollelemente zum Vergrößern und Verkleinern des Bildes angezeigt. Weiterhin lässt sich der Bildausschnitt über Tasten- und Fingerbedienung verschieben. Über das Menü kann die Orientierung des Bildschirm um 90 Grad gedreht werden. In der Kartenansicht wird die Aufnahmeposition des Bildes in einer interaktiven Kar- te, dem MapView, angezeigt. Der Kartenausschnitt kann verschoben und der Aus- schnitt vergrößert und verkleinert werden. Android Klient 57
Abbildung 27: Android Klient Screenshots Das Standard Webservice Toolkit Axis wird von der Android-Plattform, aufgrund feh- lender RMI-Klassen der Apache Harmony Java SE-Implementierung nicht unter- stützt. Deshalb wird für die Verbindung zum Webservice die externe Bibliothek kSOAP241 genutzt. Diese Webservice-Klientbibliothek ist für eingeschränkte Java Umgebungen konzipiert. Sie enthält Klassen zur Erstellung und Serialisierung der SOAP-Nachrichten. Im Gegensatz zu den anderen beiden Klienten müssen die Ope- rationen und die Nachrichten selbst implementiert werden. Weiterhin muss aus den Quellen der Bibliothek eine eigene Verbindungsklasse erstellt werden, um die Timeout-Eigenschaft der Verbindung setzen zu können. Diese wird auch zum Laden der Bilder genutzt. Die Methoden dafür sind in der Klasse PictureArchiveProxy im- plementiert. Zum Laden der Daten vom Webservice wird ein eigener Thread erstellt und ein Wartedialog (ProgressDialog) auf dem Bildschirm angezeigt. Nach Beendi- gung der Operation oder im Fehlerfall wird der Handler-Mechanismus von Android verwendet. Dazu wird eine Nachricht an den Thread der Benutzeroberfläche gesen- det und dort auf diese reagiert. Zur Speicherung der Einstellungen der Anwendungen wird der vorhandene Mecha- nismus der Preferences, in denen sich Schlüssel-Wert-Paare speichern lassen, ge- nutzt. Die vom Webservice abgerufenen PictureItem-Objekte werden in einer SQLite Datenbank abgespeichert. Ein einfacher Zugriff wird durch die Klasse ItemAdapter ermöglicht. Diese führt die erforderlichen Operationen an der Datenbank zum Einfü- gen, Abrufen oder Löschen der Einträge aus. Die Vorschaubilder werden wie die Ein- stellungen in einem eigenem Unterordner der Anwendung als komprimierte JPEG- Bilder gesichert. [Gane08], [Hobb08]
3.7 Auswertung Die Programmierung der Klienten gestaltet sich sehr unterschiedlich. Die grafische Oberfläche wird über die Funktionen der Entwicklungsumgebungen oder mit den Werkzeugen des SDK erstellt. Teile des Quellcodes werden von der NetBeans IDE und Visual Studio .NET automatisch erzeugt. In Android wird die Oberfläche deklara- tiv beschrieben und benötigt keinen Quellcode. Der Proxy für den Webservicezugriff
41 http://ksoap2.sourceforge.net 58 Auswertung wird durch die Werkzeuge des Java ME und .NET Compact Framework SDK auto- matisch erstellt. Für die Android-Plattform muss dieser durch eine eigene Implemen- tierung bereitgestellt werden. Der Aufwand der Programmierung kann anhand der implementierten Lines of Code abgeschätzt werden:
Funktionalität GUI Proxy Summe Java ME 1326 540* 1346* 3212 .NETCF 2485 915* 360* 3760 Android 2695 - 687 3382 * automatisch generiert
Die Anzahl der benötigten Zeilen liegt bei allen Plattformen nah beieinander. Der Java ME-Klient benötigt nur die Hälfte der Quellcodezeilen für die gleiche Funktionalität. Der automatisch generierte Proxy benötigt allerdings nochmals die gleiche Anzahlt an Quellcodezeilen, da er neben den Operationen auch die Daten- strukturen der SOAP-Nachrichten enthält. Die restlichen Zeilen werden durch den GUI-Designer automatisch erstellt. Der .NET CF-Klient benötigt für den Proxy die wenigsten Codezeilen, da das .NET Compact Framework die Funktionen für den Webservicezugriff enthält und die Da- tentypen deklarativ beschreibt. Die Funktionalität der Anwendung erfordert den größten Anteil. Der Quellcode der Oberfläche wird automatisch vom Designer er- stellt. In Android wird die Oberfläche im Layout Designer erstellt und deklarativ in XML- Dateien abgelegt. Die Funktionen des Webserviceproxy benötigen die durchschnittli- che Anzahl Quellcodezeilen und nutzt die kSOAP2-Bibliothek für die Erzeugung der SOAP-Nachrichten. Die meisten Zeilen werden von der Implementierung der Funk- tionen benötigt. Abgesehen von den Anwendungsmodellen der Plattformen ist der Implementierungs- aufwand gleich. Sie besitzen alle speziellen Eigenschaften, die bei der Entwicklung beachtet werden müssen. Für die Plattformen werden passende Werkzeuge bereitgestellt die sich in vorhande- ne Entwicklungsumgebungen integrieren und die Anwendungsentwicklung unter- stützten. Die NetBeans IDE ist mit dem Mobility Pack die optimale Entwicklungs- umgebung für Anwendungen der Java ME. Sie unterstützt mehrere Zielplattformen und enthält umfangreiche Werkzeuge für die Erstellung von mobilen Klienten. Die Integration des Windows Mobile SDK in Visual Studio .NET bietet eine einheitliche Umgebung für die Erstellung von .NET Anwendungen. Sie ist zusätzlich für die Ent- wicklung von Anwendungen für intelligente Geräte, wie Pocket PC, geeignet. Das Android-PlugIn fügt neue Projektarten und Ansichten der Entwicklungsumgebung Eclipse hinzu. Die Kombination der Werkzeuge und Entwicklungsumgebungen ist für die jeweilige Plattform zugeschnitten. Die Referenzimplementierung kann auf allen vorgestellten Plattformen im vollen Umfang umgesetzt werden. Entscheidend für die Auswahl der Plattform ist das End- gerät auf dem der Klient ausgeführt werden soll. Ausblick 59
4 Ausblick Derzeit sind sehr verschiedene Trends zu beobachten. Die (aktuellen) Basissysteme entwickeln sich zu offenen Systemen und unterstützen fremde Plattformen. So hat Nokia angekündigt Symbian in eine offene mobile Platt- form umzuwandeln. Gemeinsam mit anderen Partnern soll die Symbian Foundation gegründet werden, um eine einheitliche Plattform für Mobiltelefone als Open Source System zu veröffentlichen. [Pich08] Symbian OS Anwendungen und Programme der Java Micro Edition können auf Windows Mobile Geräten ausgeführt werden. [Pant07], [Wigl05] Das .NET Compact Framework wird auf die Symbian Systeme portiert. [Sieg06] Ein weiterer Trend sind mobile Plattformen auf Basis des Linux Betriebssystems, zu denen auch Android zählt. Diese offenen Plattformen basieren auf lizenzfreier Soft- ware und beschreiben den gesamten Aufbau des Systems. Sie bieten eine Ausfüh- rungsumgebung und ein funktionales Framework an. Die individuellen Anpassungen der Plattformen ermöglichen die Unterstützung für neue Hardware und die Entwick- lung freier Software mit neuartigen Funktionen. Sie werden durch sinkende Kosten für Datenübertragungen und die Unterstützung neuer Funkschnittstellen mit hoher Bandbreite zur vermehrten Nutzung von mobilen Diensten führen. In Zukunft wird die Vielfalt der mobilen Plattformen wachsen. Ob sich diese Vielfäl- tigkeit durchsetzen kann, wird sich zeigen. 60
Literaturverzeichnis [BIT07] BITKOM - Bundesverband Informationswirtschaft, Telekommunikation und neue Medien e.V., Mehr als 100 Millionen Mobilfunkanschlüsse in Deutschland, 2007, http://www.bitkom.org/de/presse/49914_44673.aspx [Born08] Bornstein, D., Dalvik Virtual Machine Internals, 2008, http://sites.google.com/site/io/dalvik-vm-internals [Brad08] Brady, P., Android Anatomy and Physiology, 2008, http://sites.google.com/site/io/anatomy--physiology-of-an-android [Brey06] Breymann, U.; Mosemann, H., Java ME: Anwendungsentwicklung für Handys, PDA und Co., 2006 [Cond08] Conder, S., Android: A Brief Introduction, 2008, http://www.developer.com/open/article.php/10930_3763991 [Elgi05] Elgin, B., Google Buys Android for Its Mobile Arsenal, 2005, http://www.businessweek.com/technology/content/aug2005/tc20050817 _0949_tc024.htm [Fox03] Fox, D.; Box, J., Building Solutions with the Microsoft .NET Compact Framework: Architecture and Best Practices for Mobile Development, 2003 [Gane08] Ganesan, G., Android Tutorial, 2008, http://geeth.ganesan.googlepages.com/android-tutorial [Ghos02] Ghosh, S., J2ME Record Management Store, 2002, http://www.ibm.com/developerworks/library/wi-rms/ [Gigu02] Giguere, E., Understanding J2ME Application Models, 2002, http://developers.sun.com/mobility/midp/articles/models/ [Gigu02a] Giguere, E., The Importance of the Mobile Information Device Profile (MIDP), 2002, http://www.ericgiguere.com/articles/importance-of- midp.html [Gigu03] Giguere, E., Using Threads in J2ME Applications Using Threads in J2ME Applications, 2003, http://developers.sun.com/mobility/midp/articles/threading2/ [Goog08] Google, Google Android, 2008, http://code.google.com/android [Hase08] Haseman, C., Android Essentials, 2008 [Hobb08] Hobbs, Using threads and ProgressDialog, 2008, http://www.helloandroid.com/node/243 [Hopk07] Hopkins, B., The Java ME GUI APIs at a Glance, 2007, http://developers.sun.com/mobility/midp/articles/guiapis/ [Huebn08] Hübner, K.; Böger, H., Google Android, 2008, http://www.de.capgemini-sdm.com/web4archiv/objects/download/pdf/1/ sdm_pub_javamagazin_huebner_boeger_mit_titel.pdf [JSR030] Java Community Process, JSR-30 J2ME Connected Limited Device Configuration, 2000, http://jcp.org/en/jsr/detail?id=30 61
[JSR036] Java Community Process, JSR-36 J2ME Connected Device Configuration (CDC) 1.0 a Specification, 2002, http://jcp.org/en/jsr/detail?id=36 [JSR037] Java Community Process, JSR-37 Mobile Information Device Profile for the J2ME Platform (MIDP), 2000, http://jcp.org/en/jsr/detail?id=37 [JSR075] Java Community Process, JSR-75 PDA Optional Packages for the J2ME Platform, 2004, http://jcp.org/en/jsr/detail?id=75 [JSR082] Java Community Process, JSR-82 Java APIs for Bluetooth, 2006, http://jcp.org/en/jsr/detail?id=82 [JSR118] Java Community Process, JSR-118 Mobile Information Device Profile 2.0, 2006, http://jcp.org/en/jsr/detail?id=118 [JSR135] Java Community Process, JSR-135 Mobile Media API, 2006, http://jcp.org/en/jsr/detail?id=135 [JSR139] Java Community Process, JSR-139 J2ME Connected Limited Device Configuration (CLDC) 1.1, 2003, http://jcp.org/en/jsr/detail?id=139 [JSR172] Java Community Process, JSR-172 J2ME Web Services Specification, 2004, [JSR195] Java Community Process, JSR-195 Information Module Profile, 2003, http://jcp.org/en/jsr/detail?id=195 [JSR242] Java Community Process, JSR-242 Digital Set Top Box Profile, 2007, http://jcp.org/en/jsr/detail?id=242 [Knud03] Knudsen, J., Understanding MIDP 2.0's Security Architecture, 2003, http://developers.sun.com/mobility/midp/articles/permissions/ [Krol02] Kroll, M.; Haustein, S., MIDP Programming with J2ME, 2002 [Kull04] Kull, Matthias, J2ME Security, 2004, http://www.gruntz.ch/courses/sem/ws04/J2MEsecurity.pdf [Mahm01] Mahmoud, Q., J2ME APIs: Which APIs come from the J2SE Platform?, 2001, http://developers.sun.com/mobility/midp/articles/api/ [Mahm03] Mahmoud, Q., The J2ME Mobile Media API, 2003, http://developers.sun.com/mobility/midp/articles/mmapioverview/ [Mahm03a] Mahmoud, Q., J2ME Low-Level Network Programming with MIDP 2.0, 2003, http://developers.sun.com/mobility/midp/articles/midp2network/ [Mare05] Marejka, R., Learning Path: MIDlet Life Cycle, 2005, http://developers.sun.com/mobility/learn/midp/lifecycle/ [Maso08] Mason, S.; Korolev, E., Native and Java ME Development on Symbian OS, 2008, http://developer.symbian.com/main/downloads/papers/Native_And_Jav a_ME_Dev_On_SymbianOS_%20v1.1.pdf [Maue09] Mauerer, J., Mobile Anwendungen mit dem .NET Compact Framework 2.0, 2009, http://msdn.microsoft.com/de-de/library/bb979155.aspx [Micr03] Microsoft Corporation, ADO.NET - Datenbankzugriff unter .NET, 2003, http://msdn.microsoft.com/de-de/library/bb979090.aspx [Morr07] Morris, Ben, The Symbian OS Architecture Sourcebook, 2007 [Morr08] Morrill, D., Inside the Android Application Framework, 2008, http://sites.google.com/site/io/inside-the-android-application-framework [Murp09] Murphy, M., The Busy Coder's Guide to Android Development, 2009 62
[Orti03] Ortiz, C., The Generic Connection Framework, 2003, http://developers.sun.com/mobility/midp/articles/genericframework/ [Orti06a] Ortiz, C., Externalizing Resources - Persisting Images in RMS, 2006, http://developers.sun.com/mobility/midp/ttips/imagesinrms/ [Orti07] Ortiz, C., A Survey of Java ME Today (Update), 2007, http://developers.sun.com/mobility/getstart/articles/survey/ [Pant05] Panther, R., Programmieren mit dem. net Compact Framework: Pocket PC-Smartphone-Handheld, 2005 [Pant07] Panteleyev, P., Java ME on Windows Mobile, 2007, http://weblogs.java.net/blog/peterp/archive/2007/10/java_me_on_wind. html [Pich08] Pichler, T., Symbian wird offene Handy-Plattform , 2008, http://www.pressetext.de/pte.mc?pte=080624021 [Prin08] Printemps, G., Deep inside Android, the Google-led open source mobile platform, 2008, http://www.openexpo.ch/fileadmin/documents/2008Zuerich/Slides/33_P rintemps.pdf [Rubi03] Rubin, E.; Yates, R., Microsoft. NET Compact Framework: Kick Start, 2003 [Salm05] Salmre, I., Writing Mobile Code: Essential Software Engineering for Building Mobile Applications, 2005 [Scha08] Schatter, A., Einblick in Google Android, 2008, http://www.infoweek.ch/uece/handys/articles/160068/ [Schm06] Schmatz, K.D., Java Micro Edition, 2006 [Schw04] Schwab, G., Recording and Playing Sound with the Waveform Audio Interface, 2004, http://msdn.microsoft.com/en-us/library/aa446573.aspx [SDT08] Spectrum Data Technologies, A Spectrum White Paper: Thoughts on Google Android, 2008, http://www.spectrumdt.com/GoogleAndroidDevelopment.htm [Sieg06] Siegemund, F.; Sugar, R.; Gefflaut, A.; Megen, F., Porting the .NET Compact Framework to Symbian Phones, 2006, http://www.jot.fm/issues/issue_2006_04/article4/ [Sjoes03] Sjöström, A., Manage XML Using .NET Compact Framework, 2003, http://msdn.microsoft.com/en-us/library/aa446526.aspx [Stru05] Struys, M., Developing Multithreaded Applications for the .NET Compact Framework, 2005, http://msdn.microsoft.com/de- de/library/bb979570.aspx [Sun00] Sun Microsystems Inc., J2ME Building Blocks for Mobile Devices, White Paper on KVM and the Connected Limited Device Configuration, 2000, http://java.sun.com/products/cldc/wp/KVMwp.pdf [Sun00a] Sun Microsystems, Inc, K Virtual Machine (KVM), 2000, http://java.sun.com/products/cldc/wp/ [Sun08] Sun Microsystems Inc., Java ME Technology, 2008, http://java.sun.com/ javame/technology/index.jsp 63
[Talu06] Talukder, A.; Yavagal, R., Mobile Computing, 2006 [Wigl03] Wigley, A.; Wheelwright, S., Microsoft .NET Compact Framework (Core Reference), 2003 [Wigl05] Wigley, A., Migrating Symbian OS Applications to Windows Mobile- based Smartphones , 2005, http://msdn.microsoft.com/en- us/library/aa454903.aspx [Wigl07] Wigley, A.; Foot, P.; Moth, D., Microsoft Mobile Development Handbook, 2007 [Will04] Willers, M., Die .NET Common Language Runtime, 2004, http://msdn.microsoft.com/de-de/library/bb979570.aspx [Yang07] Yang, B.; Zheng, P.; Ni, L.M., Professional Microsoft Smartphone Programming, 2007 64
Abbildungsverzeichnis Abbildung 1: Struktur eines mobilen Gerätes [Talu06]...... 5 Abbildung 2: Java ME in der Java Plattform [Sun08]...... 10 Abbildung 3: CLDC Architektur [Brey06]...... 12 Abbildung 4: MIDP LCDUI Klassen [Krol02]...... 15 Abbildung 5: RMS Struktur [Ghos02]...... 17 Abbildung 6: Mobile Media API Architektur [Mahm03]...... 18 Abbildung 7: Generic Connection Framework [Orti03]...... 19 Abbildung 8: 2-Phasen Byte-Code-Verifikation in CLDC [Schm06]...... 20 Abbildung 9: NetBeans IDE mit Mobility Pack...... 22 Abbildung 10: .NET Compact Framework Architektur [Wigl03]...... 24 Abbildung 11: ADO.NET DataSet Struktur [Micr03]...... 29 Abbildung 12: Visual Studio IDE...... 31 Abbildung 13: Architektur [Goog08]...... 34 Abbildung 14: Interaktion der Anwendungskomponenten [Huebn08]...... 37 Abbildung 15: Lebenszyklus einer Android Aktivität [Goog08]...... 39 Abbildung 16: Hierarchie von Layout und View [Goog08]...... 40 Abbildung 17: Beispiel eines XML-Layouts...... 41 Abbildung 18: Eclipse mit Android Developer Tools...... 45 Abbildung 19: Konzept...... 48 Abbildung 20: Anwendungsfalldiagramm...... 48 Abbildung 21: Klassendiagramm PictureArchive...... 49 Abbildung 22: Klassendiagramm Java ME Klient...... 51 Abbildung 23: Java ME Klient Screenshots...... 52 Abbildung 24: Klassendiagramm .NET CF Klient...... 53 Abbildung 25: .NET CF Klient Screenshots...... 54 Abbildung 26: Klassendiagramm Android...... 55 Abbildung 27: Android Klient Screenshots...... 57 65
Abkürzungsverzeichnis .NET CF .NET Compact Framework AAC Advanced Audio Coding AAPT Android Asset Packaging Tool ADT Android Developer Tools AIDL Android Interface Definition Language AMR Adaptive Multi-Rate AMS Application Management Software API Application Programming Interface APK Android Package AWT Abstract Window Toolkit CDC Connected Device Configuration CIL Common Intermediate Language CLDC Connected Limited Device Configuration CLI Common Language Infrastructure CLR Common Language Runtime COM Component Object Model DAC Dynamic Adaptive Compilation Dalvik VM Dalvik Virtual Machine DDMS Dalvik Debug Manager Service DHCP Dynamic Host Configuration Protocol DRDF Device Family Reference Design DTMF Dual-tone multi-frequency DVB-H Digital Video Broadcasting for Handhelds GCF Generic Connection Framework GPL General Public License GPRS General Packet Radio Service GSM Global System for Mobile Communications GUI Graphical User Interface HTTP Hypertext Transfer Protocol HTTPS Hypertext Transfer Protocol Secure IMP Information Module Profile IPC Inter Process Communication J2ME Java Plattform 2 Micro Edition JAD Java Application Descriptor JAR Java Archiv Java ME Java Micro Edition JCP Java Community Process JNI Java Native Interface JPEG Joint Photographic Experts Group JSR Java Specification Request JTWI Java Technology for Wireless Industry JVM Java Virtual Machine KVM Kilo-Byte Virtual Machine LCDUI Lowest Common Denominator User Interface MIDP Mobile Information Device Profile MIME Multipurpose Internet Mail Extensions MMAPI Mobile Media API MP3 MPEG-1 Audio Layer 3 66
MPEG Moving Picture Experts Group MSIL Microsoft Intermediate Language OEM Original Equipment Manufacturer OTA Over-The-Air PAL Platform Adaption Layer PDA Personal Digital Assistent PNG Portable Network Graphics RAM Random Access Memory RDA Remote Data Access RMI Remote Method Invocation RMS Record Management System ROM Read Only Memory RPC Remote Procedure Call SDK Software Development Kit SMS Short Message Service SQL Structured Query Language SSL Secure Socket Layer UMTS Universal Mobile Telecommunications System URI Uniform Resource Identifier URL Uniform Resource Locator VES Virtual Execution System VMD Visual Mobile Designer WLAN Wireless Local Area Network WSDL Web Service Description Language XML eXtensible Markup Language Selbständigkeitserklärung
Ich erkläre, dass ich die vorliegende Arbeit selbständig, unter Angabe aller Zitate und nur unter Verwendung der angegebenen Literatur und Hilfsmittel angefertigt habe.
Dresden, den 13. Februar 2009