Thesis - netzprofis.de

Werbung
Bachelor Thesis
zur Erlangung des akademischen Grades
Bachelor of Science (B.Sc.)
an der
Fachhochschule Dortmund
im Fachbereich Informatik
im Studiengang Praktische Informatik
Entwicklung einer Applikation für mobile Endgeräte
mit Anbindung an bestehende Server-Software
Auswahl einer Entwicklungsplattform und
Sportwetten-Prototyps auf Basis von Android
Autor:
Marco Alexander Schmitz
Email:
[email protected]
Matrikel-Nr.:
7040521
Erstprüfer:
Prof. Dr. Johannes Ecke-Schüth
Zweitprüfer:
Prof. Dr. Sabine Sachweh
Abgabe am:
14.09.2009
Realisierung
eines
Inhaltsverzeichnis
Inhaltsverzeichnis
1
2
Einleitung ......................................................................................................................... 1
1.1
Motivation................................................................................................................ 1
1.2
Hintergrund .............................................................................................................. 1
1.3
Vorgehen .................................................................................................................. 2
Wahl einer geeigneten Entwicklungsplattform ............................................................... 3
2.1
2.1.1
Übersicht der Java-Plattformen ....................................................................... 3
2.1.2
Architektur ....................................................................................................... 4
2.1.3
Softwareentwicklung ....................................................................................... 5
2.1.4
Alternative GUI Frameworks .......................................................................... 10
2.1.5
Zusammenfassung und Bewertung................................................................ 16
2.2
Apple iPhone .......................................................................................................... 17
2.2.1
Produktlinie .................................................................................................... 17
2.2.2
Betriebssystem ............................................................................................... 18
2.2.3
iTunes und Alternativen ................................................................................. 19
2.2.4
Softwareentwicklung ..................................................................................... 20
2.2.5
Zusammenfassung und Bewertung................................................................ 21
2.3
Google Android ...................................................................................................... 22
2.3.1
Google Inc. ..................................................................................................... 22
2.3.2
Android........................................................................................................... 23
2.3.3
Open Handset Alliance ................................................................................... 24
2.3.4
Android Developer Challenge ........................................................................ 27
2.3.5
Zusammenfassung und Bewertung................................................................ 29
2.4
3
Java Platform, Micro Edition .................................................................................... 3
Gegenüberstellung und Bewertung der Plattformen ............................................ 30
Android im Detail ........................................................................................................... 32
3.1
Architektur ............................................................................................................. 32
3.1.1
Applications .................................................................................................... 33
3.1.2
Application Framework .................................................................................. 33
3.1.3
Libraries .......................................................................................................... 34
3.1.4
Android Runtime ............................................................................................ 35
3.1.5
Linux Kernel .................................................................................................... 36
III
Inhaltsverzeichnis
4
3.2
Software Development Kit ..................................................................................... 37
3.3
Entwicklungswerkzeuge ......................................................................................... 38
3.3.1
Android Emulator ........................................................................................... 38
3.3.2
Hierarchy Viewer ............................................................................................ 40
3.3.3
Draw 9-patch .................................................................................................. 40
3.3.4
Dalvik Debug Monitor Service ........................................................................ 42
3.3.5
Android Debug Bridge .................................................................................... 43
3.3.6
Android Asset Packaging Tool ........................................................................ 43
3.3.7
Android Interface Description Language........................................................ 44
3.3.8
sqlite3 ............................................................................................................. 44
3.3.9
mksdcard ........................................................................................................ 45
3.3.10
Dalvik Cross-Compiler .................................................................................... 45
3.3.11
UI/Application Exerciser Monkey ................................................................... 46
3.3.12
activitycreator ................................................................................................ 46
3.4
Android Development Toolkit Plug-In für Eclipse .................................................. 47
3.5
Endgeräte mit Android-Betriebssystem ................................................................. 48
3.5.1
T-Mobile G1 – HTC Dream.............................................................................. 48
3.5.2
Vodafone G2 – HTC Magic.............................................................................. 50
3.5.3
HTC Hero ........................................................................................................ 51
3.5.4
Kogan Agora ................................................................................................... 52
3.5.5
Lenovo OPhone .............................................................................................. 53
3.5.6
Samsung I7500 Galaxy.................................................................................... 54
Entwicklung eines Anmeldeformulars ........................................................................... 55
4.1
Anforderungen ....................................................................................................... 55
4.2
Erstellung von einem Android Project ................................................................... 55
4.2.1
Manifest ......................................................................................................... 56
4.2.2
Strings-Ressource ........................................................................................... 57
4.2.3
Layout ............................................................................................................. 58
4.2.4
Ressourcen in Java ......................................................................................... 59
4.2.5
Activity ............................................................................................................ 59
4.2.6
Lebenszyklus einer Activity ............................................................................ 60
4.3
Umsetzung ............................................................................................................. 62
4.3.1
Layout ............................................................................................................. 62
4.3.2
Benutzerereignisse ......................................................................................... 63
IV
Inhaltsverzeichnis
4.3.3
Modaler Fehlerdialog ..................................................................................... 64
4.3.4
Kontextmenü.................................................................................................. 65
4.3.5
Persistenz ....................................................................................................... 66
4.4
4.4.1
Hintergrundgrafik ........................................................................................... 67
4.4.2
Button mit NinePatch-Grafik .......................................................................... 68
4.5
5
Anpassung der GUI-Komponenten ........................................................................ 67
Internationalisierung .............................................................................................. 69
4.5.1
Strings-Ressource ........................................................................................... 69
4.5.2
Umschalten der Ländereinstellung ................................................................ 71
Entwicklung eines Sportwetten-Prototyps .................................................................... 72
5.1
Sportwetten ........................................................................................................... 72
5.2
Grafische Benutzerschnittstelle ............................................................................. 73
5.2.1
Aktivitätsdiagramm ........................................................................................ 73
5.2.2
Listen .............................................................................................................. 74
5.2.3
Dynamisches Layout mit Java ........................................................................ 75
5.3
Integration des Frameworks log4j ......................................................................... 77
5.3.1
log4J ............................................................................................................... 77
5.3.2
Probleme bei der Integration ......................................................................... 77
5.3.3
Logging mit Android ....................................................................................... 78
5.3.4
Problemlösungen ........................................................................................... 78
5.4
Integration der bestehenden Klasse EntityStore ................................................... 81
5.4.1
Serialisierung und Deserialisierung ................................................................ 81
5.4.2
Fehlende Klassen............................................................................................ 82
5.4.3
Core-Library.................................................................................................... 83
5.5
Dependency Viewer ............................................................................................... 84
5.5.1
Classycle ......................................................................................................... 85
5.5.2
Ant .................................................................................................................. 85
5.5.3
Verarbeitung der XML-Datei .......................................................................... 86
5.5.4
Algorithmus .................................................................................................... 86
5.5.5
Ausgabe als HTML .......................................................................................... 86
5.5.6
DependencyViewer als Ant-Task.................................................................... 87
5.6
Serveranbindung .................................................................................................... 88
5.6.1
Servlet ............................................................................................................ 89
5.6.2
Client .............................................................................................................. 90
V
Inhaltsverzeichnis
6
Fazit ................................................................................................................................ 91
Abkürzungsverzeichnis ........................................................................................................... 93
Abbildungsverzeichnis ............................................................................................................ 95
Tabellenverzeichnis ................................................................................................................ 97
Literaturverzeichnis ................................................................................................................ 99
Eidesstattliche Erklärung ...................................................................................................... 106
VI
1 Einleitung
1 Einleitung
Dieses Kapitel bietet eine Einleitung in das Thema „Entwicklung einer Applikation für
mobile Endgeräte mit Anbindung an bestehende Server-Software – Auswahl einer
Entwicklungsplattform und Realisierung eines Sportwetten-Prototyps auf Basis von
Android“. Im ersten Abschnitt wird die Entwicklung einer solchen Applikation motiviert.
Anschließend wird der Hintergrund dieser Arbeit geschildert. Im letzen Abschnitt wird das
Vorgehen dieser Arbeit beschrieben.
1.1 Motivation
„Spiele, Routenplaner, Wetterinfos, Trinkgeldrechner und so weiter – stündlich steigt die
Zahl der Anwendungen, die man aufs Handy laden kann. Offiziell heißen die Programme
mobile Applikationen, umgangssprachlich werden sie Apps genannt. In Apples App Store
gibt es davon die größte Auswahl: mehr als 60.000 Anwendungen. Die Amerikaner haben
im Geschäft mit den mobilen Applikationen die Nase vorn – im Juli 2009, ein Jahr nach
Eröffnung des App Stores, wurde bereits die Marke von 1,5 Milliarden Downloads
durchbrochen. […] Der Geschäftserfolg des App Stores hat die Wettbewerber auf den Plan
gerufen: Nokias Ovi Store ist im Mai 2009 an den Start gegangen. […] Googles Pendant, der
Android Market, bietet sogar über 5.000 Programme für diverse Mobiltelefon-Modelle an.
[…] Blackberry betreibt die App World, und vor kurzem hat Sony Ericsson die Pforten der
PayNow Arena für Spiele, Musik und anderes eröffnet. Und die Zahl der appfähigen
Mobiltelefone wächst stetig.“ 1
1.2 Hintergrund
In dem Zeitraum 1.5.2008 bis 13.7.2009 hat der Autor freiberuflich für die Firma netzprofis
GmbH & Co. KG in Dortmund gearbeitet 2. Das mittelständische Unternehmen, unter der
Geschäftsführung von Dipl.-Inf. Thomas Louis und Dipl.-Inf. Marcel Gleis, ist spezialisiert auf
die Entwicklung von Individualsoftware für Unternehmen. Für die Firma Booxware GmbH,
mit Geschäftssitz in Karlsruhe, wird seit vielen Jahren komplexe Software im Bereich der
Sportwetten entwickelt, getestet und gepflegt. Der Autor wurde damit beauftragt, diese in
der Programmiersprache Java geschriebene Software auf mobile Endgeräte nachzubilden
und dabei möglichst viele Quelltexte zu adaptieren. Nach sorgfältiger Recherche und
Evaluation fiel die gemeinsame Wahl auf die Entwicklungsplattform Android.
1
2
[Davi09]
Fortan wird die Firma netzprofis GmbH & Co. KG als Auftragsgeber bezeichnet.
1
1 Einleitung
1.3 Vorgehen
Am Anfang steht die Wahl einer geeigneten Entwicklungsplatform für mobile Endgeräte. Es
werden Java ME, iPhone und Android einzeln vorgestellt und bewertet. Am Ende des
Kapitels erfolgen eine Gegenüberstellung und die Entscheidungsfindung.
In Kapitel 3 wird Android detailliert betrachtet. Hierbei stehen die die Architektur, das SDK
und die Entwicklungswerkzeuge im Mittelpunkt. Der letzte Abschnitt gilt den Endgeräten
mit Android-Betriebssystem samt kritischen Stimmen.
Kapitel 4 beinhaltet die exemplarische Entwicklung einer Anmeldeformular-Applikation mit
Android. Nach der Zusammenfassung der Anforderungen wird gezeigt, wie mit der Eclipse
ein Projekt erstellt und die Anforderungen umgesetzt werden. Anschließend werden GUIKomponenten angepasst und die Applikation internationalisiert.
Kapitel 5 erklärt Sportwetten im Allgemeinen und die Realisierung des Prototyps. Aufgrund
der Schwierigkeiten bei der Integration bestehender Java-Bibliotheken in Android wird ein
spezielles Werkzeug zur Darstellung von Abhängigkeitsbäumen entwickelt und vorgestellt.
Im Anschluss daran wird der Prototyp an bestehende Server-Software angebunden.
Im letzen Kapitel folgt das Fazit, in dem die Umsetzung bewertet wird und gewonnene
Erkenntnisse und Erfahrungen geschildert werden.
2
2 Wahl einer geeigneten Entwicklungsplattform
2 Wahl einer geeigneten Entwicklungsplattform
In diesem Kapitel wird nach einer geeigneten Entwicklungsplattform für mobile Endgeräte
gesucht. Oberstes Ziel ist es, möglichst viele Java-Quelltexte der bereits existierenden
Software aus dem Bereich der Sportwetten zu adaptieren. Zur Wahl dabei stehen:
Plattform
Java ME
Apple iPhone
Google Android
Beschreibung
seit vielen Jahren etablierter Standard im Java-Umfeld
modernes Smartphone mit ansprechender Oberfläche
Betriebssystem und Softwareplattform für Smartphones
und Mobiltelefone
Tab. 1: Übersicht Entwicklungsplattformen
In den ersten drei Unterkapiteln werden die Plattformen einzeln vorgestellt und bewertet.
Am Ende des Kapitels erfolgen eine Gegenüberstellung und die Auswahl der geeigneten
Entwicklungsplattform.
2.1 Java Platform, Micro Edition
In diesem Unterkapitel wird die Java Platform, Micro Edition vorgestellt. Im ersten Schritt
wird diese unter den anderen existierenden Java-Plattformen eingeordnet und die
Architektur erläutert. Anschließend wird untersucht, wie Software mit Java ME entwickelt
wird, welche Werkzeuge existieren und welche zusätzlichen oder alternativen Frameworks
benötigt werden. Im letzen Abschnitt erfolgt eine Zusammenfassung und Bewertung.
2.1.1
Übersicht der Java-Plattformen
„Auf der weltweit größten Java-Entwicklerkonferenz, der JavaOne in San Francisco stellte
Alan Baratz, Präsident von Java-Software, 1999 die neue Plattformarchitektur vor [sic!]. Die
etablierte Java 2 Technologie wurde aufgrund der Komplexität und des wachsenden
Marktes in drei Ausbaustufen unterteilt: die Java 2 Enterprise Edition (J2EE) für den Einsatz
auf Serversystemen, die Java 2 Standard Edition (J2SE) für normale Desktoprechner und die
Java 2 Micro Edition, welche speziell auf Nicht-PC-Geräte zugeschnitten ist.“ 3 Folgende
Abbildung zeigt die unterschiedlichen Java-Plattformen:
3
[Karb05, S. 9]
3
2 Wahl einer geeigneten Entwicklungsplattform
Abb. 1: Die unterschiedlichen Java-Plattformen [Java09]
Die Java-Plattformen Java Platform, Enterprise Edition (Java EE) 4 und Java Platform,
Standard Edition (Java SE) 5 können für mobile Endgeräte nicht verwendet werden, da diese
aufgrund der Batterietechnologie bezüglich Prozessorleistung und Speicherausstattung
eingeschränkt sind. Ebenfalls ist die Größe des Displays beschränkt, da der Trend zu immer
kleineren Geräten geht.
2.1.2
Architektur
Um der ungeheuren Vielfalt an technischen Möglichkeiten gerecht zu werden besteht die
Plattform Java Platform, Micro Edition (Java ME) 6 aus einer Vielzahl Spezifikationen und
Technologien, die speziell für mobile Endgeräte zugeschnitten sind. Die Architektur basiert
auf Konfigurationen, die von Profilen erweitert werden. Hinzu kommen optionale Pakete
für Spezialfälle wie XML-Parser oder Datenbankanbindungen. Es lassen sich zwei
Konfigurationen unterscheiden: 7
■ Connected Device Configuration (CDC)
■ Connected Limited Device Configuration (CLDC)
4
Wurde früher auch als Java 2 Enterprise Edition (J2EE) bezeichnet.
Wurde früher auch als Java 2 Standard Edition (J2SE) bezeichnet.
6
Wurde früher auch als Java 2 Micro Edition (J2ME) bezeichnet.
7
Vgl. [BrMo06, S. 19 f.]
5
4
2 Wahl einer geeigneten Entwicklungsplattform
CDC und CLDC
Das CDC ist für leistungsfähige High-End PDAs und eingebettete Geräte ausgelegt. Hier wird
von mindestens 2 MB Speicher ausgegangen. Enthalten ist eine Java Virtual Machine (JVM),
ein minimierter Satz von Klassenbibliotheken, das Foundation Profile und das Personal
Profile. 8
Das CLDC wurde für einfache PDAs und Mobiltelefone mit langsamen Prozessoren und
wenig Speicherplatz entwickelt. Die Kilobyte Virtual Machine (KVM) arbeitet mit 128 KB bis
512 KB Speicher und ist als Untermenge der normalen JVM zu verstehen. Zusammen mit
dem Mobile Information Device Profile (MIDP) stellt es folgende benötigte Kernfunktionen
für mobile Anwendungen zur Verfügung: 9
■
■
■
■
Netzwerkanbindung
Lokale Datenhaltung
Benutzerschnittstelle
Anwendungsmanagement
Einschränkungen
Die Klassenbibliotheken von CLDC und KVM sind im Vergleich zu J2SE reduziert und auch im
Funktionsumfang eingeschränkt. Zusammengefasst sind die folgenden Änderungen: 10
■ Bei der Oberklasse Object wurden die Methoden clone und finalize entfernt.
■ Die Fehlerbehandlung ist insofern vereinfacht, als dass ein Error-Objekt zurückgegeben
wird.
■ Der ClassLoader kann nicht durch einen eigenen ausgetauscht werden.
■ Die Klasse ThreadGroup wurde entfernt.
■ Für Klassen, die von Thread erben, gibt es die Methode setDaemon nicht mehr, so dass
keine Daemon Threads mehr möglich sind.
■ Es werden asynchrone Exceptions nicht unterstützt.
■ Es erfolgt immer eine Verifizierung des Bytecodes von Java-Programmen.
2.1.3
Softwareentwicklung
In diesem Unterkapitel werden unterschiedliche Werkzeuge vorgestellt, die für die
Entwicklung einer Software mit Java ME benötigt werden. Anschließend werden die APIs
für die grafische Benutzeroberfläche vorgestellt.
Sun Java Wireless Toolkit for CLDC (WTK)
Um eine Java ME Anwendung, MIDlet genannt, für die Konfiguration CLDC und das Profil
MIDP zu entwickeln, wird neben einem Texteditor und einem installiertem Java SE SDK
noch das Sun Java Wireless Toolkit for CLDC (WTK) benötigt. Dieses aus mehreren
8
Vgl. [BrMo06, S. 19 f.]
[BrMo06, S. 20]
10
Vgl. [BrMo06, S. 36 f.]
9
5
2 Wahl einer geeigneten Entwicklungsplattform
Komponenten bestehende Werkzeug bietet die Möglichkeit Projekte anzulegen und zu
laden, die Quelltexte zu kompilieren und den Bytecode zu verifizieren. Um das MIDlet zu
testen sind verschiedene Emulatoren enthalten. Folgende Abbildung zeigt die
verschiedenen Emulatoren vom WTK 2.2:
Abb. 2: Verschiedenen Emulatoren vom WTK 2.2 [Karb05, S. 52]
Das erzeugte MIDlet besteht aus zwei Dateien, dem Java Archive (JAR) mit den
komprimierten Kompilaten, Bibliotheken und Metadaten sowie dem zugehörigen Java
Application Descriptor (JAD), einer Textdatei mit Informationen über Konfiguration, Profil,
Name und Icon der Anwendung und einer Referenz auf das JAR. Zum Ausführen der
Anwendung auf einem Mobiltelefon müssen beide Dateien mittels Bluetooth oder USBDatenkabel übertragen und anschließend installiert werden. Alternativ besteht die
Möglichkeit die Dateien auf einen Webserver zu legen und vom Mobiltelefon aus
herunterzuladen. Dies wird als Over The Air (OTA) Provisioning bezeichnet. 11
Obfuscator
Es besteht die Möglichkeit einen Obfuscator in den Entwicklungsprozess zu integrieren.
Dabei handelt es sich um ein Programm, welches den erzeugten Bytecode verschleiert.
Dadurch wird das MIDlet vor Revere Engineering geschützt und der Code minimiert. Denn
im Bytecode sind immer noch viele Informationen wie Zeilennummern oder die Namen von
Variablen, Methoden und Parameter enthalten. Diese werden vom Obfuscator durch
sinnlose und meistens kürzere Zeichenketten ersetzt. Die unter die GNU General Public
License (GPL) gestellte Software ProGuard ist ein typischer Vertreter und im Java ME
Umfeld weit verbreitet. 12 13
EclipseME
Für die integrierte Entwicklungsumgebung (IDE) Eclipse existiert das Plug-In namens
EclipseME, welches im Juni 2009 umgetauft wurde in Eclipse Mobile Tools for Java (MTJ). 14
Dadurch ist es sowohl möglich MIDlets innerhalb einer IDE zu programmieren, zu starten als
11
Vgl. [Uebe]
Vgl. [BrMo06, S. 26]
13
Vgl. [Lafo09]
14
Vgl. [Sete09]
12
6
2 Wahl einer geeigneten Entwicklungsplattform
auch auszuliefern. Hervorzuheben ist die Möglichkeit des Debuggings, welche den
Benutzern von WTK nicht zugänglich ist. Zusätzlich werden folgende Toolkits anderer
Hersteller, bestehend aus Konfigurationen, Profilen, optionalen Paketen und Emulatoren,
E
15
unterstützt:
■
■
■
■
■
■
■
MOTODEV 16 SDK for JavaME
Nokia SDK S40/S60
Sony Ericsson J2ME SDK
Sprint PCS Wireless Toolkit for Java
Siemens SMTK for Series 60
MPowerPlayer
MicroEmulator
MPowerPlayer
MPowerPlayer ist zwar aus technischer Sicht ein freier Java ME Emulator, aber das
Kerngeschäft des Unternehmens mplayit besteht darin, der Industrie für Videospiele ein
Webportal bereitzustellen, in dem Videospiele in beschränkter Version für Mobiltelefone
getestet werden können. Mittels der Technologien Java-Applet
Java Applet und Java Web Start wird der
Emulator in Webseiten integriert bzw. mit nur einem Klick ausgeführt. 17 Folgende
Abbildung zeigt MPowerPlayer im Webbrowser Firefox mit dem Spiel Guitar Hero:
Abb. 3:: MPowerPlayer im Webbrowser Firefox mit dem Spiel Guitar Hero [M
Mpla09a]
15
Vgl. [Dsdp]
MOTODEV ist das Motorola Developer Network
17
Vgl. [Mpla09b]
16
7
2 Wahl einer geeigneten Entwicklungsplattform
MicroEmulator
Das Projekt MicroEmulator wurde im Jahr 2001 gegründet und ist unter die GNU Lesser
General Public License (LGPL) gestellt. Es ist eine reine Java SE-Implementierung von Java
ME. Der Emulator wird mittels der Techniken Java Web Start und Java-Applet für
Webseiten bereitgestellt. Dem Entwickler wird direkter Zugriff auf das Subversion (SVN)
Projektarchiv gewährt und Möglichkeiten für automatisierte Lasttests bereitgestellt. Die
Oberfläche des Emulators ist mittels Skins beliebig gestaltbar, so dass das Aussehen
jeglicher Mobiltelefone angenommen werden kann. Es ist anzumerken, dass MPowerPlayer
auf MicroEmulator basiert. 18
Graphical User Interface
Damit der Entwickler auf das Display des Mobiltelefons zugreifen kann, werden vom MIDP
sowohl ein Low- als auch ein High-Level API zur Verfügung gestellt. Unter der Angabe von
Koordinaten können mit dem Low-Level API Pixel, Kreise, Linien oder Vierecke gezeichnet
werden. 19 Das High-Level API hingegen enthält vordefinierte Elemente wie:
■
■
■
■
■
■
■
Textausgabefeld
Checkbox
Radiobutton
Liste
Form
Fortschrittsbalken 20
Texteingabefeld.
Das Aussehen und das Bedienungskonzept hängen dabei vom jeweiligen Mobiltelefon bzw.
von der Implementierung des Herstellers ab. Der Entwickler hat hier kaum Möglichkeiten
das Aussehen maßgeblich zu beeinflussen. Dadurch ist eine mit dem High-Level API
entwickeltes Graphical User Interface (GUI) sehr leicht zu portieren. 21 Folgende Abbildung
zeigt „die Klassenhierarchie für darstellbare Elemente des MIDP“: 22
18
Vgl. [Micr09]
Vgl. [SzRö06]
20
Fortschrittsbalken werden im Java ME Umfeld Gauge genannt
21
Vgl. [Karb05, S. 24]
22
[SzRö06]
19
8
2 Wahl einer geeigneten Entwicklungsplattform
Abb. 4: Klassenhierarchie für darstellbare Elemente des MIDP [SzRö06
SzRö06]
Auch wenn vieles für den Einsatz vom High-Level
Level API spricht, so es ist nicht von der Hand zu
weisen, dass das API bereits zehn Jahre alt ist. Seitdem hat sich das Design von
Anwendungen, Betriebssystemen,
Betriebssystemen Webseiten und Mobiltelefonen stark gewandelt. Um
dem
m Geist der Zeit zu entsprechen, sollte eine moderne Anwendung für Mobiltelefone vor
allem visuell ansprechend sein.
sein
Gemäß dem Motto „ein Bild sagt mehr als tausend Worte“ wird nun ein typisches MIDlet
dargestellt, entwickelt mit dem
de High-Level
Level API von Java ME, bestehend aus:
■ einer Form namens Sign in
■ zwei Texteingabefeldern mit den Bezeichnungen LoginID und Password
■ zwei Buttons mit den Beschriftungen Cancel und Login
Folgende Abbildung zeigt exemplarisch ein Login MIDlet:
Abb. 5: Login MIDlet [Logi08]
9
2 Wahl einer geeigneten Entwicklungsplattform
2.1.4
Alternative GUI Frameworks
Es wurden viele unabhängige Frameworks entwickelt, mit dem Ziel, Java ME um eine
moderne Oberfläche zu erweitern und Anwendungen für Mobiltelefone optisch viel
ansprechender zu gestalten. Einige dieser GUI Frameworks werden nun vorgestellt und
näher betrachtet.
Micro Window Toolkit
Das Open Source Framework Micro Window Toolkit (MWT) wurde speziell für kleine Geräte
entwickelt. Inspiriert wurde es von Java SE Frameworks Abstract Window Toolkit (AWT),
Swing und Standard Widget Toolkit (SWT). Es bietet die Möglichkeit bestehende
Komponenten anzupassen. Eine Stärke besteht darin, grafische Schriftarten (Bitmap Fonts)
zu benutzen, für deren Erstellung das Werkzeug MicroFont-Maker bereitgestellt wird. Das
Framework ist mit 10 KB extrem klein. Dieses Framework wird nicht weiter gepflegt, denn
das letze Update stammte von Anfang 2007. Es liegen Dokumentationen in Form mehrerer
kleiner Tutorials und als Javadoc vor.
Folgende Abbildung zeigt mehrere Demo-MIDlets: 23
Abb. 6: Demo-MIDlets vom Micro Window Toolkit [Micr07b]
Aufgrund dieser Screenshots erscheint das Framework für seriöse Anwendungen wenig
geeignet. Die Oberfläche wirkt sehr verspielt und die Demos konnten nicht überzeugen, da
sie wie auf der Webseite vorgestellt, nur ein Viertel des Displays ausfüllen.
23
Vgl. [Micr07a]
10
2 Wahl einer geeigneten Entwicklungsplattform
Light-Weight Visual Component Library
Das Framework Light-Weight Visual Component Library (LwVCL) ist für die
Softwareplattformen .NET, Java SE, Java ME und Standard Widget Toolkit (SWT) ausgelegt.
Die Grafikbibliothek umfasst rund 30 Komponenten, darunter Button, Label, Panel, aber
auch komplexere wie Grid und Tree. 24 Es existieren zwei verschiedene Arten von Lizenzen,
zum einen die GNU General Public License (GPL) und zum anderen eine kommerzielle mit
folgender Staffelung: 25
Lizenz
Corporate
Corporate Unlimited
Individual
Beschreibung
480 EUR pro Entwickler einer Firma
1.999 EUR für sämtliche Entwickler einer Firma
29 EUR für eine Privatperson
Tab. 2: Kommerzielle Lizenzen für LwVCL
Bis auf den Java ME-Branch liegen für die Plattformen Dokumentationen in Form von
Tutorial, How-To, FAQ und API vor. Mit 160 KB für Java und 200 KB für .NET ist die
Bibliothek relativ klein.
Folgende Abbildung zeigt mehrere Screenshots vom Demo-MIDlet:
Abb. 7: Demo-MIDlet von der Light-Weight Visual Component Library [Vish06c]
Für Entwickler, die eine Anwendung für mehrere Plattformen entwickeln möchten, hat
dieses Framework seine Vorteile. Auch für Java ME bringt es den Vorteil zahlreicher
Komponenten mit sich. Optisch wirkt LwVCL überarbeitungsbedürftig. Transitionen zum
Ein- und Ausblenden von Screens sowie Transparenzeffekte wie Schatten fehlen gänzlich.
24
25
Vgl. [Vish06a]
Vgl. [Vish06b]
11
2 Wahl einer geeigneten Entwicklungsplattform
TagsMe
Das kommerzielle Framework TagsMe stammt von dem spanischen Unternehmen Media
Delivery Technologies SL. Vertrieben wird das Framework auf der Homepage vom
Unternehmen als Bestandteil der Entwicklungsplattform TagsMe GUI, die auf der IDE
NetBeans basiert. Entwickelt werden Anwendungen für Mobiltelefone in XML und einer
einfachen Script Sprache. Auch wenn aus technischer Sicht Java ME-MIDlets erzeugt
werden, so bleibt dies vor dem Entwickler verborgen bzw. hat dieser keinerlei Möglichkeit
eigene Java-Quelltexte zu integrieren. Die IDE TagsMe GUI bietet neben typischer
Funktionalitäten wie Syntax Highlighting, Autoformatter, Code Completion und XML
Validierung mittels XSD auch die bereits besprochene Java ME-Implementierung
MicroEmulator, in dem die Anwendung bereits beim Editieren betrachtet werden kann.
Folgende Abbildung zeigt die Entwicklungsplattform TagsMe GUI: 26 27
Abb. 8: Entwicklungsplattform TagsMe GUI [Tags09b]
Das Framework beinhaltet ein weit gefächertes Spektrum an GUI-Komponenten. Hinzu
kommen zahlreiche Animationen, mit denen Komponenten oder ganze Screens beliebig
ein- und ausgeblendet werden können. Vervollständigt wird die Funktionsvielfalt von
Audiounterstützung und Mehrsprachigkeit. Die Dokumentation ist ebenso umfassend wie
gut verständlich und wird von Video-Tutorials abgerundet. Folgende Abbildung zeigt
mehrere Screenshots der Demo-Anwendung:
26
27
Vgl. [Tags09a]
Vgl. [Tags09b]
12
2 Wahl einer geeigneten Entwicklungsplattform
Abb. 9: Demo-Anwendung von TagsMe [Tags09c]
Für Entwickler, die eine Anwendung für Mobiltelefone auf Basis von XML entwickeln
wollen, ist dieses Framework samt Entwicklungsumgebung geeignet. Der Funktionsumfang
ist vielfältig, und auch optisch ist TagsMe ansprechend. Die fehlende Java-Anbindung ist
dafür verantwortlich, dass dieses Framework nicht eingesetzt werden kann.
13
2 Wahl einer geeigneten Entwicklungsplattform
Lightweight User Interface Toolkit
Das Lightweight User Interface Toolkit (LWUIT) von Sun Microsystems wurde ursprünglich
von einem Angestellten für ein internes Projekt entwickelt. Nachdem das Toolkit stark
gewachsen war und sich immer größerer Beliebtheit erfreute, wurde es als Open Source
freigegeben. Das Framework ist stark an die Grafikbibliothek Swing angelehnt. Es werden
folgende GUI-Komponenten angeboten:
■
■
■
■
■
■
■
■
Form
Label
Button
RadioButton
ButtonGroup
ComboBox
TextArea
TabbedPane
Die Anordnung der Komponenten erfolgt durch folgende Layout-Manager, die bereits durch
Swing bekannt sind:
■
■
■
■
■
BorderLayout
BoxLayout
FlowLayout
GridLayout
GroupLayout
Das optische Erscheinungsbild aller Komponenten kann bezüglich Farbe, Bild, Schriftart,
Transparenz, Rahmen, Margin und Padding frei gestaltet werden. Hinzu kommen viele
Effekte, Animationen und Transitionen, mit denen Komponenten und Screens ein- und
ausgeblendet werden können. Die Unterstützung von Logging, Mehrsprachigkeit und 3D
runden das Framework ab.
Für die Trennung von Quellcode und Design wurden Themes eingeführt. Dabei beinhaltet
ein Theme die Gestaltungsvorschriften aller Komponenten. Ein Theme wird in einer
Ressource gespeichert, welche komfortabel mit dem LWUIT Resource Editor editiert
werden kann. Folgende Abbildung zeigt den LWUIT Resource Editor: 28
28
Vgl. [Sun09]
14
2 Wahl einer geeigneten Entwicklungsplattform
Abb. 10: LWUIT Resource Editor [Knud08]
Innerhalb einer Anwendung kann der Benutzer das Theme umschalten.
Folgende Abbildung zeigt mehrere Screenshots der Demo Anwendung, einmal mit Star
Theme und einmal den gleichen Screen mit Java Theme:
Abb. 11: Demo Anwendung von LWUIT [Knud08]
Durch die Anlehnung an Swing wird dem Entwickler der Einstieg erleichtert. Die
Auslagerung in Ressourcen hat den Vorteil, dass hier eine Arbeitsteilung zwischen
Entwickler und Designer stattfinden kann. Inhaltlich wirkt das Framework vollständig, da
alle üblichen Komponenten bereitgestellt werden. Die Dokumentation ist mit Javadocs und
einem über 120 Seiten langem E-Book ebenso umfangreich. Einziges Manko an dem
Framework ist die Performance. Die Reaktionsgeschwindigkeit ist spürbar träge, und die
Transitionen und Animationen könnten flüssiger sein.
15
2 Wahl einer geeigneten Entwicklungsplattform
2.1.5
Zusammenfassung und Bewertung
Die Java Platform, Micro Edition wurde vor rund 10 Jahren entwickelt und stellt ein
reduziertes Java, spezialisiert für mobile Endgeräte, dar. Die technische Vielfalt dieser
Geräte wird dabei auf eine Architektur von Konfigurationen und Profilen abgebildet. Für die
Entwicklung einer grafischen Oberfläche werden zwei APIs bereitgestellt, mit denen der
Entwickler entweder eigene pixelgenaue Zeichenroutinen implementiert oder vordefinierte
Elemente benutzt, deren Aussehen vom jeweiligen Mobiltelefon abhängen. Um diesen
Zwiespalt zu überbrücken wurden diverse GUI Frameworks untersucht, wobei sich LWUIT
von Sun Microsystems als klarer Favorit herauskristallisiert hat. Nichts desto trotz bleibt das
Problem bestehen, dass die Mobiltelefone stark unterschiedliche Displays bezüglich
Auflösung, Farbtiefe und Seitenausrichtung wie Hochformat oder Querformat besitzen. Der
Entwickler muss dafür Sorge tragen, dass die Anwendung für alle unterschiedlichen
Gerätekategorien optisch angepasst und getestet wird. Hinzu kommt, dass Java ME ein
reduziertes Java ist, wodurch der Entwickler gewissen Einschränkungen bei der
Wiederverwendung bereits existierender Java-Quelltexte unterliegt.
16
2 Wahl einer geeigneten Entwicklungsplattform
2.2 Apple iPhone
In diesem Unterkapitel wird das Apple iPhone vorgestellt. Im ersten Schritt wird die
Produktlinie rund um das iPhone erläutert. Es folgt eine Betrachtung des Betriebssystems
und der Software iTunes samt Alternativen. Anschließend wird untersucht, wie
Anwendungen für das iPhone entwickelt und ausgeliefert werden. Im letzen Abschnitt
erfolgt eine Zusammenfassung und Bewertung.
2.2.1
Produktlinie
Es existieren mehrere verschiedene Smartphones, die unter dem Oberbegriff iPhone
zusammengefasst werden. Diese werden nun im Detail vorgestellt.
iPhone
Anfang Januar 2007 wurde das iPhone von Apple Inc. angekündigt. Ende Juni 2007 wurde es
in den Markt eingeführt, zuerst in den USA und später weltweit. Es handelt sich dabei um
ein Smartphone mit 3,5 Zoll Multi-Touch-Display 29 im Breitbildformat und einer Auflösung
von 480 x 320 Pixeln. Der Prozessor ist ein Samsung 32-bit RISC ARM 1176JZ(F)-S mit einer
Taktfrequenz von 630 MHz, der auf 412 MHz untertaktet ist um den Stromverbrauch zu
reduzieren. Es unterstützt den Mobilfunkstandard Quadband GSM der zweiten Generation
(2G) und bietet Schnittstellen für WLAN (IEEE 802.11b/g), USB 2.0 und Bluetooth 2.0. Die 2
Megapixel Digitalkamera verfügt über Geotagging, womit Bildern anhand von GPSPositionsbestimmung geographische Informationen zugeordnet werden. Dadurch können
beispielsweise Sehenswürdigkeiten auf einem Foto automatisch identifiziert werden 30.
Weiterhin ist ein Kopfhörer mit einem Frequenzbereich von 20 Hz bis 20 KHz samt
integriertem Mikrofon im Lieferumfang enthalten.
iPhone 3G
Seit Juli 2008 steht das iPhone 3G zum freien Verkauf. Die Neuerung hierbei waren Assisted
GPS zur satellitenunterstützen Positionsbestimmung und UMTS, dem Mobilfunkstandard
der dritten Generation (3G). Darüber hinaus wurde der Akku gegen einen leichteren und
leistungsstärkeren ausgetauscht.
iPod touch
Das iPod touch wurde Anfang September 2007 von Apple Inc. vorgestellt und besteht
weitgehend aus den gleichen Komponenten wie dem iPhone. Entfernt wurden lediglich die
Kamera und das Telefon sowie einige Softwarekomponenten. Funktional reiht sich das iPod
touch nahtlos in die Reihe der MP3-Player von Apple ein, wie z.B. iPod classic, iPod mini,
iPod nano und iPod shuffle. Optisch und kinästhetisch gleicht es dem iPhone.
29
Multi-Touch erlaubt die Bedienung mit mehreren Fingern gleichzeitig. Dadurch sind beispielsweise
Vergrößern und Drehen von Bildern möglich.
30
Vgl. [Wiki09b]
17
2 Wahl einer geeigneten Entwicklungsplattform
iPhone 3GS
Mitte Juni 2009 kam das iPhone 3GS in den Handel. Bei diesem Modell wurde die
Graphikleistung verbessert und mit 256 MB DRAM mehr Hauptspeicher verbaut. Der ARM
Cortex-A8 Prozessor mit einer Taktfrequenz von 833 MHz ist auf 600 MHz untertaktet. Die 3
Megapixel Digitalvideokamera ist mit automatischem Fokus, Weißabgleich und Belichtung
ausgestattet. Neu hinzugekommen sind der Beschleunigungssensor Nike+ und ein digitaler
Kompass. Wiederum wurde die Kapazität des Akkus verbessert. 31 32 Folgende Abbildung
zeigt ein Apple iPhone 3G:
Abb. 12: Apple iPhone 3G [Appl09a]
2.2.2
Betriebssystem
Das Betriebssystem von iPhone, iPhone 3G, iPhone 3GS und iPod touch 33 wurde gleichfalls
von Apple Inc. entwickelt und wird als iPhone OS oder OS X iPhone bezeichnet. Genau wie
Mac OS X, von dem es abgeleitet wurde, benutzt es das unixähnliche Darwin als
Kernkomponente. Insgesamt benötigt das Betriebssystem weniger als 240 MB Speicher.
Das iPhone OS ist in vier Abstraktionsschichten aufgeteilt: 34
■ Core OS Layer
■ Core Services Layer
■ Media Layer
■ Cocoa Touch Layer
31
Vgl. [Wiki09c]
Vgl. [Tmob]
33
Fortan werden diese vier Geräte unter dem Begriff iPhone zusammengefasst.
34
Vgl. [Wiki09d]
32
18
2 Wahl einer geeigneten Entwicklungsplattform
2.2.3
iTunes und Alternativen
Um beispielsweise Lieder auf das iPhone zu laden, bedarf es der Software iTunes, die für
Mac OS X, Windows XP und Windows Vista frei erhältlich ist. Das Programm durchsucht
dafür die gesamte Festplatte des Rechners und synchronisiert den Datenbestand mit dem
iPhone. Hierfür werden die Daten temporär in ein kompatibles Format konvertiert. Auch ist
es damit möglich Musikstücke, Filme und Anwendungen beim iTunes Music Store käuflich
zu erwerben. Folgende Abbildung zeigt die Software iTunes:
Abb. 13: Apple iTunes [Appl09b]
Alternativen
Für Benutzer des Betriebssystems Linux, für die kein iTunes existiert, und für solche, die
andere Software einsetzen möchten, existieren folgende Freeware Alternativen: 35
Windows
dopisp
Ephpod
Floola
iPod shuffle DB Builder
iPod shuffle Manager
JakPod
Media Monkey
PoddoX
reTune
SharePod 3
Songbird
vPod
Winamp
Yamipod
Linux
Amarok
Banshee
Floola
GTKpod
Ipod shuffle DB Builder
JakPod
reTune
Songbird
Ymipod
Mac OS X
Floola
iPod shuffle DB Builder
JakPod
reTune
Songbird
Yamipod
Tab. 3: Freeware Alternativen zu iTunes
35
Vgl. [Oest07]
19
2 Wahl einer geeigneten Entwicklungsplattform
2.2.4
Softwareentwicklung
In diesem Unterkapitel wird untersucht wie für das iPhone Anwendungen entwickelt und
ausgeliefert werden. Da erst durch einen Hack bedingt überhaupt ein SDK bereitgestellt
wurde, wird dieser kurz vorgestellt.
Jailbreaking mittels TIFF Exploit
Apple vertrat die Position, dass Webanwendungen, die im nativen iPhone Browser Safari
ausgeführt werden, den Drittanbietern genügen. „Nachdem im Juli 2007 ein Hack publiziert
wurde, wie trotz der eingebauten Hürden, Anwendungen nativ auf dem Gerät ausgeführt
werden können, hat Apple kurze Zeit später die eigene Politik geändert […]“ 36 und ein
Software Development Kit (SDK) veröffentlicht. Die Technik, Software ohne kryptografische
Signatur von Apple auf dem iPhone nativ auszuführen, wird Jailbreaking genannt. Der Hack
wird als TIFF Exploit bezeichnet, da im Header des Grafikformats TIFF ein Offset auf eine
Stelle jenseits des physischen Dateiendes verweist, was unweigerlich zu einem
inkonsistenten Zustand im Betriebssystem führt. 37
iPhone SDK
Ende März 2008 erschien die erste Version vom iPhone SDK, mit dem Entwickler native
Anwendungen für das iPhone entwickeln konnten. Das 2 GB umfassende Paket kann von
registrierten Entwicklern kostenlos heruntergeladen werden. Die Installation setzt einen
Macintosh mit Mac OS X voraus. Die integrierte Entwicklungsumgebung (IDE) ist Xcode,
unter der auch Anwendungen für Macintosh entwickelt werden. Die Programmiersprache
ist Objective-C, einer Erweiterung der Programmiersprache C um objektorientierte
Konzepte. Neben der IDE werden noch ein Interface Builder, verschiedene Optimierungsund Debugging-Werkzeuge und ein iPhone Simulator mitgeliefert, so dass auf Hardware
verzichtet werden kann. 38 Das Framework setzt sich aus folgenden Teilen zusammen: 39
Bestandteil
Cocoa Touch 40
Media
Core Services
OS X Kernel
Beschreibung
Multi-Touch, Beschleunigungssensoren, Kamera
Audio, Video, Grafikformate, Animation, OpenGL
Netzwerk, SQLite-Datenbank, Threads
TCP/IP, Sockets, Dateisystem, Sicherheit
Tab. 4: Framework Bestandteile vom iPhone SDK
36
[Prin09, S.5]
Vgl. [Wiki09e]
38
Vgl. [Prin09, S.10]
39
Vgl. [Wiki09d]
40
Erweiterung des Frameworks Cocoa, mit dem Macintosh Anwendungen entwickelt werden
37
20
2 Wahl einer geeigneten Entwicklungsplattform
AppStore
Der AppStore ist die einzige Plattform, von der der Benutzer Anwendungen für das iPhone
herunterladen kann. Erreichbar ist der AppStore direkt vom iPhone aus oder mittels iTunes.
Möchte ein Entwickler seine Anwendung der breiten Masse verfügbar machen, so muss
dieser dem iPhone Developer Program beitreten. Dabei stehen das Standard Program und
das Enterprise Program zur Wahl. Das Standard Program kostet 99 USD jährlich und ist für
Entwickler von freien oder kommerziellen Anwendungen bestimmt. Apple verlangt weitere
30 Prozent vom Umsatz bei kommerziellen Anwendungen. Soll die Anwendung nicht über
den öffentlichen sondern über einen eigens dafür eingerichteten AppStore bereitgestellt
werden, so ist das Enterprise Program zu wählen, welches jährlich 299 USD kostet. 41 42
2.2.5
Zusammenfassung und Bewertung
Auch wenn sich das iPhone großer Beliebtheit erfreut, bereits über 10 Millionen mal
verkauft wurde und in 80 Ländern erhältlich ist 43, so sind rund 1.800 Euro für eine
adäquate Entwicklungsumgebung zu investieren. Der Betrag setzt sich aus zusammen aus:
■ Anschaffung iPhone 3G für ca. 600 Euro 44
■ Anschaffung iMac für ca. 1.100 Euro 45
■ Teilnahme am iPhone Developer Program – Standard Program für 99 USD
Die Kosten könnten durch folgende Einsparungen reduziert werden:
■ Einsatz der Software iPhone Simulator anstelle der iPhone Anschaffung
■ Einsatz einer Virtual Machine (VM) 46 mit Installation von Mac OS X anstelle der iMac
Anschaffung
Neben den wirtschaftlichen Faktoren stellt sich das unüberwindbare Problem der
Programmiersprache Objective-C. Diese ist unbedingt einzusetzen bei der Entwicklung einer
iPhone Anwendung. Da auf dem iPhone keine Java Virtual Machine (JVM) implementiert
wurde, ist es unmöglich die bestehenden Java-Quelltexte wiederzuverwenden. Dem Autor
ist auch kein einziges Konvertierungswerkzeug bekannt, mit dem Java-Quelltext zu
Objective-C-Quelltext umgewandelt werden kann.
41
Vgl. [http://developer.apple.com/iphone/program/]
Vgl. [Wiki09f]
43
Vgl. [Wiki09g]
44
Vgl. [Guen]
45
Vgl. [Appl09c]
46
Eine Virtual Machine (VM) ist ein aus Software bestehender virtueller Computer.
42
21
2 Wahl einer geeigneten Entwicklungsplattform
2.3 Google Android
In diesem Unterkapitel wird das Betriebssystem und die Softwareplattform Android
untersucht. Da Google maßgeblich für die Entwicklung verantwortlich ist, handelt der erste
Abschnitt vom Unternehmen und den Dienstleistungen. Es folgt eine nähere Betrachtung
der Open Handset Alliance, der auch eine tragende Rolle an Android zuteilwird.
Anschließend werden die Android Developer Challenge und exemplarisch drei Finalisten
samt Anwendungen vorgestellt. Im letzen Abschnitt erfolgt eine Zusammenfassung und
Bewertung.
2.3.1
Google Inc.
Der Name Google geht zurück auf den Mathematiker Edward Kasner, der der Zahl 10100 den
Namen googol verliehen hat. 47
Firmengeschichte
Nachdem sich 1995 Lawrence Edward Page und Sergei Brin an der Standford University
begegneten, konzipierten und entwickelten sie eine Internet-Suchmaschine, dem Vorläufer
von Google. Im September 1998 gründeten beide das Unternehmen Google Inc. in
Mountain View, Kalifornien, USA. Die Kombination der Suchmaschine mit kontextsensitiver
Werbung, Google AdSense genannt, brachte den wirtschaftlichen Durchbruch. Anfang
Januar 2009 zählten 24.400 Mitarbeiter zu dem Unternehmen mit einem Jahresumsatz von
21,8 Milliarden USD in 2008. 48 49
Dienstleistungen
Auch wenn das Kerngeschäft die Suche bleibt, so wurden viele weitere Softwarelösungen
finanziert. Zu den bekanntesten und wichtigsten zählen: 50
47
Vgl. [Wiki09h]
Vgl. [Wiki09h]
49
Vgl. [Wiki09i]
50
Vgl. [Wiki09i]
48
22
2 Wahl einer geeigneten Entwicklungsplattform
Dienstleistung
Google AdSense
Google Books
Google Chrome
Google Desktop Search
Google Earth
Google Groups
Google Calendar
Google Mail
Google Maps
Google Picasa
Google Scholar
Google Docs
Google Toolbar
Google Video
Beschreibung
Webbasierter Anbieter von inhaltsbezogene Werbeanzeigen
Webbasierte Volltextsuche über digitalisierte Bücher
Webbrowser für Windows, Linux und Mac OS X, der auf die
Rendering-Engine WebKit51 aufbaut
Suchprogramm für Windows, Linux und Mac OS X
Virtueller Globus für Windows, Linux und Mac OS X basierend
auf Satelliten- und Luftbildern
Webseite mit Usenet-Archiv und Schnittstelle zum Versenden
von Artikeln
Webbasierter Terminkalender, der mit anderen Benutzern
geteilt werden kann
Webbasierter Email-Dienst mit 1 GB Postfachgröße
Webbasierte Land- und Straßenkarte mit Volltextsuche und
Routenplaner
Webbasierte Bildbearbeitung und -verwaltung
Webbasierte
Volltextsuche
über
wissenschaftliche
Publikationen
Webbasierte Textverarbeitung und Tabellenkalkulation
Symbolleiste für die Webbrowser Firefox und Internet Explorer,
integriert Dienste oder stellt Verknüpfungen zu diesen her
Webportal zum Suchen, Ansehen und Einstellen von
Filmsequenzen
Tab. 5: Dienstleistungen von Google Inc.
2.3.2
Android
Eine der ersten Nachrichten über Android besagt, dass Google im August 2005 das 22
Monate alte Startup-Unternehmen Android Inc. aufgekauft hat. 52
„Mit großem Interesse wurde am 5. November 2007 eine Ankündigung durch die USamerikanische Internetfirma Google und weitere [sic] 33 Unternehmen der Open Handset
Alliance verfolgt: der Start von Android.“ 53
„Am 12. November 2007 veröffentlichte Google eine Vorabversion des Android-SDK [sic!],
einer Entwicklungsumgebung für die Android-Plattform. Die überwiegend positive Reaktion
darauf verdeutlicht, wie groß das Interesse des Marktes und der Entwickler an einer
offenen Plattform für mobile Computer mittlerweile ist.“ 54
Android ist eine kostenlose Softwareplattform für mobile Endgeräte und basiert auf dem
Betriebssystem Linux. Große Teile der Android Plattform sind unter die Open-SourceLizenzen Apache 2.0 und GNU Public License Version 2 (GPLv2) gestellt worden. Durch eine
51
Die Rendering-Engine WebKit wird auch im Browser Safari von Apple Inc. eingesetzt.
Vgl. [Elgi05]
53
[MoKo09, S. 1]
54
[BePa09, S. V]
52
23
2 Wahl einer geeigneten Entwicklungsplattform
Gleichberechtigung der Anwendungen wird kein Unterschied zwischen den vorinstallierten
und denen von Drittanbietern gemacht. Mit dem Android Software Development Kit (SDK)
werden Anwendungen in der Programmiersprache Java entwickelt. Für das Design der
graphischen Benutzeroberfläche (GUI) wird die Auszeichnungssprache Extensible Markup
Language (XML) verwendet. Rund ein Jahr lang mussten sich die Entwickler mit einem
Software-Emulator begnügen, da erst im Herbst 2008 das erste Android Smartphone
erschien. 55 56
2.3.3
Open Handset Alliance
„Am 5. November 2007 haben 34 Firmen unter Führung des Internetunternehmens Google
die Open Handset Alliance (OHA) gegründet. Etwa ein Jahr später, am 9. Dezember 2008,
sind weitere 14 Firmen der OHA beigetreten. Das OHA-Konsortium entwickelt gemeinsam
die Softwareplattform Android.“ 57 Die mittlerer weile 50 Mitglieder der OHA stammen aus
folgenden Geschäftsbereichen: 58
■
■
■
■
■
10 Mobilfunkbetreiber
13 Halbleiterfirmen
10 Endgerätehersteller
11 Softwarefirmen
6 Vermarktungsfirmen
(engl. Mobile Operators)
(engl. Semiconductor Companies)
(engl. Handset Manufacturers)
(engl. Software Companies)
(engl. Commercialization Companies)
Folgende Tabelle zeigt alle 50 Firmen der Open Handset Alliance:
55
Vgl. [MoKo09, S. 1 f.]
Vgl. [Andr]
57
[MoKo09, S.10]
58
Vgl. [Open]
56
24
2 Wahl einer geeigneten Entwicklungsplattform
Mobilfunkbetreiber
Halbleiterfirmen
Endgerätehersteller
Softwarefirmen
Tab. 6: Alle 50 Firmen der Open Handset Alliance [Open]
Vermarktungsfirmen
25
2 Wahl einer geeigneten Entwicklungsplattform
Mobilfunkbetreiber
„Es ist der Open Handset Alliance (OHA) gelungen, [sic] mit China Mobile, Vodafone sowie
Telefónica die drei (nach Kundenzahl) größten Mobilfunkbetreiber der Welt als Mitglieder
zu gewinnen […]. In Deutschland sind drei der vier Netzbetreiber direkt oder durch ihre
Muttergesellschaften in der OHA vertreten […].“ 59 Die Mitgliedschaft von
Mobilfunkbetreibern in der OHA ist deswegen wichtig, weil diese durch Subventionierung
der Endgeräte und attraktive Datentarife den Verkauf maßgeblich fördern können.
Halbleiterfirmen
Die Hardware, die von den Endgeräteherstellern für die Android Smartphones verbaut wird,
wird von den Halbleiterfirmen hergestellt. Besonders erwähnenswert sind: 60
Firma
Intel
nVidia
ARM
Texas Instruments
Beschreibung
weltweit führender Prozessorhersteller
einer der größten Entwickler von Grafikprozessoren
Designer für RISC-Prozessoren
einer der größten Hersteller von Digitalen Signalprozessoren (DSP)
Tab. 7: Bekannte Halbleiterfirmen der OHA
Endgerätehersteller
Bis auf den Marktführer Nokia sind folgende vier der fünf weltweit größten
Endgerätehersteller in der Open Handset Alliance vertreten: 61 Samsung, LG Electronics,
Motorola und Sony Ericsson. Erwähnenswert sind auch die Computerhersteller ASUSTeK
und Toshiba als auch der Navigationsgerätehersteller Garmin, die bisher keine
Mobilfunkgeräte entwickelt haben.
Softwarefirmen
Es ist bemerkenswert, dass Google die treibende Kraft hinter der OHA ist, und kein
Endgerätehersteller
oder
Mobilfunkbetreiber.
Auch
das
weltweit
größte
Internetauktionshaus eBay ist in der OHA vertreten, wobei die Rolle dem Autor bisher
unklar ist. Weitere nennenswerte Softwarehersteller sind: 62
Firma
Ascender Corporation
Nuance
PacketVideo (PV)
SONiVOX
Beschreibung
Hersteller von Schriftarten, insb. Droid Fonts für Android
Entwickler von Sprachsynthese und -erkennung
Integration von Multimedia auf mobile Endgeräte
Spezialist für Audiosysteme auf Mobilfunkgeräte
Tab. 8: Bekannte Softwarefirmen der OHA
59
[MoKo09, S.12]
Vgl. [MoKo09, S.14]
61
Vgl. [MoKo09, S. 10]
62
Vgl. [MoKo09, S. 13]
60
26
2 Wahl einer geeigneten Entwicklungsplattform
Vermarktungsfirmen
„Diese Firmen arbeiten mit den Netzbetreibern und Endgeräteherstellern zusammen, um
Software in eine Hardwarebasis zu integrieren und diese dann auf den Markt zu bringen.
Bei Firmen wie z.B. Noser Engineering, Teleca und Wind River Systems handelt es sich um
spezielle Zulieferer für die Endgerätegersteller und Netzbetreiber.“ 63
2.3.4
Android Developer Challenge
Die Android Developer Challenge (ADC) ist ein von Google ausgeschriebener Wettbewerb
um die innovativste Anwendung für das Android-Betriebssystem. Insgesamt 10 Millionen
USD wurden als Preisgelder ausgesetzt. Die Anmeldung fand zwischen Januar und April
2008 statt, wobei sich 1.788 Kandidaten qualifizierten. Darunter wurden 50 Kandidaten von
zahlreichen Preisrichtern im Mai 2008 ausgewählt. Sie erhielten je 25.000 USD um ihre
Anwendung weiterzuentwickeln. Im September 2008 wurden die Gewinner
bekanntgegeben. Je zehn Gewinner erhielten ein Preisgeld von 275.000 USD, weitere zehn
Finalisten gewannen 100.000 USD. 64
Im Mai 2009 wurde die Android Developer Challenge 2 (ADC 2) bekannt gegeben. Die
Anmeldung endet am 31. August 2009. Die Kandidaten müssen sich dabei für eine von zehn
Kategorien wie Erziehung, Spiele, Lifestyle und Reisen entscheiden. Voraussichtlich im
Oktober werden die Gewinner der ersten Runde bekanntgegeben, und rund einen Monat
später endet der Wettbewerb. Die Preisrichter sind diesmal alle Besitzer eines Android
Smartphones, die eine Anwendung zum Testen und Bewerten herunterladen können. Pro
Kategorie wird es drei Gewinner geben mit einer Preisstaffelung von 100.000 USD für den
ersten Platz, 50.000 USD für den zweiten Platz und 25.000 USD für den dritten Platz.
Zusätzlich gibt es ein Preisgeld unabhängig von den Kategorien mit einer Staffelung von
150.000 USD, 50.000 USD und 25.000 USD. 65
Es folgen nun exemplarisch drei Anwendungen der Android Developer Challenge 1 (ADC 1):
63
[MoKo09, S. 14]
Vgl. [Brow08]
65
Vgl. [Andr09a]
64
27
2 Wahl einer geeigneten Entwicklungsplattform
Compare Everywhere
Der Autor Jeffrey Sharkey gewann bei der ADC 1 mit seiner Anwendung Compare
Everywhere ein Preisgeld in Höhe von 275.000 USD-Dollar. Ziel der Anwendung ist es den
Barcode eines beliebigen Produktes zu fotografieren und den Preis zu vergleichen zu lassen.
Dem Anwender werden dann Kaufhäuser in seiner näheren Umgebung angezeigt, die das
Produkt im Sortiment haben. Folgende Abbildung zeigt die Android-Applikation Compare
Everywhere:
Abb. 14: Die Android-Applikation Compare Everywhere [Andr09b]
Cooking Capsules
Die Autoren Mary Ann Cotter aus San Francisco und Muthu Ramadoss aus Indien gewannen
bei der ADC 1 mit ihrer Anwendung Cooking Capsules ein Preisgeld in Höhe von 100.000
USD. Ziel der Anwendung ist es den Benutzer beim Kochen zu unterstützen. Kleinere
Kochvideos bieten Erklärungen und Inspirationen, Tools helfen beim Planen und Einkaufen
und zeigen Supermärkte in der näheren Umgebung an. Folgende Abbildung zeigt die
Android-Applikation Cooking Capsules:
Abb. 15: Die Android-Applikation Cooking Capsules [Andr09c]
28
2 Wahl einer geeigneten Entwicklungsplattform
Wikitude
Der Autor Philipp Breuss aus Salzburg in Österreich gewann bei der ADC 1 mit seiner
Anwendung Wikitude 25.000 USD. Die Anwendung informiert den Benutzer über
Sehenswürdigkeiten eines beliebigen Reiseziels oder seiner näheren Umgebung. Dabei
werden die textuellen Informationen, die aus Wikipedia und anderen Wikis extrahiert und
aufbereitet werden, in die Bildansicht der Digitalkamera eingeblendet. Folgende Abbildung
zeigt die Android-Applikation Wikitude:
Abb. 16: Die Android-Applikation Wikitude [Andr09d]
2.3.5
Zusammenfassung und Bewertung
Die Softwareplattform und das Betriebssystem Android wurde von Google und der Open
Handset Alliance erschaffen. Mit 50 namenhaften Firmen, die teilweise marktführend in
ihrem Sektor sind, deckt die Allianz alle Bereiche ab, die für ein Smartphone relevant sind:
Mobilfunk, Hardware, Software und Vermarktung. Android steht unter der Open-SourceLizenz und alle Quelltexte sind frei verfügbar. Durch zwei Wettbewerbe wurde dafür
gesorgt, dass innovative Anwendungen für die neue Plattform bereitstehen. Entwickelt
werden diese in Java und XML.
In diesem Kapitel wurden einleitend die verschiedenen Dienstleistungen und
Softwarelösungen von Google vorgestellt, da Android diese anbindet und bereitstellt.
Es wurde darauf verzichtet Smartphones mit Android-Betriebssystem vorzustellen, da
Android im Rahmen der Evaluation als reine Softwareplattform zu verstehen ist.
29
2 Wahl einer geeigneten Entwicklungsplattform
2.4 Gegenüberstellung und Bewertung der Plattformen
In diesem Unterkapitel werden die drei Plattformen miteinander verglichen und eine Wahl
getroffen.
Java Platform, Micro Edition
Die Java Platform, Micro Edition existiert bereits seit rund 10 Jahren, was insofern ein
großer Vorteil ist, da inzwischen ein Großteil der mobilen Endgeräte diese etablierte
Plattform unterstützen. Es existieren viele Emulatoren und Toolkits für die
unterschiedlichsten Mobiltelefone. Diese kommen zum Einsatz, wenn der Entwickler die
speziellen Eigenschaften eines Gerätes unterstützen möchte oder um die Anwendung für
das jeweilige Display zu optimieren. Das API bietet zwar einige GUI-Komponenten an, aber
das Aussehen hängt vom jeweiligen Endgerät ab. Ein weiterer Nachteil ist die
Programmiersprache, ein reduziertes Java. Bei der Adaption existierender Java-Quelltexte
stellt dies ein großes Problem dar, da der Entwickler den Code extra anpassen und
portieren muss.
Apple iPhone
Die Plattform Apple iPhone besteht aus einem SDK für vier sehr ähnliche Zielgeräte.
Software für diese technisch sehr innovativen Geräte zu entwickeln stellt einen großen Reiz
dar. Einzig auf dem Betriebssystem Mac OS X und mit der Programmiersprache Objective-C
ist dies möglich. Um die fertige Software bereitzustellen zahlt der Entwickler mindestens 99
USD für die Teilnahme am Developer Program, und zusätzlich, sollte die Software
kommerziell sein, weitere 30 Prozent vom Umsatz.
Google Android
Mindestens genau so reizvoll ist Android, eine kostenlose Softwareplattform der OHA unter
Führung von Google. Diese Allianz stellt die treibende Kraft von Android dar, da die 50
Firmen aus den Bereichen Mobilfunk, Hardware, Software und Vermarktung, für den Erfolg
maßgeblich verantwortlich sind. Zusätzlich „erschließt sich Android die Innovationskraft der
Open-Source-Community“ 66 , da das auf Linux basierende Betriebssystem, die
umfangreichen Bibliotheken, die Laufzeitumgebung und die mobilen Schlüsselapplikationen
unter die Open-Source-Lizenz gestellt wurden. 67 Ein weiterer Vorteil ist die
Gleichberechtigung der Anwendungen. Dadurch können neue Anwendungen geschaffen
werden, die der Benutzer gegen bestehende austauschen kann. Vermutlich enthält Android
noch Fehler, da es sehr neu ist. Es ist jedoch anzunehmen, dass durch die Wahl von Java als
Programmiersprache die große Community dabei helfen wird, diese zu finden und zu
beseitigen.
Gegenüberstellung
Folgende Tabelle stellt die Fakten der drei Entwicklungsplattformen gegenüber:
66
67
[MoKo09, S. 1]
Vgl. [MoKo09, S. 1]
30
2 Wahl einer geeigneten Entwicklungsplattform
Java Platform,
Micro Edition
1999
alle Java ME
fähigen
Mobiltelefone
Erscheinungsjahr
Zielgeräte
Zielgerätbetriebssystem
Programmiersprache
Entwicklungsumgebung
Entwicklungsbetriebssystem
Voraussetzungen
Lizenz
Vorteile
Nachteile
beliebig
reduziertes Java
Eclipse mit MTJ
Windows,
Linux, Mac OS X
Java SE und
WTK
Open Source
viele Millionen
Endgeräte mit
Java ME
ausgestattet
GUI abhängig
vom Endgerät,
reduziertes Java
Apple iPhone
Google Android
2007
iPhone,
iPhone 3G,
iPod touch,
iPhone 3GS
iPhone OS
Objective-C
Xcode
Mac OS X
2007
Smartphones mit
Android-Betriebssystem
iPhone SDK
kommerziell
technisch
innovativ
nicht
kompatibel
zu Java
Android (Linux)
Java
Eclipse mit ADT 68
Windows, Linux,
Mac OS X
Java SE und Android SDK
Open Source
technisch innovativ,
Google und OTA sehr
erfolgsversprechend,
Gleichberechtigung der
Anwendungen
Vermutlich
Kinderkrankheiten weil
sehr neu
Tab. 9: Gegenüberstellung der drei Plattformen
Entscheidungsfindung
Für die Entscheidung der geeigneten Entwicklungsplattform ist wiederholt festzuhalten,
dass viele bestehende Java-Quelltexte adaptiert werden sollen. Da für das iPhone nur in
Objective-C entwickelt werden kann und diese Programmiersprache nicht kompatibel zu
Java ist, fällt aus diesem Grund die Entscheidung gegen das iPhone aus.
Nach Meinung des Autors hat sich Java ME bis heute nicht richtig durchsetzen können.
Einerseits sind die Displays der meisten Mobiltelefone zu klein, um Anwendungen wie
einen Webbrowser bequem benutzen zu können. Andererseits ist die Internetfähigkeit als
Zusatz zum üblichen Mobilfunkvertrag zu verstehen. Darüber hinaus sind das reduzierte
Java und die Abhängigkeit von GUI-Frameworks negativ zu verbuchen. Deswegen fällt die
Entscheidung gegen Java ME aus.
Wünschenswert ist ein modernes Smartphone mit großem Display, optisch ansprechender
GUI und vollständigem Java. Auch sollte der Zugang zum Internet integraler Bestandteil des
Mobilfunkvertrags sein. Aus Sicht eines Entwicklers ist eine Integration des SDKs in bereits
etablierte Entwicklungsumgebungen sehr vorteilhaft. Des Weiteren sollte das SDK moderne
und etablierte Technologien einsetzen sowie bereitstellen. Frei zugängliche Quelltexte sind
eine zusätzliche Erleichterung. Da all dies nur von einer Plattform erfüllt wird, fällt die
Entscheidung zugunsten von Android aus.
68
Das Android Development Toolkit (ADT) ist ein Plug-In für Eclipse. Dieses wird im nächsten Kapitel
detailliert untersucht.
31
3 Android im Detail
3 Android im Detail
In diesem Kapitel wird Android im Detail betrachtet. Im ersten Abschnitt wird die
Architektur mit ihren einzelnen Schichten vorgestellt. Es folgen nähere Erläuterungen zum
SDK, den Entwicklungswerkzeugen und dem ADT Plug-In für Eclipse. Der letzte Abschnitt gilt
den Endgeräten mit Android-Betriebssystem samt kritischen Stimmen.
Diese Reihenfolge wurde mit der Absicht gewählt, die Tatsache nachzubilden, dass für die
Entwickler rund 1 Jahr lang nur das SDK und die Werkzeuge verfügbar waren, bevor die
ersten Endgeräte erschienen.
3.1 Architektur
„Generell beschreibt die Softwarearchitektur die strukturierte Anordnung der einzelnen
Systemkomponenten.“ 69 Bei der Architektur von Android werden die einzelnen
Komponenten einer Schicht zugeordnet. Die Gesamtheit aller Schichten wird als Software
Stack bezeichnet, welcher sich aus Betriebssystem, Middleware und Schlüsselanwendungen
zusammensetzt. 70 Folgende Abbildung zeigt den Android Software Stack:
Abb. 17: Android Software Stack, bestehend aus fünf Schichten [Andr09e]
69
70
[MoKo09, S. 5]
Vgl. [Andr09e]
32
3 Android im Detail
3.1.1
Applications
Die oberste Schicht beinhaltet folgende, in Java geschriebene, Applikationen:
Anwendung
Dialer
Contacts
Browser
Maps
Alarm Clock
Calculator
Camera
Email
Messaging
Music
Pictures
Android Market
Beschreibung
Telefon mit Verbindung zum Adressbuch
Adressbuch mit Verbindung zu Telefon, Email und SMS
Webbrowser
Anwendung für Google Maps
Wecker
Taschenrechner
Kamera zum Aufnehmen von Bildern
Anwendung für Emails, vorausgesetzt wird ein Account bei Google
Mail, zusätzlich sind andere Provider möglich
Anwendung für SMS
Musikverwaltung
Bilderverwaltung
Schnittstelle zum Herunterladen und Bewerten neuer Anwendungen,
nicht verfügbar im Emulator
Tab. 10: Anwendungen der Applications-Schicht
3.1.2
Application Framework
Wie bereits erwähnt sind alle Anwendungen gleichberechtigt. Der Benutzer kann diese
gegen andere beliebig austauschen. Ferner ist es möglich eigene Anwendungen zu
entwickeln. Diese Mechanismen werden von dem Application Framework bereitgestellt:
Mechanismus
Activity Manager
Window Manager
Content Provider
View System
Package Manager
Telepony Manager
Resource Manager
Location Manager
Notification Manager
Beschreibung
steuert den Lebenszyklus der Aktivitäten, stellt einen globalen
Stack für die Zurück-Taste bereit
lässt sich über eine Java-API ansteuern und greift auf den Surface
Manager 71 zu
ermöglicht das Lesen und Speichern von Daten, dient dem
Datenaustausch zwischen Applikationen
steuert die Views 72
protokolliert die installierten Applikationen
steuert die Telefonfunktionalität wie Anklopfen, Gespräch halten
oder das neue Gespräch entgegen nehmen
ermöglicht Zugriff auf Ressourcen (z.B. internationalisierte Strings,
Grafiken, Layouts)
stellt geografische Informationen über den aktuellen Standort
bereit
ermöglicht
Applikationen,
textuelle
Benachrichtigungen
anzuzeigen
Tab. 11: Mechanismen der Application Framework-Schicht [MoKo09, S. 9] [Andr09e]
71
72
Siehe Libraries-Schicht.
Views sind Basis-Bausteine für die GUI.
33
3 Android im Detail
3.1.3
Libraries
Android beinhaltet in C / C++ geschriebenen Bibliotheken. Deren Funktionalität wird über
die Application Framework-Schicht bereitgestellt:
Bibliothek
Surface Manager
Media Framework
SQLite
OpenGL | ES
FreeType
WebKit 74
SGL
SSL
libc
Beschreibung
steuert den Zugriff auf das Anzeigesystem, stellt 2D- und 3DGrafiken unterschiedlicher Applikationen kombiniert dar
stellt Bibliotheken für Wiedergabe und Aufnahme von Audio und
Video bereit, basiert auf einer Bibliothek von PacketVideo 73
Relationales Datenbanksystem für ressourcenbeschränkte Geräte
3D-Grafikbibliothek für eingebettete Systeme
Bibliothek zur Darstellung von Schriftarten
Rendering-Engine für Webseiten
Software zum Rendern von Vektorgrafik
Netzwerkprotokoll zur absicherten Übertragung von Daten
Standard-Bibliothek für die Programmiersprache C
Tab. 12: Bibliotheken der Libraries-Schicht [MoKo, S. 7] [Andr09e]
73
74
PacketVideo ist Mitglied der Open Handset Alliance.
Google Chrome benutzt ebenfalls die Rendering-Engine WebKit.
34
3 Android im Detail
3.1.4
Android Runtime
Die Laufzeitumgebung von Android besteht aus den Core Libraries und der Dalvik Virtual
Machine (VM). Sie ist auf der gleichen Schicht wie die Libraries-Schicht angesiedelt.
Core Libraries
Hierbei handelt es sich um viele Java-Pakete der Java Platform, Standard Edition. Folgende
Pakete werden dabei unterstützt:
Paket
Beschreibung
Eingabe und Ausgabe von Dateien und Streams
java.lang
elementare Grundklasse
java.math
Zahlendarstellung
java.net
Netzwerkprogrammierung
java.nio
Ergänzung zu java.io
java.security
Sicherheit
java.sql
Datenbankanbindung
java.text
Internationalisierung von Zahlen und Strings
java.util
List, Map, Set, Array, Collection
javax.crypto
Kryptografie
javax.net
Netzwerkprogrammierung
javax.security
Sicherheit
javax.sound
Audioverarbeitung
javax.sql
Datenbankanbindung
javax.xml.parsers XML-Parser
org.w3c.dom
DOM
org.xml.sax
SAX-Parser
java.io
Tab. 13: Core Libraries der Android Runtime-Schicht [MoKo09, S. 8] [Burn08]
Hinzu kommen Pakete von Drittanbietern wie:
Paket
Beschreibung
Werkzeuge für Encodierung und Decodierung
org.apache.commons.httpclient Unterstützung der Protokolle HTTP und HTTPS
org.bluez
Anbindung von Bluetooth
org.json
Datenformat, kompakter kodiert als XML
org.apache.commons.codec
Tab. 14: zusätzliche Core Libraries der Android Runtime-Schicht [Burn08]
35
3 Android im Detail
Dalvik Virtual Machine
Die Dalvik Virtual Machine (Dalvik VM) ist eine Java Virtual Machine (JVM), die für mobile
Geräte optimiert wurde. Der Google-Mitarbeiter Dan Bornstein hat seiner Erfindung den
Namen Dalvik verliehen, nach der gleichnamigen Stadt in Island, aus dem einige seiner
Vorfahren stammen. Im Gegensatz zur JVM, die auf einer Stack Machine basiert, beruht die
Dalvik VM auf der Architektur einer Register Machine. Der Vorteil dabei ist, dass dieser
Bytecode auf ARM-Prozessoren, die in mobilen Endgeräten eingesetzt werden und selbst
auf einer Stack Machine basieren, wenig Speicherplatz benötigt und effizient ausgeführt
wird.
Auf den Just-in-time Compiler (JIT), der in einer JVM den Bytecode bei Bedarf in nativen
Maschinencode übersetzt, wird verzichtet. Stattdessen wird bereits vorher der Bytecode
mit dem Dalvik Cross-Compiler von Stack Machine- in Register Machine-Architektur
umgewandelt.
Für die Entwicklung einer Applikation lassen sich folgende Schritte zusammenfassen:
Schritt
Erstellung von Quelltext
Kompilierung in Bytecode (Stack Machine)
Umwandlung in Bytecode (Register Machine)
Erstellung eines Android Packages
Ausführung in Dalvik VM
Werkzeug
Texteditor
Java Compiler
Dalvik Cross-Compiler
AAPT
Android
Dateiendung
.java
.class
.dex
.apk
Tab. 15: Entwicklungsschritte einer Android-Applikation
Es bleibt anzumerken, dass jede Anwendung in einem Prozess in einer Instanz der Dalvik
VM ausgeführt wird. Daher wurde Dalvik so entwickelt, dass mehrere VMs auf einem Gerät
parallel betrieben werden. 75 76
3.1.5
Linux Kernel
Die unterste Schicht fungiert als ein Hardware Abstraction Layer (HAL) zwischen der
physischen Hardware und dem Android Software Stack. Da Android von einem Linux Kernel
in der Version 2.6 Gebrauch macht, werden von der Linux Kernel-Schicht folgende
Funktionalitäten bereitgestellt: 77
■
■
■
■
■
75
Sicherheit
Speichermanagement
Prozessmanagement
Netzwerkanbindung
Treiber
Vgl. [MoKo, S. 7]
Vgl. [Andr09e]
77
Vgl. [Ande09e]
76
36
3 Android im Detail
3.2 Software Development Kit
In diesem Unterkapitel wird beschrieben, wie das Android SDK heruntergeladen und
installiert wird. Auch wird erklärt, wie mit den Quelltexten zu verfahren ist. Des Weiteren
werden alle Werkzeuge vom SDK einzeln vorgestellt. Der letze Abschnitt handelt von einem
Plug-In für Eclipse, welches die Werkzeuge in die IDE integriert.
Herunterladen
Auf der Android Developers-Homepage 78 stehen folgende SDKs für die Betriebssysteme
Windows, Mac OS X und Linux zum Herunterladen bereit: 79
SDK
Android 1.5 SDK, r3
Android 1.5 NDK, r1
Datum
07.2009
06.2009
Android 1.1 SDK, r1
Android 1.0 SDK, r2
02.2009
11.2008
Beschreibung
Neuste Version (irrelevant für diese Arbeit)
Erweiterung zum SDK 1.5, ermöglicht Benutzung der
Programmiersprache C / C++ und nativen Zugriff auf
Bibliotheken der Library-Schicht
Relevant für diese Arbeit
Veraltete Version (irrelevant für diese Arbeit)
Tab. 16: Verschiedene Android SDKs [Andre09g]
Installation
Für die Installation muss lediglich die ZIP-Datei, welche rund 80 MB groß ist, extrahiert und
das Unterverzeichnis tools in den Pfad aufgenommen werden:
■ Unter
Linux
wird
die
Datei
.bashrc
um
folgende
Zeile
erweitert:
export PATH=${PATH}:/home/schmitz/android-sdk-linux_x86-1.1_r1/tools
■ Unter Windows wird die Umgebungsvariable PATH um folgenden Pfad erweitert:
D:\android-sdk-windows-1.1_r1\tools;
Quelltexte
Die Quelltexte von Android sind nicht in dem SDK enthalten. Diese befinden sich in einem
Git-Repository. Git ist, wie auch Subversion (SVN) und Concurrent Versions System (CVS),
ein Softwaresystem zur Versionsverwaltung von Quelltexten. Für den Benutzer besteht
lediglich die Möglichkeit, das vollständige und 2,1 GB große Repository auf einmal
herunterzuladen. Dafür werden die Programme Git und Repo benötigt, die nur für Linux
und Mac OS verfügbar sind. Die Quelltexte für das Android SDK sind im heruntergeladenen
Repository zu finden unter mydroid/frameworks/base/core/java. Es wird empfohlen, im
Android SDK den Ordner source anzulegen und die Quelltexte dorthin zu kopieren.
Dadurch kann ein Entwickler in einer IDE wie Eclipse die Quelltexte komfortabel öffnen und
studieren. 80 81
78
Vgl. [Andr09g]
Stand vom 5.9.2009
80
Vgl. [Burk08]
81
Vgl. [Andr09h]
79
37
3 Android im Detail
3.3 Entwicklungswerkzeuge
Im Unterordner tools vom installierten Android SDK befinden sich Werkzeuge, die bei der
Entwicklung von Applikationen hilfreich sind bzw. sie erst möglich machen. Diese werden
nun im Einzelnen vorgestellt.
3.3.1
Android Emulator
Der Android Emulator ist ein virtuelles Smartphone auf dem Entwicklungscomputer, das
den vollständigen Android System Stack abbildet. Bis auf die Möglichkeit zu telefonieren
stehen dem Benutzer die Hardware und Software eines typischen Android Smartphones zur
Verfügung. Folgende Hardware wird emuliert: 82
■
■
■
■
■
■
■
ARMv5 Prozessor mit entsprechender Speicherausstattung
16-bit LCD-Display
Tastatur
Soundchip
SD Memory Card
GSM Modem
SIM Karte
Der Emulator wird auf der Kommandozeile mit dem Befehl emulator gestartet und durch
zahlreiche Parameter konfiguriert. Einige wichtige Parameter lauten: 83
Parameter
-sdcard <filepath>
-wipe-data
-noaudio
-skin <skinId>
Beschreibung
Es wird eine SD Memory Card eingebunden, welche durch eine
Image-Datei repräsentiert wird. Diese lässt sich mit dem
Werkzeug mksdcard erzeugen.
Setzt den Emulator auf Werkseinstellung zurück. Alle
Änderungen und installierte Applikationen gehen verloren.
Schaltet die Audioeigenschaften vom Emulator ab.
Startet den Emulator mit der angegebenen Oberfläche.
Tab. 17: Parameter für den Android Emulator
Standardmäßig wird die Oberfläche HVGA-P mit einer Auflösung von 320x480 Pixeln im
Hochformat geladen. Insgesamt werden vier verschiedene Oberflächen im SDK
bereitgestellt. Diese befinden sich im Unterordner tools\lib\images\skins vom
installiertem Android SDK:
82
83
Vgl. [Andr09i]
Vgl. [Andr09i]
38
3 Android im Detail
Name
HVGA-L
Beschreibung
480x320, Querformat
HVGA-P
320x480, Hochformat
QVGA-L
320x240, Querformat
Aussehen
QVGA-P 240x320, Hochformat
Tab. 18:: Vier verschiedene Skins vom Android Emulator [Andr09i]
Im Internet sind viele weitere Oberflächen zu finden. Diese sind insofern sinnvoll, als dass
ein Entwickler seine Applikation in den unterschiedlichsten Auflösungen testen kann.
Erwähnenswert ist die Oberfläche namens T-Mobile
T Mobile G1, da es das erste erschienene
erschiene
84
Android Smartphone nachbildet, inklusive der aufklappbaren Tastatur.
84
Die Oberfläche T-Mobile
Mobile G1 ist zu finden auf: [Shark08].
39
3 Android im Detail
Detai
3.3.2
Hierarchy Viewer
Hierarchy
chy Viewer ist ein Werkzeug um die Benutzeroberfläche einer Applikation detailliert
zu untersuchen. Gestartet wieder dieser auf der Kommandozeile mit dem Befehl
hierarchyviewer. Es wird ein laufender Emulator oder ein angeschlossenes Endgerät
vorausgesetzt,, da der aktuelle Screen die Basis für die Analyse darstellt. Im Layout View
kann der Benutzer die GUI-Komponenten
Komponenten in einer Baumdarstellung betrachten. Die zweite
Ansicht wird als Pixel Perfect View bezeichnet und bietet die Möglichkeit, mit einer
virtuellen
en Lupe den Screen pixelgenau zu analysieren.85
3.3.3
Draw 9-patch
Draw 9-patch
patch ist ein WYSIWYG-Editor
WYSIWYG
zur Erstellung von NinePatch-Grafiken.
Grafiken. Dabei handelt
es sich um Grafiken mit zusätzlichen Informationen über Streckverhalten sowie
Textpositionierung, die in Android für GUI-Komponenten
GUI Komponenten wie z.B. Buttons verwendet
werden. Gestartet wird
d der Editor auf der Kommandozeile mit dem Befehl draw9patch.
Anhand eines Beispiels soll der Vorteil von NinePatch-Grafiken
NinePatch Grafiken verdeutlicht werden:
Für eine GUI wurde von einem Designer
Desig
folgender Button erzeugt:
Abb. 18: Beispiel-Button
Der Button soll in einer GUI mit einem langen Text gefüllt werden. Damit der Text in den
Button passt, muss die Grafik in X-Richtung
X
gestreckt werden. Das Ergebnis sieht so aus:
Abb. 19: Beispiel-Button in X-Richtung gestreckt
Die Probleme sind klar ersichtlich: Da die Grafik proportional gestreckt wurde, sind die
Rahmen als auch die Schatten ebenso gestreckt worden. Zum Zweiten
weiten ragt der Text über
die Begrenzungen hinaus.
Die Lösung für das Problem besteht darin, mit Draw 9-patch
9 patch die ursprüngliche Grafik um
zusätzliche Informationen über Streckverhalten und Textpositionierung zu versehen. Das
Ergebnis sieht erwartungsgemäß ansprechender aus:
85
Vgl. [MoKo09, S. 27 f]
40
3 Android im Detail
Abb. 20: Beispiel-Button als NinePatch-Grafik
Folgende
olgende Abbildung zeigt Draw 9-Patch
9
mit dem Beispiel-Button
Button als NinePatch-Grafik:
NinePatch
Abb. 21:
21 Draw 9-patch mit Beispiel-Button als NinePatch-Grafik
Indem der Benutzer außerhalb des Bildes schwarze Pixel setzt, werden die zusätzlichen
Informationen hinzugefügt. Der linke und obere Bereich repräsentieren dabei den
Ausschnitt vom Bild, der gestreckt werden darf. Da sich der Beispiel-Button
Beispiel Button innerhalb der
Rahmen in X-Richtung
Richtung wiederholt, reicht es im oberen Bereich nur einen Pixel zu setzen. Im
linken Bereich wurden so viele Pixel wie möglich ausgewählt und nur die Krümmung der
Ecken ausgespart. Der rechte und untere Bereich repräsentiert die Fläche, in die Text
eingefügt werden soll. Hier wurde so viel Platz wie möglich vergeben. Lediglich die Ecken
wurden wieder ausgespart.
Nachdem die Grafik so erweitert wurde, kann es unter der Dateiendung .9.png gespeichert
werden. Die Interpretation der zusätzlichen Informationen
Informationen und deren Umsetzung in der
Applikations-GUI werden von Android selbständig übernommen.
41
3 Android im Detail
3.3.4
Dalvik Debug Monitor Service
Mit dem Dalvik Debug Monitor Service (DDMS) können Applikationen und Prozesse, die auf
dem Emulator oder auf einem angeschlossenem Endgerät laufen, überwacht werden.
Gestartet wird dieser auf der Kommandozeile mit dem Befehl ddms. Es werden folgende
Funktionen angeboten: 86
■
■
■
■
■
Screenshot vom aktuellen Screen
Port-Weiterleitung
Informationen über Threads und Heap
LogCat
Simulation von Anrufen und SMS
Folgende Abbildung zeigt Dalvik Debug Monitor Service:
Abb. 22: Dalvik Debug Monitor Service
Im linken Bereich sind die Applikationen und die Endgeräte bzw. Emulatoren zu sehen. Der
untere Bereich LogCat zeigt das Protokoll aller Log-Ausgaben. Es können verschiedene LogLevel wie Debug, Info, Warning oder Error gewählt werden. Aufgrund der vielen LogEinträge durch Betriebssystem und laufende Prozesse kann die Ausgabe nach Tags oder
Prozess-IDs gefiltert werden. Im rechten Bereich sind verschiedene Informationen über
Threads und Heap verfügbar. Beispielsweise können hier eine Garbage-Collection
erzwungen oder Prozesse beendet werden. Außerdem können in diesem Bereich Ereignisse
wie eingehende Anrufe, Empfang von SMS und GPS-Positionsänderungen im Emulator
simuliert werden.
86
Vgl. [MoKo09, S. 31}
42
3 Android im Detail
3.3.5
Android Debug Bridge
Die Android Debug Bridge (ADB) ist ein konsolenbasiertes Programm, mit dem der Emulator
oder ein angeschlossenes Endgerät angesteuert werden kann. Das Programm besteht aus
folgenden drei Teilen: 87
■ Client, der auf dem Entwicklungsrechner läuft
■ Dämon, der als Hintergrundprozess auf jedem Emulator bzw. Endgerät läuft
■ Server, der als Hintergrundprozess auf dem Entwicklungsrechner läuft und die
Kommunikation zwischen Client und Dämon steuert
ADB wird auf der Kommandozeile mit dem Befehl adb gestartet und durch zahlreiche
Parameter konfiguriert. Einige wichtige Aufrufe lauten: 88
Aufruf
adb devices
adb install <apk>
adb uninstall <package>
adb pull <remote> <local>
adb push <local> <remote>
adb kill-server
adb start-server
adb shell
Beschreibung
Zeigt eine Liste der Geräte wie Emulator oder
angeschlossenes Endgerät an.
Installiert oder updatet eine Applikation. Diese lässt sich
mit dem Werkzeug Android Asset Packaging Tool
erzeugen.
Deinstalliert
eine
Applikation
anhand
ihres
Paketnamens.
Kopiert eine Datei vom Emulator oder Endgerät.
Kopiert eine Datei zum Emulator oder Endgerät.
Beendet den Server auf dem Entwicklungsrechner.
Startet den Server auf dem Entwicklungsrechner.
Startet eine Shell auf dem Emulator oder
angeschlossenem Endgerät.
Tab. 19: Aufrufe der Android Debug Bridge
3.3.6
Android Asset Packaging Tool
Das Android Asset Packaging Tool (AAPT) dient dazu, Archive wie JAR, ZIP und Android
Package (APK) zu betrachten, erzeugen und zu aktualisieren. Eine APK-Datei ist eine
Android-Applikation, die sowohl Register Machine-Bytecode als auch binäre Ressourcen
beinhaltet und mit ADB auf dem Emulator oder einem angeschlossenem Endgerät installiert
wird. AAPT wird auf der Kommandozeile mit dem Befehl aapt gestartet und durch
zahlreiche Parameter konfiguriert. 89
87
Vgl. [Andr09j]
Vgl. [Andr09j]
89
Vgl. [Andr09k]
88
43
3 Android im Detail
3.3.7
Android Interface Description Language
Android Interface Description Language (AIDL) ist eine Interface Description Language (IDL),
bekannt durch die Verwendung bei Remote Procedure Call (RPC). Sie dient der
Kommunikation zwischen verschiedenen Prozessen, Interprocess Communication (IPC)
genannt. Da bei Android jede Applikation in einem eigenen Prozess läuft, kann der Fall
eintreten, dass Objekte ausgetauscht werden müssen. Zu diesem Zweck wird in der
Programmiersprache IDL ein Interface (Dateiendung .aidl) geschrieben. Auf der
Kommandozeile wird der Befehl aidl abgesetzt und ein Java-Interface generiert. Der
Entwickler schreibt eine Stub-Klasse und implementiert die Methoden vom Interface. Die
Prozesse können nun über diese Stub-Klasse die Objekte austauschen. 90
3.3.8
sqlite3
Sqlite3 ist ein kommandozeilenbasiertes Program, welches innerhalb einer ADB-Shell
ausgeführt wird. Dadurch wird der Zugriff auf die SQLite-Datenbanken auf den Emulator
oder angeschlossenen Endgerät gewährt. In der Datenbanksprache Structured Query
Language (SQL) werden die Daten der relationalen Datenbanken definiert, abgefragt und
manipuliert.
Folgendes Beispiel erzeugt eine Datenbank mit einer Tabelle und drei Datensätzen, und gibt
diese aus:
Aufruf
adb shell
sqlite3 data/data/test.db
CREATE TABLE adressen
(id INT PRIMARY KEY, name VARCHAR(30));
INSERT INTO adressen(id, name)
VALUES (1, 'Schmitz');
INSERT INTO adressen(id, name)
VALUES (2, 'Sachweh');
INSERT INTO adressen(id, name)
VALUES (3, 'Ecke-Schüth');
SELECT * FROM adressen;
.exit
exit
Tab. 20: Beispiel für sqlite3
90
Vgl [Andr09l]
Beschreibung
Shell starten
sqlite3 starten
Tabelle erzeugen
Datensatz einfügen
Datensatz einfügen
Datensatz einfügen
Daten abfragen
sqlite3 verlassen
Shell verlassen
44
3 Android im Detail
3.3.9
mksdcard
Das Werkzeug mksdcard wird auf der Kommandozeile ausgeführt und erzeugt ein FAT32Disk-Image. Die Parameter für den Aufruf lauten: 91
Argument
Beschreibung
Bezeichnung für Datenträger
<size>[K|M] Größe in Byte, Kilobyte oder Megabyte
<file>
Pfad und Dateiname für das Image
[-l label]
Tab. 21: Parameter für mksdcard
Beispielsweise erzeugt folgender Aufruf ein 64 MB großes Image mit der Bezeichnung
BeispielImage und dem Dateinamen beispiel.img:
mksdcard -l BeispielImage 64M beispiel.img
Die SD Memory Card, welche durch die Image-Datei repräsentiert wird, lässt sich wie folgt
in den Emulator einbinden:
emulator -sdcard beispiel.img
Im Hauptverzeichnis vom Emulator-Dateisystem befindet sich nun der Ordner sdcard. Um
eine Datei wie z.B. ein Bild auf die simulierte Memory SD Card zu kopieren, wird folgender
ADB-Befehl auf der Kommandozeile ausgeführt:
adb push Bild.jpg sdcard
In einer ADB-Shell kann auf diesen Ordner mittels Linux-Kommandos zugegriffen werden.
3.3.10 Dalvik Cross-Compiler
Der Dalvik Cross-Compiler dx wird auf der Kommandozeile ausgeführt und wandelt den
Stack Machine-Bytecode (Dateiendung .class) in Register Machine-Bytecode
(Dateiendung .dex) um. Nur dieser transformierte Bytecode kann in der Dalvik VM als
Applikation ausgeführt werden.
91
Vgl. [Andr09m]
45
3 Android im Detail
3.3.11 UI/Application Exerciser Monkey
Das Werkzeug UI/Application Exerciser Monkey wird auf der Kommandozeile ausgeführt
und sendet dem Emulator oder einem angeschlossenem Endgerät eine Reihe zufälliger
Benutzerereignisse. Dadurch wird eine Applikation einem Stresstest unterzogen. Es stehen
dabei Optionen aus vier Kategorien zur Auswahl: 92
■
■
■
■
Anzahl der Ereignisse
Beschränkung auf bestimmte Pakete
Art und Frequenz der Benutzerereignisse
Debugging-Einstellungen
Beispielsweise öffnet folgenden Aufruf die Applikation im Paket android.monkey.test und
versendet 500 zufällige Benutzerevents: 93
adb shell monkey -p android.monkey.test -v 500
3.3.12 activitycreator
Das Werkzeug activitycreator generiert alle notwendigen Dateien und Ordner für eine
Applikation: 94
Datei oder Ordner
AndroidManifest.xml
build.xml
res
src
bin
Beschreibung
Manifest-Datei der Applikation
Ant-Script zum Erzeugen der Applikation
Ressourcen-Ordner
Quelltext-Ordner samt Activity-Klasse
Ordner für Bytecode- und APK-Dateien
Tab. 22: Von activitycreator generierte Dateien und Ordner
Folgender Aufruf erzeugt im aktuellen Ordner das Notwendige für die Applikation im Paket
android.activitycreator mit der Activity-Klasse namens TestActivity:
activitycreator android.activitycreator.TestActivity
92
Vgl. [Andr09n]
Vgl. [Andr09n]
94
Vgl. [MoKo09, S. 38]
93
46
3 Android im Detail
3.4 Android Development Toolkit Plug-In für Eclipse
Android Development Toolkit (ADT) ist ein Plug-In für Eclipse, durch das die meisten
Entwicklungswerkzeuge in die IDE integriert werden. Sämtliche Funktionen vom Dalvik
Debug Monitor Service sind über die neue Perspektive DDMS erreichbar. Mit einem Wizard
wird ein neues Android-Projekt aufgesetzt, und die notwendigen Dateien und Ordner
werden durch activitycreator erzeugt. Beim Kompilieren der Quelltexte werden
automatisch Dalvik Cross-Compiler und Android Asset Packaging Tool ausgeführt. Zum
Testen der Applikation wird Android Emulator gestartet, nachdem mittels Android Debug
Bridge die Applikation installiert wurde.
Erweiterungen
Da bei der Entwicklung einer Android-Applikation neben Java auch XML eingesetzt wird,
existieren folgende Erweiterungen für Eclipse:
■
■
■
■
■
■
Android Java Editor
Android Layout Editor
Android Manifest Editor
Android Menu Editor
Android Resource Editor
Android Xml Resources Editor
Installation
Da auf der Android Developer-Homepage mehrere SDKs zum Herunterladen angeboten
werden, existieren auch verschiedene Plug-Ins. Folgende Tabelle zeigt, welches Plug-In zu
welcher SDK kompatibel ist: 95
SDK
Android 1.5 SDK, r3
Android 1.1 SDK, r1
Android 1.0 SDK, r2
Plug-In
Android Development Toolkit 0.9.1
Android Development Toolkit 0.8.0
Android Development Toolkit 0.8.0
Tab. 23: Android SDKs und Plug-Ins
Die Installation erfolgt über die üblichen Mechanismen. Nach dem Neustart von Eclipse ist
lediglich der Ordner vom installiertem Android SDK einzutragen.
95
Vgl. [Androi09o]
47
3 Android im Detail
3.5 Endgeräte mit Android-Betriebssystem
In diesem Unterkapitel werden die aktuell bekannten Endgeräte mit AndroidBetriebssystem vorgestellt. Auch wird Kritik über das erste Android Smartphone, dem HTC
Dream alias T-Mobile G1, wiedergegeben.
3.5.1
T-Mobile G1 – HTC Dream
Die High Tech Computer (HTC) Corporation, Hersteller von Mobiltelefonen mit Hauptsitz in
Taiwan, fertigt das Smartphone HTC Dream. Zusammen mit der Mobilfunkgesellschaft
T-Mobile wurde im Herbst 2008 das erste Endgerät mit Android-Betriebssystem unter dem
Produktnamen T-Mobile G1 auf den Markt gebracht. Seit Oktober 2008 ist es in den USA
und in England verfügbar, seit Anfang 2009 in Österreich und Holland, und seit Februar
2009 auch in Deutschland. Der Preis in den USA beträgt 149,99 USD mit einem speziellen
Mobilfunkvertrag bei T-Mobile und 399 USD ohne Vertragsbindung.
Das amerikanische Smartphone wird mit einem SIM-Lock für T-Mobile vertrieben, so dass
Kunden anderer Mobilfunkanbieter ihre SIM-Karten nicht benutzen können. Findige Hacker
haben es geschafft, diesen Schutz auszuhebeln. Dafür benötigt der Interessierte die
Seriennummer des Gerätes, die sogenannte International Mobile Equipment Identity
(IMEI), welche auf der Batterie aufgedruckt ist. Diese 15-stellige Nummer wird per Email
versendet, und nach erfolgter Überweisung von 23,99 USD erhält der Interessierte einen
einzigartigen Unlock-Code. Nach erfolgreicher Eingabe kann das G1 nun mit den SIM-Karten
sämtlicher Mobilfunkanbieter betrieben werden. 96
Android Dev Phone 1
Seit Dezember 2008 wird von Google das Android Dev Phone 1 angeboten, eine spezielle
Version vom HTC Dream, welches nur für registrierte Entwickler zugänglich ist. Nachdem
sich der Entwickler beim Android Market registriert hat und 25 USD gezahlt hat, besteht die
Möglichkeit genau ein Exemplar des Android Dev Phone 1 für 399 USD zu erwerben. Das
Besondere daran ist, dass kein SIM-Lock existiert, voller Zugriff auf alle Dateien gewährt
wird, der Benutzer über Superuser-Rechte verfügt, der Bootloader und das OS beliebig
überspielt werden können und spezielle Entwicklerwerkzeuge vorinstalliert sind.
Aus technischer Sicht ist das T-Mobile G1 mit Quadband GSM und UMTS ausgestattet, dem
Mobilfunkstandard der dritten Generation (3G). Das Display ist ein 3,2 Zoll LCD-TFTTouchscreen mit einer Auflösung von 480x320 Pixel und 65.536 Farben. Die Speichergröße
beträgt 256 MB ROM und 192 MB RAM und ist mittels einer SD Memory Card beliebig
erweiterbar. Der Prozessor ist ein Qualcomm MSM7201A, der dynamisch getaktet ist
zwischen 82 und 384 MHz. Es werden WLAN (IEEE 802.11b/g) und Bluetooth 2.0 mit
erhöhter Datenrate unterstützt und eine Kombination aus Audioanschluss und Mini-USB
bereitgestellt. Des Weiteren ist eine 3,2 Megapixel Kamera mit Autofokus und 2-fach
digitalem Zoom integriert. Die Besonderheiten sind die ausziehbare QWERTY Tastatur, ein
96
Vgl. [Unlo]
48
3 Android im Detail
GPS-Empfänger für satellitenunterstützte Positionsbestimmung und Zeitmessung, ein
digitaler Kompass, Beschleunigungssensoren und ein 2-Achsen Lagesensor. 97
Auch ohne ausgezogene Tastatur sind folgende Tasten verfügbar:
Taste
Hörer abheben
Haus
Trackball
Zurück
Hörer auflegen
Menü
Beschreibung
zum Anrufen oder Entgegennehmen eingehender Anrufe
zum Anzeigen des Desktops bzw. zum Verlassen der Anwendung
zum Navigieren ohne Touchscreen
zeigt den vorherigen Screen an
zum Beenden des Telefonates oder zum Aktivieren
Energiesparmodus
zeigt das Kontextmenü zum aktuellen Screen
vom
Tab. 24: Funktionstasten vom T-Mobile G1
Folgende Abbildung zeigt das T-Mobile G1 in weißer Farbe mit ausgezogener Tastatur:
Abb. 23: T-Mobile G1 – HTC Dream [Spar09]
Kritik
Kurze Zeit nach der Markteinführung des T-Mobile G1 erschien auf Spiegel Online ein
Artikel, der kritische Stimmen wiedergibt: „Matthew Miller (ZDnet) bemängelt, dass das G1
keinen normalen Kopfhöreranschluss hat - sondern einen Kopfhörer-Adapter für den USBPort braucht. Ihn stört auch, dass die Kamera keine Videos aufzeichnen kann. […] Walt
Mossberg (Wall Street Journal) kritisiert vor allem die Benutzeroberfläche des Telefons.
Besonders problematisch findet er, dass die Möglichkeiten, Kalender, E-Mails und Adressen
mit einem Computer zu synchronisieren, höchst eingeschränkt sind. […] David Pogue (New
York Times) […] stört auch, dass das Bild auf dem Schirm des G1 nicht automatisch rotiert,
97
Vgl. [Wiki09a]
49
3 Android im Detail
wenn man das Telefon auf die Seite dreht (wie beim iPhone), dass die
die Batterie so schnell
schlappmache (Pogue spricht von drei bis fünf Stunden unter Last) und dass es einfach nicht
so hübsch ist wie das Apple--Telefon.
Telefon. […] Peter Ha (CrunchGear) beklagt, dass sich das G1
nur mit einem einzigen Googlemail-Account
Googlemail
koppeln lässt.
sst. Für Menschen mit einem
privaten und einem geschäftlichen E-Mail-Konto
E
Konto ist es derzeit kaum geeignet.“ 98
3.5.2
Vodafone G2 – HTC Magic
Fast zeitgleich mit der Einführung des T-Mobile
T Mobile G1 in Deutschland wurde im Februar 2009
auf dem Mobile World Congress von Vodafone
dafone das HTC Magic unter dem Produktnamen G2
vorgestellt. Optisch und technisch ähnelt es sehr stark seinem Vorgänger. Hauptsächlich
wurde die ausklappbare Tastatur weggelassen, was das Smartphone 40 Gramm leichter
macht. Über eine Touchscreen-Tastatur,
Touchscreen
die Teil der neusten Android-Version
Version ist, werden
die Benutzereingaben entgegen genommen. Display und Prozessor sind identisch mit dem
Vorgänger, einzig die Speichergröße wurde auf 512 MB ROM und 288 MB RAM erweitert. 99
Folgende Abbildung zeigt das Vodafone G2:
Abb. 24: Vodafone G2 – HTC Magic [Kret09a]
98
99
[Spie08]
Vgl. [Kret09]
50
3 Android im Detail
3.5.3
HTC Hero
Im Juni 2009 wurde von der HTC Corporation das dritte Smartphone mit AndroidBetriebssystem angekündigt. Technisch und optisch ähnelt das HTC Hero erneut seinem
Vorgänger, dem HTC Magic. Display, Prozessor und Speicher sind identisch. Die
Digitalkamera wurde durch eine 5 Megapixel Kamera mit Autofokus abgelöst.
Hinzugekommen ist eine 3,5 mm Audiobuchse, so dass mittels handelsüblicher Kopfhörer
Musik gehört werden kann statt wie bisher über spezielle USB-Kopfhörer. Auch wurde der
Lithium-Ionen-Akku mit 1350 mAh mit etwas mehr Kapazität ausgestattet. Die wirkliche
Neuerung ist die neue Bedienoberfläche HTC Sense, die der Hersteller künftig bei all seinen
Smartphones mitliefern will. Mittels spezieller Profile kann der Benutzer auf
unterschiedliche
Inhalte
und
Anwendungen
zugreifen.
Verschiedene
Kommunikationskanäle wie Telefonanrufe, Emails oder SMS werden in eine einheitliche
Ansicht integriert. 100 Folgende Abbildung zeigt das HTC Hero:
Abb. 25: HTC Hero [Kret09b]
100
Vgl. [Kret09b]
51
3 Android im Detail
3.5.4
Kogan Agora
Ende Januar 2009 sollte das ursprünglich zweite Android Smartphone vom australischen
Hersteller Kogan weltweit in den Handel kommen. Das Smartphone sollte es in zwei
Varianten geben, als Agora und Agora Pro. Beide Smartphones sollten mit einem 2,5 Zoll
großem Touchscreen-Display ausgestattet sein, einer QWERTY-Tastatur auf der
Vorderseite, UMTS und Bluetooth Schnittstellen und einen 3,5 mm Kopfhöreranschluss. Der
Prozessor ist mit 624 MHz getaktet und der interne Speicher 256 MB groß. Der Preis sollte
für das Modell Agora 299 AUD und für Agora Pro 399 AUD betragen. Das teurere Modell
sollte zusätzlich ein GPS-Empfänger, Unterstützung für WLAN und eine 2 Megapixel
Digitalkamera bieten. 101 Die Auslieferung beider Smartphones wurde zwei Wochen vor
Markteintritt gestoppt. Als Grund dafür wurde die vergleichsweise niedrige Auflösung von
320x240 Pixel angegeben. Im Vergleich dazu bietet das T-Mobile G1 eine Auflösung von
480x320 Pixel, welches bereits als Referenz für Softwareentwickler gilt. 102 Folgende
Abbildung zeigt das Kogan Agora (Pro):
Abb. 26: Kogan Agora (Pro) [Kret09c]
101
102
Vgl. [Kret09c]
Vgl. [Kret09d]
52
3 Android im Detail
3.5.5
Lenovo OPhone
Der durch seine Notebooks bekannt gewordene Hersteller Lenovo produziert auch ein
Android Smartphone, welches firmenintern unter dem Namen OPhone geführt wird. Da das
Gerät für den asiatischen Markt ausgelegt ist, ist die Wahrscheinlichkeit sehr gering dass es
in Deutschland verfügbar sein wird. Auf eine ausziehbare Tastatur und sogar auf die
Menütasten wird gänzlich verzichtet, da die Eingabe über eine virtuelle Tastatur erfolgen
soll, wahlweise in Chinesisch oder Englisch. Über Prozessor und Speicherausstattung ist
bisher nichts bekannt. Allerding soll das Gerät über eine 5 Megapixel Kamera mit
Autofokus, Blitz und Videofunktion verfügen. 103 Folgende Abbildung zeigt das Lenovo
OPhone:
Abb. 27: Lenovo OPhone [Melz08]
103
Vgl. [Melz08]
53
3 Android im Detail
3.5.6
Samsung I7500 Galaxy
Seit Juni 2009 ist beim Mobilfunkanbieter O2 auch ein Smartphone mit AndroidBetriebssystem erhältlich, das Samsung I7500 Galaxy. Das 3,2 Zoll Touchscreen Display
benötigt durch die Active Matrix Organic Light Emitting Diode (AMOLED) Technik keine
Hintergrundbeleuchtung wie bei LCD und hat dadurch einen erheblich verbesserten
Kontrast. 104 Die Speicherausstattung ist mit 8 GB konkurrenzlos und lässt sich mittels
microSD-Karte auf bis zu 32 GB erweitern – allerdings nur, wenn vorher das Gerät
ausgeschaltet und der Akku entfernt wird. Im Gegensatz zum T-Mobile G1 mit 1150 mAh
verfügt die Batterie mit 1500 mAh über deutlich mehr Kapazität. Zu den üblichen
Schnittstellen zählt auch ein 3,5 Millimeter Kopfhöreranschluss. Des Weiteren ist das Gerät
mit einer 5 Megapixel Digitalkamera mit LED-Blitz ausgestattet. 105 Folgende Abbildung zeigt
das Samsung I7500 Galaxy:
Abb. 28: Samsung I7500 Galaxy [Kret09e]
104
105
Vgl. [Webf09]
Vgl. [Kret09e]
54
4 Entwicklung eines Anmeldeformulars
4 Entwicklung eines Anmeldeformulars
In diesem Kapitel wird am Beispiel eines Anmeldeformulars gezeigt, wie eine AndroidApplikation entwickelt wird. Dabei werden zuerst die Anforderungen zusammengefasst und
anschließend die Erstellung eines Projektes und die Umsetzung erläutert. Die späteren
Unterkapitel demonstrieren, wie GUI-Komponenten angepasst und die Applikation
internationalisiert wird.
4.1 Anforderungen
Es soll ein typisches Anmeldeformular entwickelt werden. Der Benutzer soll seinen Namen
und ein Passwort eingeben können, wobei das Passwort, wie in einem Browserformular,
unleserlich erscheinen soll. Die Bestätigung des Formulars erfolgt über einen Button. Über
die Menü-Taste soll der Benutzer zu einem Hilfe-Dialog gelangen. Zusätzlich soll eine
Checkbox verfügbar sein, die im aktivierten Zustand die Daten des Benutzers speichert und
beim nächsten Aufruf des Dialogs automatisch in die Texteingabefelder einfügt.
4.2 Erstellung von einem Android Project
Unter Eclipse wird mit dem Wizard ein Android Project erstellt. Der Projektname
Anmeldeformular ist nur für Eclipse relevant und nicht für Android. Beim Paketnamen wird
de.android.login eingetragen. Einige der Entwicklungswerkzeuge benötigen diesen
Paketnamen, der im Emulator oder im angeschlossenen Endgerät einzigartig sein muss. Der
Name der Activity repräsentiert den Klassennamen, der vom Wizard im benannten Paket
erzeugt wird. Hier wird LoginActivity gewählt. Zuletzt gilt es die Applikation zu
benennen. Es wird Anmeldeformular gewählt.
Vom Wizard wurde das Projekt Anmeldeformular mit folgenden Dateien erzeugt:
55
4 Entwicklung eines Anmeldeformulars
Abb. 29: Das Android-Projekt: Anmeldeformular
Diese werden nun detailliert erläutert, da sie maßgeblich für das Verständnis sind, wie
Applikationen entwickelt werden.
4.2.1
Manifest
Die Datei AndroidManifest.xml ist die oberste Instanz einer jeden Applikation.
1 <?xml version="1.0" encoding="utf-8"?>
encoding
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android "http://schemas.android.com/apk/res/android"
3
package="de.android.login"
"de.android.login"
4
android:versionCode=
="1"
5
android:versionName=
="1.0.0">
6
7
<application android:icon="@drawable/icon"
android:icon
8
adroid:label="@string/app_name"
"@string/app_name">
9
10
<activity android:name=".LoginActivity"
android:name
11
android:label="@string/app_name"
"@string/app_name">
12
13
<intent-filter>
14
<action android:name="android.intent.action.MAIN"
android:name
/>
15
<category android:name="android.intent.category.LAUNCHER"
android:name "android.intent.category.LAUNCHER" />
16
</intent-filter>
>
17
18
</activity>
19
20
</application>
21
22 </manifest>
56
4 Entwicklung eines Anmeldeformulars
Das äußerste Element ist manifest (Zeilen 2-5). Dieses beinhaltet die Attribute XMLNamespace, Paketname, der im Wizard angegeben wurde, Versionscode und
Versionsname. Die letzeren beiden müssen vor jeder Auslieferung erhöht werden, damit
Android die Applikation als Update erkennt.
Das Element application (Zeilen 7-8) beinhaltet die Attribute icon und label. Beide sind
als Referenzen zu verstehen, wie sie in Android häufig verwendet werden. Mit dem Inhalt
@drawable/icon wird die Datei icon.png im Ordner res/drawable, ein Bild mit einer
Größe von 48x48 Pixel, als Icon für die Applikation gesetzt. Der Inhalt @string/app_name
referenziert den String Anmeldeformular in der Ressource res/values/strings.xml, die
später noch erläutert wird.
Da die Applikation nur aus einer Activity besteht, gibt es hier auch nur ein Element
activity (Zeilen 10-11). Dieses beinhaltet die Attribute name, welches den Klassennamen
wiedergibt, und label, welches wieder auf den String Anmeldeformular verweist, der in
der Titlebar der Activity zu sehen sein wird.
Das Element intent-filter (Zeilen 14-15) gibt an, dass diese Activity als erstes bei
Programmstart dargestellt wird. Bei mehreren Activities würde nur eine diesen Intent-Filter
besitzen, die restlichen wären leer.
4.2.2
Strings-Ressource
Die Datei res/values/strings.xml ist die Ressource für alle Strings innerhalb einer
Applikation:
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3
<string name="hello">Hello World, LoginActivity</string>
4
<string name="app_name">Anmeldeformular</string>
5 </resources>
Das oberste Element ressources (Zeile 2) hat keine Attribute. Es beinhaltet lediglich ein
oder mehrere string-Elemente. Diese werden über das Attribut name eindeutig
identifiziert. Der String hello (Zeile 3) wurde vom Wizard erzeugt und wird im Layout
res/layout/main.xml referenziert. Da aber das Layout neu gestaltet werden wird, kann
dieses Element ignoriert bzw. gelöscht werden. Wie bereits erwähnt wird der String
app_name (Zeile 4) in anderen Ressourcen folgendermaßen referenziert: @string/app_name
57
4 Entwicklung eines Anmeldeformulars
4.2.3
Layout
Zu jeder Activity gehört in der Regel ein Layout. Die Date res/layout/main.xml wurde
vom Wizard erzeugt, damit das Projekt lauffähig ist. Obwohl das Layout neu gestaltet wird,
soll dieses einen ersten Einblick gewähren:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
3
4
android:layout_width="fill_parent"
android:layout_height="fill_parent">
5
6
7
<TextView android:layout_width="fill_parent"
8
android:layout_height="wrap_content"
9
android:text="@string/hello" />
10
11 </LinearLayout>
Das oberste Element LinearLayout (Zeilen 2-5) ist ein Container, der die inneren
Komponenten linear ausrichtet. Durch das Attribut orientation mit dem Wert vertical
(Zeile 3) werden alle Komponenten waagerecht nebeneinander ausgerichtet. Die
Alternative horizontal würde alle Komponenten untereinander anordnen. Mittels der
Attribute layout_width und layout_height wird die Größe eingestellt (Zeilen 4-5). Der
Wert fill_parent bedeutet, dass so viel Platz in Anspruch genommen wird, wie durch die
übergeordneten Elemente bereitgestellt wird. Da LinearLayout das oberste Element ist,
wird hier das gesamte Display beansprucht. Die Alternative wrap_content würde nur so
wenig Platz wie nötig benötigen.
Das einzige innere Element ist TextView (Zeilen 7-9). Es ist so breit wie das übergeordnete
Element erlaubt, also so breit wie das Display. Die Höhe ist minimal und hängt von der
Größe der Schriftart ab. Es wird der Text angezeigt, der in der Strings-Ressource mit dem
Namen hello eindeutig identifiziert wird: Hello World, LoginActivity.
58
4 Entwicklung eines Anmeldeformulars
4.2.4
Ressourcen in Java
Die Klasse src/de/android/login/R.java wird automatisch erzeugt und bei Änderungen
an den Ressourcen aktualisiert. Sie beinhaltet Konstanten, durch die in einem JavaQuelltext auf die Ressourcen zugegriffen werden kann:
1 package de.android.login;
2
3 public final class R {
public static final class attr {
4
5
}
6
public static final class drawable {
7
public static final int icon=0x7f020000;
8
}
9
public static final class layout {
10
public static final int main=0x7f030000;
11
}
12
public static final class string {
public static final int app_name=0x7f040001;
13
14
public static final int hello=0x7f040000;
15
}
16 }
4.2.5
Activity
Die Activity, die laut dem Manifest zu Programmstart ausgeführt werden soll, ist die Klasse
src/de/android/login/LoginActivity.java. Vom Wizard wurde folgendes Gerüst
erzeugt:
1
2
3
4
5
6
7
8
9
10
11
12
13
package de.android.login;
import android.app.Activity;
import android.os.Bundle;
public class LoginActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Die Klasse LoginActivity erbt von der Klasse android.app.Activity (Zeile 6). Dadurch ist
die gesamte Funktionalität verfügbar, die eine Applikation benötigt. Um ein verändertes
Verhalten zu erreichen, müssen Methoden der Oberklasse überschrieben werden. Durch
die Annotation @Override (Zeile 8) wird dies zum Ausdruck gebracht.
Die Callback-Methode onCreate (Zeilen 9-12) wird ausgeführt, sobald die Activity erzeugt
wird. Als erstes wird die Funktionalität der Oberklasse aufgerufen, die überschrieben wurde
(Zeile 10). Anschließend wird mittels der Klasse R das Layout res/layout/main.xml
geladen und gesetzt.
59
4 Entwicklung eines Anmeldeformulars
4.2.6
Lebenszyklus einer Activity
Folgende Abbildung zeigt den Lebenszyklus einer Activity. Die Funktionalitäten der
aufgeführten Callback-Methoden
Methoden werden, wie bereits erwähnt, von der Elternklasse
android.app.Activity bereitgestellt:
Abb. 30: Lebenszyklus einer Activity [Andr09p]
Der Lebenszyklus einer Activity hängt vom Laufzeitsystem ab, welches alle Activities auf
einen Stack legt. Wird eine Activity erzeugt, so wird sie oben auf den Stack gelegt. Der Stack
wächst also mit der
er Anzahl der Activities. Die oberste Activity ist die derzeit aktive. Drückt
der Benutzer die Zurück-Taste,
Taste, so werden die Positionen der obersten beiden Activities auf
60
4 Entwicklung eines Anmeldeformulars
dem Stack vertauscht. Damit wird die aktive Activity deaktiviert und die vorherige
reaktiviert. Müssen nun Ressourcen freigegeben werden, so wird die unterste Activity vom
Stack entfernt und zerstört. 106
Die verschiedenen Zustände einer Activity sind: 107
Zustand
aktiv
pausiert
gestoppt
zerstört
Beschreibung
Die Activity ist das oberste Element auf dem Stack. Sie ist im
Vordergrund sichtbar und hat den Fokus. Eine aktive Activity wird nur
im Notfall vom Laufzeitsystem vom Stack genommen.
Tritt eine neue Activity in den Vordergrund und verdeckt die alte aber
nicht vollständig 108 , so wechselt die alte Activity in den Zustand
pausiert. Eine pausierte Activity wird nur sehr selten vom
Laufzeitsystem vom Stack genommen.
Tritt eine neue Activity in den Vordergrund und verdeckt die alte
vollständig, so wechselt die alte Activity in den Zustand gestoppt. Sie
bleibt aus Performancegründen im Speicher, für den Fall dass sie
erneut aufgerufen wird. Eine gestoppte Activity wird nur dann vom
Laufzeitsystem vom Stack genommen, wenn sie die unterste Position
einnimmt.
Eine Activity, die vom Laufzeitsystem vom Stack genommen wird,
wechselt in den Zustand zerstört. Sie wird aus dem Speicher entfernt
und belegt keine Ressourcen.
Tab. 25: Alle Zustände einer Activity
106
Vgl. [MoKo, S. 86]
Vgl. [Moko09 S. 86 ff]
108
z.B. aufgrund von transparentem Hintergrund
107
61
4 Entwicklung eines Anmeldeformulars
4.3 Umsetzung
In diesem Unterkapitel werden alle relevanten Schritte aufgeführt,
aufgeführt, die für die Umsetzung
der Anforderungen wichtig sind.
4.3.1
Layout
Für die Umsetzung von dem Anmeldeformular wurde als erstes ein neues Layout erzeugt.
Das neue Layout login.xml benutzt als oberstes Element ein RelativeLayout, mit dem
sich die inneren Elemente abhängig von einander positionieren lassen.
Rechts oben wird das Texteingabefeld für den Benutzernamen platziert. Ein solches Feld
wird durch das Element EditText abgebildet. Die Position erhält es mittels
android:layout_alignParentRight="true"
t_alignParentRight="true". Damit andere Elemente in Abhängigkeit
dazu positioniert werden können, bedarf es einer ID. Dies wird mit dem Attribut
android:id="@+id/edit_user" gewährleistet.
Links oben wird das Label Benutzer: platziert. Ein Label wird durch das Element TextView
abgebildet. Damit es sich auf gleicher Höhe mit dem Texteingabefeld befindet, wird das
Attribut android:layout_alignBaseline="@+id/edit_user" benutzt.
Das Texteingabefeld für das Passwort ist ebenfalls ein EditText. Damit der eingegebene
eingegeb
Text unleserlich ist, wird das Attribut android:password="true" benutzt.
Die CheckBox mit der Bezeichnung Daten speichern wird unterhalb vom Passwortfeld
positioniert. Dies wird mit dem Attribut android:layout_below="@+id/edit_password"
erreicht.
Unterhalb der CheckBox wird ein Button mit dem Text anmelden positioniert.
Damit ist folgendes Layout erreicht:
Abb. 31: Layout vom Anmeldeformular
62
4 Entwicklung eines Anmeldeformulars
4.3.2
Benutzerereignisse
Der Button hat als Attribut mittels dem Attribut android:id="@+id/button_login" eine
ID zugewiesen bekommen. In Java erben alle Komponenten von der Oberklasse
android.view.View. Die Methode findViewById liefert einen solchen View, der mittels
der Klasse R eindeutig identifizierbar ist. Um auf den Button zuzugreifen, ist folgender
Aufruf samt Casting notwendig:
Button login = (Button) findViewById(R.id.button_login);
Um auf ein auf ein Benutzerereignis wie das Betätigen des Buttons zu reagieren, bedarf es
Listener, die mittels Setter mit dem jeweilige Objekt verknüpft werden. Die gesuchte
Methode lautet setOnClickListener und erwartet als Parameter eine Instanz der Klasse
android.view.View.OnClickListener. Dafür existieren zwei Möglichkeiten.
Entweder wird eine eigene Klasse LoginListener geschrieben, die als lokale Unterklasse
von LoginActivity definiert wird.
private class LoginListener implements OnClickListener {
public void onClick(View v) {
}
}
Das Setzen des Listeners funktioniert wie folgt:
login.setOnClickListener(new LoginListener());
Oder es wird eine anonyme Klasse benutzt, die bei der Parameterübergabe definiert wird.
login.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
}
});
Der Nachteil besteht darin, dass der Code nicht wiederverwendet werden kann. Daher wird
innerhalb dieser Arbeit ausschließlich die erste Möglichkeit benutzt.
63
4 Entwicklung eines Anmeldeformulars
4.3.3
Modaler Fehlerdialog
Im LoginListener soll als erstes Benutzername und Passwort ausgelesen werden. Dazu wird
wieder die Methode findViewById aufgerufen.
TextView tv
String user
= (TextView) findViewById(R.id.edit_user);
= tv.getText().toString();
tv
= (TextView) findViewById(R.id.edit_password);
String password = tv.getText().toString();
Ist die Länge gleich null, so wurde vom Benutzer keine Eingabe getätigt und es wird ein
modaler Fehlerdialog ausgegeben. Dieser wird durch eine Instanz der Klasse
android.app.AlertDialog gewährleistet. Mittels Setter wird eine Überschrift, eine
Meldung, ein Button mit der Bezeichnung OK und ein Icon gesetzt:
Builder builder = new AlertDialog.Builder(LoginActivity.this);
builder.setTitle("Wichtig");
builder.setMessage("Bitte geben Sie Ihre Daten ein.");
builder.setPositiveButton("OK", null);
builder.setIcon(R.drawable.important);
builder.show();
Folgender modaler Fehlerdialog wird angezeigt:
Abb. 32: Modaler Fehlerdialog vom Anmeldeformular
64
4 Entwicklung eines Anmeldeformulars
4.3.4
Kontextmenü
Beim Erzeugen der Activity wird eine Callback-Methode aufgerufen, die die Erzeugung vom
Kontextmenü regelt. Durch die Annotation @Override wird zum Ausdruck gebracht, dass
eine Methode der Oberklasse überschrieben wird. Als erstes muss in der Methode
onCreateOptionsMenu die Funktionalität der Oberklasse aufgerufen werden. Anschließend
werden beliebig viele Objekte der Klasse android.view.MenuItem mit einer eindeutigen ID,
einem Text und einem Icon erzeugt und der übergebenen Instanz der Klasse
android.view.Menu zugewiesen:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem miHilfe = menu.add(0, 0, 0, "Hilfe");
miHilfe.setIcon(R.drawable.light);
return true;
}
Drückt der Benutzer die Menü-Taste, so wird die Methode onOptionsItemSelected
aufgerufen. Diese ist in der Elternklasse android.app.Activity definiert und wird
überschrieben. Der Getter getItemId vom Parameter android.view.MenuItem liefert die
eindeutige ID zurück. Mittels einer switch-Anweisung können so alle verschiedenen
Menüpunkte abgearbeitet werden. Der Hilfe-Dialog wird analog zum modalen Fehlerdialog
durch eine Instanz der Klasse android.app.AlertDialog erzeugt:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
Builder builder = new AlertDialog.Builder(this);
...
return true;
}
return false;
}
Abb. 33: Kontextmenü (links) und Hilfe-Dialog (rechts) vom Anmeldeformular
65
4 Entwicklung eines Anmeldeformulars
4.3.5
Persistenz
Die letzte Anforderung, die es zu erfüllen gilt, ist die Persistenz. Der Benutzername und das
Passwort sollen gespeichert werden. Es besteht die Möglichkeit, die beiden Strings in einer
Datei zu serialisieren. Auch ist es möglich, von der bereits besprochenen SQLite-Datenbank
Gebrauch zu machen. Dafür müssten im Quelltext verschiedene SQL-Statements abgesetzt
werden:
■ Erzeugung der Tabelle mittels CREATE-Statement
■ Einfügen des Datensatzes mittels INSERT-Statement
■ Abfragen der Daten mittels SELECT-Statement
Da der Einsatz einer Datenbank für diese Aufgabe mit zu viel Arbeit verbunden ist, wird
nach
einer
weiteren
Alternative
gesucht.
Android
stellt
die
Klasse
android.content.SharedPreferences zur Verfügung, die bestimmte Daten pro
Applikation speichern kann.
Das Speichern der beiden Strings lässt sich folgendermaßen umsetzen:
SharedPreferences prefs = getSharedPreferences("Login", MODE_PRIVATE);
Editor ed = prefs.edit();
ed.putString("Benutzer", user);
ed.putString("Passwort", password);
ed.commit();
Durch MODE_PRIVATE sind die gespeicherten Daten nur für diese Applikation verfügbar. Der
Name Login bezeichnet dabei die SharedPreferences eindeutig.
Das Lesen der beiden Strings erfolgt analog:
SharedPreferences prefs = getSharedPreferences("Login", MODE_PRIVATE);
String user = prefs.getString("Benutzer", "");
String password = prefs.getString("Passwort", "");
Neben der Klasse String werden folgende unterstützt:
■
■
■
■
Boolean
Float
Int
Long
In dem Fall, dass lesend auf nicht existente SharedPreferences zugegriffen wird, erfolgt
der zweite Parameter als Rückgabe, also ein Leerstring. Dadurch werden dem Entwickler
Abfragen auf null erspart.
66
4 Entwicklung eines Anmeldeformulars
4.4 Anpassung der GUI-Komponenten
GUI
Es soll der Versuch unternommen werden, die GUI-Komponenten
GUI Komponenten anzupassen. Dabei wird
im ersten Abschnitt die Hintergrundgrafik ausgetauscht. Im zweiten Abschnitt wird ein
Button durch eine NinePatch-Grafik
NinePatch
abgewandelt.
4.4.1
Hintergrundgrafik
Da das Display eine Auflösung von 320x480 Pixel hat, wurde eine Hintergrundgrafik
wallpaper.png mit gleicher Auflösung erzeugt und in den Ordner res/drawable kopiert.
Jede GUI-Komponente
Komponente hat das Attribut android_background. Die oberste Komponente im
Layout login.xml ist, wie bereits erwähnt, das RelativeLayout und beansprucht das
gesamte Display. Durch folgende Zeilen wird das Hintergrundbild gesetzt:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android "http://schemas.android.com/apk/res/android"
android:layout_width
android:layout_width="fill_parent"
android:layout_height
android:layout_height="fill_parent"
android:background
android:background="@drawable/wallpaper">
Bei einigen Endgeräten wie z.B. dem T-Mobile
T Mobile G1 muss der Benutzer, um Benutzername
und Passwort auf der Tastatur einzugeben, dieses aufklappen
aufklappen und um 90 Grad im
Uhrzeigersinn drehen. Das System streckt bzw. staucht die Hintergrundgrafik proportional,
damit diese das gesamte Display ausfüllt. Folgende Abbildung gibt beide Ansichten wieder:
Abb. 34:: Anmeldeformular im Hochformat (links) und im Querformat (rechts)
Das Problem, dass die Hintergrundgrafik auf dem aufgeklappten Endgerät verzerrt aussieht,
lässt sich durch mehrere Layouts lösen. Dafür muss die Layout-Datei
Layout
login.xml im Ordner
res/layout gelöscht werden und in zwei neu erzeugte Ordner kopiert werden:
res/layout-land und res/layout-port
res/layout
. Der erste Ordner beinhaltet Layouts im
Querformat (engl. landscape
andscape)) und der zweite solche im Hochformat (engl. portrait). Es wird
67
4 Entwicklung eines Anmeldeformulars
eine neue Hintergrundgrafik mit der Auflösung 480x320 Pixel erstellt und im QuerformatLayout referenziert. Durch die identischen Dateinamen beider Layouts erkennt das System,
dass es sich um das gleiche Layout in unterschiedlichen Formaten handelt und benutzt je
nach aktiver Auflösung das entsprechende Layout. Durch diese Technik ist es möglich, das
Layout vollständig für die jeweilige Auflösung anzupassen. Es sollte lediglich darauf
geachtet werden, dass in den Layout-Dateien die gleichen GUI-Komponenten mit gleichen
IDs benutzt werden.
4.4.2
Button mit NinePatch-Grafik
Um die Grafik eines Buttons durch eine andere zu ersetzen, wird erneut von dem Attribut
android_background Gebrauch gemacht. Analog zur Hintergrundgrafik wird die Grafikdatei
button.9.png in den Ordner res/drawable kopiert. Es handelt sich dabei um die
NinePatch-Grafik aus „Kapitel 3.3.3 Draw 9-patch“. Diese wurde mit dem
Entwicklungswerkzeug Draw 9-patch erzeugt und beinhaltet zusätzliche Informationen über
Streckverhalten und Textpositionierung. Folgende Abbildung zeigt den angepassten
Anmelden-Button:
Abb. 35: Anmeldeformular mit angepasstem Anmelden-Button
Auf den ersten Blick wirkt das Ergebnis korrekt. Die Grafik wird wie gewünscht gestreckt
und auch der Text ist richtig positioniert. Bei Betätigung des Buttons wird auch das richtige
Benutzerereignis ausgeführt. Allerdings erscheint der Button leblos, da es kein visuelles
Feedback gibt. Durch Benutzung des Trackballs lassen sich die GUI-Komponenten
fokussieren. Dies wird durch eine orangene Umrandung bzw. Einfärbung dargestellt. Wird
ein Button betätigt, so wird dies durch eine gelbe Einfärbung repräsentiert. Folgende
Abbildung zeigt die verschiedenen Zustände eines Buttons:
Abb. 36: Zustände eines Buttons: normal (links), fokussiert (Mitte), gedrückt (rechts)
68
4 Entwicklung eines Anmeldeformulars
All dies trifft auf den angepassten Anmelden-Button nicht zu. Die Suche nach
entsprechenden Layout-Attributen blieb erfolglos. Somit ist das Problem zu diesem
Zeitpunkt nicht lösbar.
4.5 Internationalisierung
In diesem Unterkapitel wird erläutert, wie eine Applikation zu entwickeln ist, damit sie
ohne Änderung des Quellcodes an andere Sprachen angepasst werden kann.
Die Bezeichnung Internationalisierung (I18N
Bereiche:
■
■
■
■
■
■
■
109
) umfasst in der Informatik folgende
Sprache der Benutzeroberfläche
Zeichensatz
Tastaturlayout
Zahlenformat
Währungsformat
Datumsformat
Zeitformat
Da in dieser Arbeit nur exemplarisch gezeigt wird, wie sich Mehrsprachigkeit mit Android
umsetzen lässt, werden die restlichen Bereiche übergangen.
4.5.1
Strings-Ressource
Wie bereits am Anfang des Kapitels erwähnt ist die Datei res/values/strings.xml die
Ressource für Strings innerhalb einer Applikation. Für die Umsetzung von Mehrsprachigkeit
ist es zwingend erforderlich, die Texte aus den Layouts zu extrahieren und zentral in einer
Strings-Ressource zu speichern.
Am Beispiel von login.xml bedeutet dies:
<TextView android:text="Benutzer:" />
<TextView android:text="Passwort:" />
<Button android:text="anmelden" />
Wird zu:
<TextView android:text="@string/user" />
<TextView android:text="@string/password" />
<Button android:text="@string/login" />
109
Die englische Übersetzung „internationalization“ wird häufig mit I18N abgekürzt, da sich 18
Buchstaben zwischen „I“ und „N“ befinden.
69
4 Entwicklung eines Anmeldeformulars
Die Datei res/values/strings.xml wird erweitert um:
<string name="user">Benutzer:</string>
<string name="password">Passwort:</string>
<string name="login">anmelden</string>
Um die Applikation für die Sprachen Deutsch, Englisch und Französisch zu
internationalisieren, ist es notwendig, für jede Sprache eine Kopie der Datei strings.xml
anzulegen und in folgende Unterordner zu kopieren:
■ res/values-de für Deutsch
■ res/values-en für Englisch
■ res/values-fr für Französisch
Der Namen der Ordner bildet sich demzufolge aus der Zeichenkette „values-“ und einem
Länderkürzel nach ISO 639-1.
Nachdem diese Dateien übersetzt wurden, hat z.B. die französische Strings-Ressource
res/values-fr/strings.xml folgenden Inhalt:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="user">client:</string>
<string name="password">mot de passe:</string>
<string name="login">s'inscrire</string>
</resources>
Da die XML-Dateien in UTF-8 kodiert sind, stellen sämtliche Sprachen samt Sonderzeichen
kein Problem dar. Die für XML reservierten Zeichen werden durch den Android Resource
Editor in passende Entitäten gewandelt.
Da die Strings noch in der Datei res/values/strings.xml definiert sind, wird Android
beim Programmstart diese Strings benutzen. Erst wenn explizit auf eine andere Sprache
umgeschaltet wird, lädt das System die entsprechende länderabhängige Ressource. Wenn
die Strings dort entfernt werden, startet jede Applikation mit englischer Ländereinstellung.
Das liegt daran, dass bisher nur englische Versionen von Android verfügbar sind.
70
4 Entwicklung eines Anmeldeformulars
4.5.2
Umschalten der Ländereinstellung
Für das Umschalten auf eine bestimmte Ländereinstellung wird die in Java gebräuchliche
Klasse java.util.Locale benutzt. Die Methode getResources der Elternklasse
android.app.Activity liefert eine Instanz der Klasse android.content.res.Resources
zurück.
Diese
Ressource
beinhaltet
eine
Instanz
der
Klasse
android.content.res.Configuration, in die das jeweilige Locale einzutragen ist:
Im folgenden Beispiel wird auf deutsche Ländereinstellung umgeschaltet:
Resources resource = getResources();
Configuration conf = resource.getConfiguration();
DisplayMetrics dm = resource.getDisplayMetrics();
conf.locale = Locale.GERMANY;
resource.updateConfiguration(conf, dm);
Locale.setDefault(conf.locale);
setContentView(R.layout.login);
Im letzen Schritt wird das Layout erneut gesetzt. Dabei gehen alle Benutzereingaben
verloren. Diese sind ggfs. zu sichern und anschließend zu restaurieren.
71
5 Entwicklung eines Sportwetten-Prototyps
5 Entwicklung eines Sportwetten-Prototyps
In diesem Kapitel wird der Prototyp einer Sportwetten-Applikation entwickelt. Im ersten
Schritt werden Sportwetten erläutert. Es folgt ein Unterkapitel über die grafische
Benutzerschnittstelle. Anschließend wird versucht, bestehende Java-Bibliotheken in
Android zu integrieren. Aufgrund der Schwierigkeiten wurde ein spezielles Werkzeug zur
Darstellung von Abhängigkeitsbäumen entwickelt, welches im nächsten Abschnitt
vorgestellt wird. Zuletzt wird der Prototyp an bestehende Server-Software angebunden.
5.1 Sportwetten
Bei einer Sportwette werden Geldeinsätze auf das Eintreffen eines bestimmten
Sportereignisses getätigt. Um eine solche Sportwette abzuschließen begibt sich der Kunde
in ein Wettlokal, füllt einen Wettschein aus und hinterlegt den Wetteinsatz. Der potentielle
Gewinn hängt von der Gewinnquote ab, die von einem Buchmacher angeboten wird.
Folgendes Beispiel zeigt ein Wettereignis auf einem Wettschein: 110
Ereignis
1
X
2
Bayern München vs. Borussia Dortmund 1,80 3,20 4,0
Tab. 26: Wettereignis auf einem Wettschein
Der Ausgang „1“ repräsentiert den Sieg der zuerst benannten Mannschaft Bayern
München. Analog dazu bezeichnet „2“ den Sieg von Borussia Dortmund. Ein Unentschieden
in dem Fußballspiel wird durch „X“ symbolisiert. Wird nun eine Wette in Höhe von 15 EUR
auf Borussia Dortmund abschlossen, so wäre der Gewinn 60 EUR. Dies wird berechnet,
indem der Wetteinsatz 15 EUR mit der Gewinnquote 4,0 multipliziert wird. Der Reingewinn
beträgt 45 EUR, da von dem Gewinn 60 EUR die 15 EUR Wetteinsatz zu subtrahieren sind.
In der Praxis ist noch die Buchmacher-Marge abzuziehen, die meistens prozentual vom
Wetteinsatz berechnet wird. 111
Systemwette
Neben dieser Einzelwette gibt es die Systemwette, bei der auf Kombinationen von
Einzelwetten gewettet wird. Beispielsweise bezeichnet die Systemwette „3 aus 5“ alle
Dreierkombinationen von 5 Einzelwetten. Rechnerisch sind dies 10 unterschiedliche
Dreierkombinationen. Der Gewinn errechnet sich hierbei aus der Anzahl richtig getippter
Kombinationen und ist vergleichbar mit dem Lottospiel „6 aus 49“. 112
110
Vgl. [Wiki09j]
Vgl. [Wiki09j]
112
Vgl. [Wiki09j]
111
72
5 Entwicklung eines Sportwetten-Prototyps
5.2 Grafische Benutzerschnittstelle
In diesem Unterkapitel wird die GUI des Sportwetten-Prototyps besprochen. Da bereits im
vorherigen „Kapitel 4 Entwicklung eines Anmeldeformulars“ detailliert die Entwicklung
dargestellt wurde, werden hier nur einige Besonderheiten gezielt erläutert.
5.2.1
Aktivitätsdiagramm
Folgendes Aktivitätsdiagramm zeigt die einzelnen Activities und damit den Workflow der
Applikation:
Abb. 37: Aktivitätsdiagramm des Sportwetten-Prototyps
Von jeder Activity außer Splashscreen und Anmeldung lässt sich das Hauptmenü über die
Menü-Taste erreichen. Dies wurde aus Gründen der Lesbarkeit nicht extra modelliert. Der
Knoten „finaler Flow“ wurde an mehreren Stellen gewählt um das Ende eines Workflows
darzustellen. Dies wird durch eine Activity mit dem Text This activity is currently
under construction dargestellt. Als Begründung dafür ist aufzuführen, dass der
Auftraggeber dem Autoren Designvorschläge in HTML bereitgestellt hat, die an diesen
Stellen nicht weiterführen.
73
5 Entwicklung eines Sportwetten-Prototyps
5.2.2
Listen
In den Activities Hauptmenü und Konto aufladen stehen dem Benutzer mehrere
Möglichkeiten zur Auswahl. Hinzu kommen die Activities Sportart, Land und Liga, die im
Diagramm vereinfach modelliert wurden.
Android stellt für solche Fälle die Klasse android.app.ListActivity zur Verfügung. Es ist
lediglich eine Liste zu füllen, die anschließend dargestellt wird. Jedes Element dieser Liste
besteht aus einem Text und einem Intent. Die Klasse android.content.Intent stellt in
Android die Möglichkeit bereit, von einer Activity zur nächsten zu gelangen. Folgender
Quellcode beendet die aktive Activity und zeigt das Hauptmenü an:
Intent intent = new Intent();
intent.setClass(this, HauptmenuListActivity.class);
startActivity(intent);
Um das Layout der Liste anzupassen besteht die Möglichkeit, das Layout einer Zeile gegen
ein selbst erstelltes auszutauschen. Es soll nicht nur ein Text dargestellt werden, sondern
auch ein Icon links daneben. Dafür existiert die Klasse android.widget.SimpleAdapter.
Um diese zu benutzen, muss der Entwickler die Liste selbständig verwalten. Die
Entscheidung fiel zu Gunsten einer Struktur aus, die aus einer ArrayList besteht, deren
Elemente Maps sind. In diese Maps werden nun pro Listeneintrag das Icon, der Text und das
Intent gefüllt. Die Liste wird dann als Variable so definiert:
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Das Layout für die Listenzeile hauptmenu_list_row.xml ist ein LinearLayout. Dieses
besteht aus den Komponenten ImageView mit der ID @+id/icon und einem TextView mit
der ID @+id/item.
Alle Informationen werden dem SimpleAdapter übergeben und für die Activity aktiviert:
private static final String ITEM = "item";
private static final String ICON = "icon";
private static final String[] PARAM = { ITEM, ICON };
SimpleAdapter notes = new SimpleAdapter(this, list,
R.layout.hauptmenu_list_row, PARAM, new int[] { R.id.item,
R.id.icon });
setListAdapter(notes);
74
5 Entwicklung eines Sportwetten-Prototyps
Folgende Abbildung zeigt die Activity Hauptmenü mit den angepassten Listenzeilen:
Abb. 38: Die Activity Hauptmenü des Sportwetten-Prototyps
5.2.3
Dynamisches Layout mit Java
In der Activity Quoten werden mehrere Wettereignisse wie auf einem Wettschein
dargestellt. Dafür muss jede Zeile das Ereignis und die drei Quoten „1“, „X und „2“
beinhalten. Die drei Quoten werden mit einem ToggleButton abgebildet. Der Versuch,
erneut eine ListActivity zu benutzen, schlug fehl, da der Adapter alle Click-Events der
Listenzeile verarbeitet und dadurch die Callback-Methoden der ToggleButtons nicht
aufgerufen werden.
Um dieses Problem zu lösen, wurde ein TableLayout gewählt. Dieses Layout besteht aus
TableRows, die wiederum beliebige Komponenten beinhalten können. Folgendes Layout
zeigt ein Wettereignis:
<TableLayout android:orientation="vertical">
<TableRow>
<TextView android:text="Bayern München vs. Borussia Dortmund"/>
<ToggleButton android:textOn="1,80" android:textOff="1,80"/>
<ToggleButton android:textOn="3,20" android:textOff="3,20"/>
<ToggleButton android:textOn="4,0" android:textOff="4,0"/>
</TableRow>
</TableLayout>
Pro Wetterereignis muss nun eine TableRow samt TextView und drei ToggleButtons
erzeugt werden. Da die Klassen in Java verfügbar sind, kann eine Methode createGame
entwickelt werden:
75
5 Entwicklung eines Sportwetten-Prototyps
public void createGame(TableLayout tl, String game, String quote0, String
quote1, String quote2) {
TableRow tr = new TableRow(this);
TextView tv = new TextView(this);
tv.setText(game);
tr.addView(tv);
ToggleButton tb1 = new ToggleButton(this);
tb1.setTextOn(quote0);
tb1.setTextOff(quote0);
tr.addView(tb1);
ToggleButton tb2 = new ToggleButton(this);
tb2.setTextOn(quote1);
tb2.setTextOff(quote1);
tr.addView(tb2);
ToggleButton tb3 = new ToggleButton(this);
tb3.setTextOn(quote2);
tb3.setTextOff(quote2);
tr.addView(tb3);
tl.addView(tr);
}
Es ist anzumerken, dass ToggleButtons zwei verschiedene Beschriftungen erhalten
können, für die Zustände „eingedrückt“ und „nicht eingedrückt“. Daher wurde die Quote
doppelt gesetzt.
Da Wettereignisse an verschiedenen Tagen stattfinden, wird in der Tabelle eine weitere
Zeile mit Datum und Überschrift eingefügt. Dafür wurde analog verfahren. Folgende
Abbildung zeigt die Activity Quoten mit zwei Wettereignissen an zwei verschiedenen Tagen.
Abb. 39: Die Activity Quoten des Sportwetten-Prototyps
76
5 Entwicklung eines Sportwetten-Prototyps
5.3 Integration des Frameworks log4j
Bisher wurden viele Klassen aus dem Android SDK vorgestellt. Da für den SportwettenPrototyp möglichst viele bestehende Java-Quelltexte wiederverwendet werden sollen, die
nicht mit Android sondern mit Java SE und Java EE entwickelt wurden, wird in diesem
Unterkapitel versucht diese zu integrieren. Da das Logging-Framework log4j von allen
bestehenden Klassen des Auftraggebers benutzt wird, hat die Anbindung dieses
Frameworks die oberste Priorität.
5.3.1
log4J
Das Open-Source-Framework log4j der Apache Software Foundation ist der De-factoStandard zum Loggen von Meldungen in Java-Anwendungen. Über Logger gelangen die
Nachrichten ins System und werden dort nach Wichtigkeit eingeteilt. Mittels einer
Properties-Datei wird das Format der Meldungen konfiguriert und die Appender eingestellt.
Appender sind dafür verantwortlich, wohin das Log geschrieben wird. Zur Auswahl dabei
stehen beispielsweise Standardausgabe, Textdateien oder HTML-Dateien. Auch kann in der
Properties-Datei die Wichtigkeit der Nachrichten eingestellt werden. Dadurch können
Debug-Ausgaben im Quellcode bestehen bleiben, und werden dennoch nicht geloggt. Es
gibt folgende Wichtigkeitsstufen:
■
■
■
■
■
■
Trace
Debug
Info
Warn
Error
Fatal
5.3.2
Probleme bei der Integration
Damit eine Klasse log4J benutzen kann, muss als erstes das Java-Archiv log4j.jar
eingebunden werden. Pro Klasse wird dann eine statische Variable definiert, der ein Logger
zugewiesen wird. Als Parameter wird dabei ein Class-Objekt übergeben:
private static Logger logger = Logger.getLogger(LoginActivity.class);
Innerhalb der Klasse kann dann mittels folgenden Aufrufs in der Wichtigkeitsstufe Debug
geloggt werden:
logger.debug("Test");
Das erste Problem besteht darin, log4j zu initialisieren. Es wurde vom Autor keine
Möglichkeit gefunden, dem Framework die Properties-Datei zu übergeben. Weiterhin
besteht das Problem, dass kein Appender für Android existiert. Eine Ausgabe auf die
Standardausgabe wird ignoriert und in eine Log-Datei zu schreiben erweist sich als ebenso
schwierig.
77
5 Entwicklung eines Sportwetten-Prototyps
5.3.3
Logging mit Android
Unter Android existiert die Klasse android.util.Log, die statische Methoden wie d
bereitstellt. d ist dabei als Abkürzung für das Log-Level Debug zu verstehen:
Log.d("LoginActivity", "Test");
Im Dalvik Debug Monitor Service und in Eclipse gibt es einen View namens LogCat. Dorthin
werden alle Nachrichten geschrieben. Es besteht die Möglichkeit Nachrichten anhand eines
Schlagwortes zu filtern. Der erste Parameter LoginActivity ist genau dieses Schlagwort.
Es wird empfohlen bei allen Activities einer Application das gleiche Schlagwort zu
verwenden und im Filter einzustellen.
5.3.4
Problemlösungen
Für die Probleme, log4j unter Android zu integrieren, wurden folgende Lösungen gefunden:
■ Programmierung von einem Appender für LogCat
■ Initialisierung von log4j im Quellcode und ohne Properties-Datei
Um einen Appender für log4j zu programmieren, ist es wichtig von der Klasse
org.apache.log4j.AppenderSkeleton zu erben und die Methode append zu
überschreiben. Durch den Parameter LoggingEvent werden alle Informationen
bereitgestellt. Innerhalb einer switch-Anweisung werden die verschiedenen Log-Levels
verarbeitet und die entsprechenden Logging-Methoden von Android aufgerufen.
78
5 Entwicklung eines Sportwetten-Prototyps
private class LogCatAppender extends AppenderSkeleton {
public LogCatAppender(Layout layout) {
setLayout(layout);
}
protected void append(LoggingEvent le) {
String name = "Log4j";
switch (le.getLevel().toInt()) {
case Level.FATAL_INT:
Log.e(name, getLayout().format(le));
case Level.ERROR_INT:
Log.e(name, getLayout().format(le));
case Level.WARN_INT:
Log.w(name, getLayout().format(le));
case Level.INFO_INT:
Log.i(name, getLayout().format(le));
case Level.DEBUG_INT:
Log.d(name, getLayout().format(le));
case Level.TRACE_INT:
Log.v(name, getLayout().format(le));
}
}
break;
break;
break;
break;
break;
break;
public void close() {
}
public boolean requiresLayout() {
return true;
}
}
Die Schwierigkeit beim Initialisieren von log4j besteht aus dem richtigen Zeitpunkt. Eine
Activity erbt von der Elternklasse. Die erste Methode, die aufgerufen wird, ist die
überschriebene Callback-Methode onCreate. Zu diesem Zeitpunkt ist die Klasse bereits
instanziiert und es können Fehler aufgetreten sein, die nicht mehr ins Log gelangen. Die
Konstruktoren zu überschreiben ermöglicht die gleiche Fehlerquelle. Das Framework muss
also vor der Ausführung des Konstruktors der Elternklasse initialisiert werden. In der
Programmiersprache Java existiert die Möglichkeit einen parameterlosen Konstruktor zu
implementieren. Dieser wird vom ClassLoader aufgerufen, wenn die Klasse das erste Mal
geladen wird:
1 {
2
3
4
5
6 }
PatternLayout pl = new PatternLayout("[%5p]%23c{1}:%4L - %m%n");
Logger.getRootLogger().addAppender(new LogCatAppender(pl));
Logger.getRootLogger().setLevel(Level.TRACE);
Logger.getRootLogger().info("Log4j initialized");
79
5 Entwicklung eines Sportwetten-Prototyps
Sportwetten
Der Parameter im Konstruktor von PatternLayout (Zeile 2) konfiguriert das Format der
Log-Meldung und bedeutet:
■
■
■
■
■
■
schreibe das 5 Zeichen lange Log-Level
Log
rechtsbündig in eckige Klammern
schreibe den 23 Zeichen langen
lange Klassennamen rechtsbündig
schreibe einen Doppelpunkt
schreibe die 4 Zeichen lange Zeilenangabe
Zeile
rechtsbündig
schreibe Leerzeichen, Trennstrich, Leerzeichen
schreibe die Log-Nachricht
Nachricht
Folgende Abbildung zeigt die Log-Ausgaben
Log
in LogCat in Eclipse:
Abb. 40: log4j-Ausgaben in LogCat
80
5 Entwicklung eines Sportwetten-Prototyps
5.4 Integration der bestehenden Klasse EntityStore
Da möglich viele Quelltexte des Auftraggebers adaptiert werden sollen, wird in diesem
Unterkapitel versucht die zentrale Klasse sportbet.client.common.store.EntityStore
aus der Java-Bibliothek ebet-client-common.jar einzubinden. Diese Klasse stellt in Form
eines Caches alle Objekte bereit, die für Sportwetten relevant sind.
Es ist festzuhalten, dass das Einbinden der Bibliothek und das Instanziieren der Klasse
EntityStore durch den Default-Konstruktor reibungslos verliefen.
5.4.1
Serialisierung und Deserialisierung
Damit die Klasse EntityStore in einer Android-Applikation adäquat benutzt werden kann,
muss sie mit Daten gefüllt sein. Die bequemste Art diese Daten dem Sportwetten-Prototyp
bereitzustellen, besteht darin, die gesamte Klasse innerhalb einer existierenden und
laufenden Anwendung zu serialisieren. Dabei werden alle Objekte und Referenzen in einer
sequentiellen Datei als Folge von Bytes gespeichert. Innerhalb von Android kann diese Datei
geladen und die Klasse EntityStore in den gleichen Zustand gebracht werden, in dem sie
gespeichert wurde. Einlesen der Datei und das Wiederherstellen des serialisierten
Zustandes wird als Deserialisierung bezeichnet.
Damit eine Klasse serialisiert werden kann, muss das Interface java.io.Serializable
implementiert werden. Es existieren keine zu implementierenden Methoden. Folgender
Quellcode serialisiert die Instanz entityStore in die Datei entitystore.ser:
FileOutputStream fos = new FileOutputStream("entitystore.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(entityStore);
Der folgende Quellcode deserialisiert die Datei entitystore.ser und erzeugt eine neue
Instanz der Klasse EntityStore:
FileInputStream fis = new FileInputStream(("entitystore.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
EntityStore entityStore = (EntityStore) ois.readObject();
Da innerhalb von Android die bekannten Schwierigkeiten mit Dateien bestehen, wurde die
Lösung verwendet, die Datei von einem Webserver herunterzuladen. Damit eine
Application überhaupt aufs Internet zugreifen kann, muss innerhalb vom Manifest folgende
Berechtigung vergeben werden:
<uses-permission android:name="android.permission.INTERNET" />
Wie im „Kapitel 3.1.4 Android Runtime“ erwähnt, existieren innerhalb der Android
Runtime-Schicht Pakete von Drittanbietern für die Unterstützung der Protokolle HTTP und
HTTPS. Daher wird die Klasse org.apache.http.impl.client.DefaultHttpClient
benutzt, um eine mittels HTTP-GET die Datei von einem Webserver anzufragen. Die mittels
HTTP-RESPONSE erhaltene Datei wird in ein Byte-Array überführt und von dort mit einem
ObjectInputStream in eine Instanz von EntityStore deserialisiert:
81
5 Entwicklung eines Sportwetten-Prototyps
DefaultHttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(new URI("http://www.server.de/entitystore.ser"));
HttpResponse res = client.execute(get);
byte[] buffer = EntityUtils.toByteArray(res.getEntity());
ObjectInputStream ois = new ObjectInputStream(new
ByteArrayInputStream(buffer));
EntityStore entitystore = (EntityStore) ois.readObject();
5.4.2
Fehlende Klassen
Nachdem nun die Klasse EntityStore mittels Deserialisierung in den Zustand gebracht
werden kann, in dem sie in der laufenden Anwendung gespeichert wurde, tauchen neue
Probleme auf: Android registriert erst zu Laufzeit, dass die Klasse
java.beans.PropertyChangeListener fehlt und bricht mit der entsprechenden
Fehlermeldung ab:
03-18 17:24:07.317: WARN/dalvikvm(1783): VFY: unable to resolve new-instance 303
(Ljava/beans/PropertyChangeSupport;) in Lsportbet/common/i18n/LangString;
Laut einer Internet-Recherche sind folgende Pakete nicht in Android vorhanden: 113
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
.
java.applet
java.awt
java.beans
java.lang.management
java.rmi
javax.accessibility
javax.activity
javax.imageio
javax.management
javax.naming
javax.print
javax.rmi
javax.security.auth.kerberos
javax.security.auth.spi
javax.security.sasl
javax.swing
javax.transaction
javax.xml
org.ietf
org.omg
org.w3c.dom
Damit sind die Richtigkeit der Fehlermeldung und das Fehlen der Klasse bestätigt. Da die
Quelltexte der Java SDK frei verfügbar sind, ist es naheliegend, die fehlende Klasse zu
kopieren und dem Android-Projekt hinzuzufügen. Vom Java-Compiler wird die Klasse
akzeptiert, da keine weiteren Abhängigkeiten bestehen. Der Dalvik Cross-Compiler bricht
mit folgender Fehlermeldung ab:
113
Vgl. [Burn08]
82
5 Entwicklung eines Sportwetten-Prototyps
Attempt to include a core VM class in something other than a core library. It is likely that
you have attempted to include the core library from a desktop virtual machine into an
application, which will most assuredly not work. If you really intend to build a core library -which is only appropriate as part of creating a full virtual machine binary, as opposed to
compiling an application -- then use the "--core-library" option to suppress this error
message. If you go ahead and use "--core-library" but are in fact building an application,
then please be aware that your build will still fail at some point; you will simply be denied
the pleasure of reading this helpful error message.
5.4.3
Core-Library
Die Fehlermeldung vom Dalvik Cross-Compiler besagt, dass durch den Parameter
-–core-library das Problem behoben werden kann. Daher wurde in der IDE Eclipse nach
einer Möglichkeit gesucht, diesen Parameter zu setzen. Da keine entsprechenden
Einstellungen gefunden wurden, bestand die nächste Idee darin, den Quellcode vom
Android Development Toolkit Plug-In für Eclipse zu beschaffen und dort die passende Stelle
abzuändern. Der Autor verfügt über keinerlei Erfahrung mit der Entwicklung von EclipsePlug-Ins, so dass diese Idee wieder verworfen wurde.
Patch für Dalvik Cross-Compiler
Da der Fehler vom Dalvik Cross-Compiler ausgegeben wird, wurde das Werkzeug dx näher
betrachtet. Diese Batchdatei im Ordner tools vom installierten SDK startet die Datei
dx.jar. Ein Java-Archiv beinhaltet immer ein Manifest, in dem angegeben wird, welche
Klasse ausgeführt werden soll. Die Zeile im MANIFEST.MF im dx.jar lautet:
Main-Class: com.android.dx.command.Main
Dadurch wird klar, dass der Dalvik Cross-Compiler ein Java-Programm ist. Wie im
„Kapitel 3.2 Software Development Kit“ beschrieben, wurden mittels Git alle Dateien von
Android heruntergeladen und die Quelltexte für dx gefunden. Mit diesen Quelltexten
wurde ein neues Java-Projekt in Eclipse erzeugt, so dass bequem nach der Fehlermeldung
als String gesucht werden kann. Diese taucht nur an einer einzigen Stelle auf: in der Klasse
com.android.dx.command.dexer.Main in der Methode checkClassName. Dort wird
überprüft, ob ein Paketname mit java oder javax anfängt oder ob folgende Pakete
vorkommen:
83
5 Entwicklung eines Sportwetten-Prototyps
■
■
■
■
■
■
■
■
■
■
■
■
■
■
accessibility
crypto
imageio
management
naming
net
print
rmi
security
sound
sql
swing
transaction
xml
Wird ein entsprechendes Paket gefunden, so wird die Fehlermeldung ausgegeben. Ein
Unterdrücken der Fehlermeldung würde keinen Sinn machen. Daher wurde nach der Stelle
gesucht, an der der Parameter --core-library ausgewertet wird:
} else if (arg.equals("--core-library")) {
coreLibrary = true;
Die Variable coreLibrary wird mit false initialisiert und nur an dieser Stelle auf true
gesetzt. Die Lösung besteht demzufolge darin, die Variable immer mit true zu initialisieren.
Dadurch wird der Dalvik Cross-Compiler vermeidlich immer mit dem Parameter
-–core-library aufgerufen.
Im letzen Schritt wurde das Projekt kompiliert, die JAR-Datei dx.jar erzeugt und gegen die
bestehende ausgetauscht.
5.5 Dependency Viewer
Durch den Patch für Dalvik Cross-Compiler und durch das Hinzufügen der fehlenden Klasse
java.beans.PropertyChangeListener waren noch nicht alle Probleme behoben. Es folgt
eine Liste der Klassen, die fehlten und erfolgreich ersetzt wurden:
■
■
■
■
■
■
■
javax.swing.event.EventListenerList
javax.ejb.FinderException
org.apache.commons.collections.IteratorUtils
org.apache.commons.beanutils.BeanComparator
java.rmi.ServerException
javax.ejb.EJBException
javax.security.auth.login.LoginContext
Bei der Klasse javax.naming.InitialContext klappte dieser Lösungsansatz nicht mehr, da
zu viele Abhängigkeiten zu anderen Klassen vom SDK existieren. Zu diesem Zeitpunkt wurde
84
5 Entwicklung eines Sportwetten-Prototyps
klar, dass die bestehenden Quelltexte abgeändert werden müssen. Die Frage dabei war,
welche der rund 3.000 Quelltexte zu viele Abhängigkeiten hat. Die Lösung für dieses
Problem ist ein Werkzeug, welches die Abhängigkeiten einer Klasse wie EntityStore in
einer Baumstruktur ausgibt. Damit ist es möglich die richtige Klasse zu finden, anzupassen
und dabei die Anzahl der Änderungen zu minimieren.
Auch wenn keins der evaluierten Tools dafür in Frage kam, so werden der Vollständigkeit
halber alle benannt:
■
■
■
■
■
■
■
■
■
JDepend
JarAnalyser
JavaDepend
Java Dependency Smart Analyser
Class Dependency Analyzer
Oops!
Java structural analysis
eDepend
ispace
5.5.1
Classycle
Bei der Suche nach einem Werkzeug zur Darstellung von Abhängigkeiten in Baumstruktur
fiel die Wahl auf Classycle. Dieses Java-Programm analysiert JAR-Dateien und versucht
zyklische Abhängigkeiten zu finden. Eine solche Abhängigkeit wird erzeugt, wenn sich zwei
Klassen gegenseitig referenzieren. Als Ergebnis wird eine XML-Datei erzeugt, die durch eine
XSL Transformation (XSLT) in einem Webbrowser betrachtet werden kann. Beim näheren
Betrachten dieser XML-Datei fiel auf, dass die Informationen für eine zu entwickelnde
Anwendung benutzt werden können.
5.5.2
Ant
Aufgerufen wird Classycle mit einem Ant-Script. Das Open Source Projekt Apache Ant 114 ist
ein in Java geschriebenes Werkzeug um XML-Batchdateien auszuführen. Dabei werden
viele Möglichkeiten bereitgestellt ganze Java-Projekte zu kompilieren, zu archivieren und
auszuliefern. Deswegen wird Ant auch häufig als Build-Werkzeug bezeichnet.115
Folgendes Beispiel zeigt, wie Classycle in einem Ant-Script aufgerufen wird. Dabei wird die
Bibliothek log4j.jar analysiert und die XML-Datei log4j.xml erzeugt:
<classycleReport reportFile="log4j.xml">
<fileset dir=".">
<include name="log4j.jar"/>
</fileset>
</classycleReport>
114
115
Ant (dt. Ameise) ist ein Akronym für Another Neat Tool (dt. Noch ein hübsches Werkzeug)
Vlg. [HaLo04 S. 34]
85
5 Entwicklung eines Sportwetten-Prototyps
5.5.3
Verarbeitung der XML-Datei
Für die Verarbeitung der XML-Datei gibt es neben der bekannten SAX- und DOM-Parser das
Framework Castor. Damit ist es möglich, anhand des XML Schemas (XSD) Java-Quelltexte
automatisch erzeugen zu lassen. Durch einen einzigen Aufruf im Programm wird dann die
XML-Datei geladen und die Klassen gefüllt. Dieser Vorgang wird als Unmarshalling
bezeichnet. Da für Classycle keine solche XSD-Datei existiert, ist dieses Framework nicht
einzusetzen.
Als Alternative wurde das Framework XStream benutzt. Der Entwickler hat einige Klassen zu
entwickeln um die XML-Datei nachzubilden. Dabei wird jedes XML-Element auf eine Klasse
und jedes XML-Attribut auf eine Variable der Klasse abgebildet. Wenn das XML-Element ein
oder mehrere Kind-Elemente enthält, so ist dies in der Klasse mit einer Liste nachzustellen.
Mit der Methode alias der Klasse com.thoughtworks.xstream.XStream wird dann das
Mapping festgelegt.
5.5.4
Algorithmus
Im ersten Schritt sind die Daten, die durch die Verarbeitung der XML-Datei bereitgestellt
wurden, in eine andere Form zu bringen. Es bietet sich eine HashMap an, in der als Schlüssel
der Klassenname und als Wert die Liste der abhängigen Klassen gespeichert werden.
Nach dieser Transformation ist der Algorithmus zu implementieren. Dabei ist die
Entscheidung zugunsten einer Rekursion getroffen worden. Nachdem eine Klasse als
Parameter an der Methode showDependency übergeben wurde, wird der Klassenname
ausgegeben. In der HashMap wird über alle abhängigen Klassen iteriert. Dabei wird für jede
abhängige Klasse die Methode rekursiv aufgerufen. Damit der Algorithmus terminiert, wird
jede bereits benutzte Klasse protokolliert. Für eine protokollierte Klasse wird die Rekursion
übersprungen. Denn durch eine zyklische Abhängigkeit zwischen zwei Klassen würde die
Rekursionstiefe unendlich werden.
5.5.5
Ausgabe als HTML
Im ersten Schritt wurde die Ausgabe vom Algorithmus auf die Konsole geschrieben. Mittels
Leerzeichen pro Rekursionsstufe wurde die Einrückung erreicht, die letztendlich die
Baumstruktur ergibt. Da aber eine Webseite besser lesbar und benutzerfreundlicher ist,
wurde nach einer Möglichkeit gesucht, den erzeugten Abhängigkeitsbaum als Webseite
auszugeben. In HTML existiert das Tag <pre>, mit dem sich ein Text samt Umbrüche in
nicht-proportionaler Schriftart darstellen lässt.
Da es sinnvoll ist, die in „Kapitel 5.4.2 Fehlende Klassen“ benannten fehlenden Pakete
farblich zu markieren, wurde überprüft, welche Tags innerhalb von <pre> erlaubt sind.
Dabei fiel auf, dass nur folgende Tags gültig sind:
86
5 Entwicklung eines Sportwetten-Prototyps
Tag
<b>
<i>
<u>
Bedeutung
bold (dt. fett)
italic (dt. kursiv)
underline (dt. unterstrichen)
Tab. 27: Gültige Tags innerhalb von <pre>
Um eine rote Färbung der fehlenden Klassennamen zu erhalten, wird das Tag <b> benutzt.
Mittels CSS wird die Schriftdicke auf normale Breite und die Farbe auf rot gesetzt:
<style type="text/css">
b {
color: red;
font-weight: normal;
}
</style>
5.5.6
DependencyViewer als Ant-Task
Damit der Benutzer zum Betrachten vom Abhängigkeitsbaum nicht ein Ant-Script und ein
Java-Programm ausführen muss, wurde der DependencyViewer um eine Anbindung an Ant
erweitert. Dafür ist eine Klasse zu schreiben, die von der Oberklasse
org.apache.tools.ant.Task erbt. Dafür muss die Methode execute überschrieben
werden. Es genügt dort den Konstruktor der Klasse DependencyViewer aufzurufen. Einen
Konstruktor braucht die Klasse DependencyViewerTask nicht zu implementieren. Damit aus
dem Ant-Script heraus Parameter übergeben werden können, müssen lediglich Variablen
definiert werden und passende Getter und Setter implementiert werden.
Um aus einem Ant-Script heraus Classycle und anschließend DependencyViewer
aufzurufen, ist folgender Code notwendig. In diesem Beispiel wird wieder log4j.jar
analysiert, die XML-Datei log4j.xml erzeugt und für die Klasse org.apache.log4j.Logger
ein Abhängigkeitsbaum in der Datei org.apache.log4j.Logger.html erstellt:
<classycleReport reportFile="gen/log4j.xml">
<fileset dir=".">
<include name="gen/log4j.jar"/>
</fileset>
</classycleReport>
<dependencyViewer root="gen"
xml="log4j.xml"
classname="org.apache.log4j.Logger"/>
Der Parameter root gibt lediglich den Unterordner gen an, in dem die JAR-Datei liegt und
die XML- und HTML-Datei geschrieben werden.
Folgende Abbildung zeigt den Abhängigkeitsbaum im Webbrowser:
87
5 Entwicklung eines Sportwetten-Prototyps
Abb. 41: Abhängigkeitsbaum der Klasse org.apache.log4j.Logger
5.6 Serveranbindung
Mit dem DependencyViewer konnte nun überprüft werden, welche Klasse zu viele
Abhängigkeiten zu Paketen besitzt, die in Android nicht enthalten sind: die Klasse
BSLHelper. Diese Klasse bietet die Schnittstelle zu der gesamten Controller-Schicht. Dafür
wird die Klasse BusinessServiceLocator benutzt, um auf dem Server mittels RMI die
jeweiligen Methoden auszuführen.
Da Android kein RMI unterstützt, bestand das Problem diese Anbindung herzustellen. Wie
bereits im „Kapitel 5.4.1 Serialisierung und Deserialisierung“ erwähnt unterstützt Android
die Protokolle HTTP und HTTPS. Dadurch besteht die Möglichkeit, auf der Server-Seite ein
Servlet zu implementieren, welches die Methodenaufrufe an BusinessServiceLocator
delegiert. Damit die Klasse EntityStore mit Referenzen auf BSLHelper nach dem
Deserialisieren funktioniert, muss auf der Client-Seite eine neue Klasse BSLHelper
geschrieben werden, die die Aufrufe an das Servlet und damit an den
BusinessServiceLocator weiterreicht.
88
5 Entwicklung eines Sportwetten-Prototyps
5.6.1
Servlet
Ein Servlet ist ein Java-Programm, welches auf einem Server in einer JVM ausgeführt wird
und wie eine Webseite angesprochen werden kann. Bei einer Webseite ist es üblich, die
Parameter über die URL zu übergeben. Dafür müssen die Sonderzeichen, die in einer URL
nicht erlaubt sind, encodiert werden. Ein solcher Aufruf mit dem Parameter Name und mit
dem Wert Müller lautet:
http://www.server.de/seite.html?Name=M%FCller
Auf diese Art ist es sehr schwierig ist, komplexe Objekte zu übertragen.
Eine Servlet-Klasse muss von der Oberklasse javax.servlet.http.HttpServlet erben und
die Methoden doGet oder doPost oder beide überschreiben. Beide Methoden besitzen die
Parameter HttpServletRequest und HttpServletResponse:
protected void doPost(HttpServletRequest requ, HttpServletResponse resp)
throws ServletException, IOException {
}
Beide Parameter verfügen über Methoden, die einen ServletOutputStream bzw.
ServletInputStream zurückgeben. Daher liegt die Vermutung nahe, dass ganze Objekte
vom Client zum Servlet über einen Stream übertragen werden können. Nach mehreren
Versuchen hat sich dieses Szenario als das einzige funktionierende erwiesen:
■
■
■
■
Client schickt Objekt A über den ObjectOutputSteam
Servlet empfängt Objekte A über den ObjectInputStream
Servlet schickt Objekt B über den ObjectOutputSteam
Client empfängt Objekt B über den ObjectInputStream
Nun stellt sich die Frage, von welchem Typ das Objekt ist, welches der Client dem Servlet
schickt. Das Servlet muss das Objekt auf den richtigen Typen casten, bevor er es
weitergeben kann. Beispielsweise kann ein Protokoll zwischen Client und Server vereinbart
werden, in dem der Klassenname als erster Parameter vom Typ String versendet wird. Dies
hätte viele Fallunterscheidungen zur Folge, da BusinessServiceLocator mehrere hundert
Methoden bereitstellt.
Am bequemsten ist es, dies über Java Reflection zu lösen. Mit diesem API, das sowohl in
Java SE als auch in Android integriert ist, ist es möglich sämtliche Informationen über eine
Klasse zu erhalten, ohne diese zu instanziieren:
■ Name der Klasse
■ Name der Methoden
■ Anzahl und Typen der Methoden-Parameter
Da die Lösung über die Client-Server-Kommunikation eine Brücke zwischen BSLHelper und
BusinessServiceLocator in einem funktionierenden System darstellt, ist nur dafür zu
sorgen, dass die Kommunikation fehlerfrei funktioniert.
89
5 Entwicklung eines Sportwetten-Prototyps
Daher wird als Protokoll vereinbart:
■
■
■
■
■
■
Client sendet dem Servlet den Service-Namen als String
Client sendet dem Servlet den Methoden-Namen als String
Client sendet dem Servlet die Anzahl der Parameter als Integer
Client sendet dem Servlet die Parameter als Object-Array
Servlet sendet dem Client ein Rückgabewert als Object
Servlet sendet dem Client eine Exception als Object
5.6.2
Client
Damit der Client mit dem Servlet kommunizieren kann, wird eine Instanz der Klasse
URLConnection benötigt. Diese muss in beide Richtungen geöffnet werden, damit die
Objekte mittels Streams übertragen werden können:
URL url = new URL(SERVLET);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
Wie bereits erwähnt gibt es mehrere hundert Methoden, die der Client dem Servlet zu
überreichen hat. Damit nicht alle Methoden implementiert werden müssen, besteht auch
hier die Möglichkeit dies generisch zu lösen. Dafür wird eine Klasse HttpInvoker
entwickelt, die das Interface InvocationHandler implementiert und folgende Methode
bereitstellt: 116
Object invoke(Object proxy, Method methode, Object[] args) throws Throwable
Um das Protokoll erfüllen zu können, werden noch folgende Objekte benötigt:
■ Service-Name:
String serviceName = proxy.getClass().getInterfaces()[0].getName()
■ Methoden-Name:
method.getName()
■ Anzahl der Parameter:
args.length
■ Parameter als Object-Array:
args
Zuletzt ist eine Kopie der Klasse BSLHelper für den Client zu erzeugen. In den Methoden
wird anstelle von BusinessServiceLocator nun HttpInvoker aufgerufen.
116
Vgl. [Nowa05, S. 183]
90
6 Fazit
6 Fazit
Um diese Arbeit abschließend zu beurteilen, muss zwischen den Erfahrungen mit Android
und der Umsetzung des Prototyps unterschieden werden.
Android
Die ersten Schritte bei der Entwicklung verliefen schleppend. Als Grund dafür ist die
unübersichtliche Online-Dokumentation zu benennen. Diese wurde jedoch in den letzen
Monaten deutlich verbessert. Dem Autor bot sich lediglich die Möglichkeit, die Fragen in
Foren und der Google Groups „Android Developers“ zu stellen. Es ist positiv festzuhalten,
dass die Google-Entwickler persönlich sehr präsent waren und bestmöglich geholfen haben,
Lösungen zu finden. Die optische Gestaltung von Android ist trotz der technischen
Möglichkeiten nicht sehr ansprechend. Als Beispiel sind weiße GUI-Komponenten auf
schwarzem Hintergrund zu benennen, die bei Betätigung orange aufleuchten. Hier ist
seitens eines Applikationsentwicklers viel zusätzliche Designarbeit zu leisten. Des Weiteren
wurde die Benutzung der aufklappbaren Tastatur vom Autoren und den Auftraggebern als
umständlich empfunden. In der neusten Android-Version 1.5 ist eine virtuelle Tastatur
enthalten, wie sie vom iPhone bekannt ist. Laut Internetquellen ist Multi-Touch mit Android
möglich. Dass dieses innovative Bedienungskonzept bisher nicht integriert wurde, hat
urheberrechtliche Gründe, da Apple dafür ein Patent angemeldet hat. Abschließend ist
festzuhalten, dass Android für ein Open Source-Projekt erstaunlich ausgereift ist und
vielfältige Entwicklungswerkzeuge bereitstellt. Es bleibt zu hoffen, dass in Zukunft viele
Entwickler dazu beitragen Android weiterhin zu verbessern.
Umsetzung des Prototyps
Für den Lösungsansatz, möglichst viel Logik auf dem Server zu belassen und Android
(beispielsweise durch einen Patch am Dalvik Cross-Compiler) zu zwingen diese anzubinden,
sind größtenteils die Auftraggeber verantwortlich. Diese Strategie wurde mit
akademischem Interesse betrachtet und erfolgreich umgesetzt. Nach Meinung des Autors
wäre es vorteilhafter gewesen, zu einem frühen Zeitpunkt die Quelltexte zu refaktorieren
und die Logik auf Android auszulagern. Dadurch würde die Applikation deutlich schneller
auf Benutzereingaben reagieren und weniger kostspielige Internetverbindungen benötigen.
Zusammenfassend ist festzuhalten, dass das oberste Ziel, möglichst viele Java-Quelltexte
der bereits existierenden Software zu adaptieren, erreicht und ein funktionierender
Prototyp realisiert wurde.
91
Abkürzungsverzeichnis
Abkürzungsverzeichnis
2G
3G
AAPT
ADB
ADC
ADT
AIDL
AMOLED
ANT
APK
AUD
AWT
CDC
CLDC
CSS
CVS
Dalvik VM
DDMS
DOM
DSP
DX
EITO
EUR
GPL
GPLv2
GUI
HAL
HTC
I18N
IDE
IDL
IMEI
ISO
JAD
JAR
Java EE
Java ME
Java SE
JVM
KVM
LGPL
LwVCL
MIDP
MTJ
MWT
OHA
Second Generation
Third Generation
Android Asset Packaging Tool
Android Debug Bridge
Android Developer Challenge
Android Development Toolkit
Android Interface Description Language
Active Matrix Organic Light Emitting Diode
Another Neat Tool
Android Package
Australischer Dollar ($)
Abstract Window Toolkit
Connected Device Configuration
Connected Limited Device Configuration
Cascading Style Sheets
Concurrent Versions System
Dalvik Virtual Machine
Dalvik Debug Monitor Service
Document Object Model
Digital Signal Processing
Dalvik Cross-Compiler
European Information Technology Observatory
Euro (€)
GNU General Public License
GNU Public License Version 2
Graphical User Interface
Hardware Abstraction Layer
High Tech Computer
Internationalization
Integrated Development Environment
Interface Description Language
International Mobile Equipment Identity
Internationale Organisation für Normung
Java Application Descriptor
Java Archive
Java Plattform, Enterprise Edition
Java Platform, Micro Edition
Java Platform, Standard Edition
Java Virtual Machine
Kilobyte Virtual Machine
GNU Lesser General Public License
Light-Weight Visual Component Library
Mobile Information Device Profile
Eclipse Mobile Tools for Java
Micro Window Toolkit
Open Handset Alliance
93
Abkürzungsverzeichnis
OTA
PV
RPC
SAX
SD (Memory Card)
SDK
SIM (Card)
SQL
SSL
SVN
SWT
USD
UTF-8
VM
WTK
WYSIWYG
XML
XSD
XSL
XSLT
Over The Air
PacketVideo
Remote Procedure Call
Simple API for XML
Secure Digital (Memory Card)
Software Development Kit
Subscriber Identity Module (Card)
Structured Query Language
Secure Sockets Layer
Subversion
Standard Widget Toolkit
United States Dollar ($)
8-bit Unicode Transformation Format
Virtual Machine
Sun Java Wireless Toolkit for CLDC
What You See Is What You Get
Extensible Markup Language
XML Schema Definition
Extensible Stylesheet Language
XSL Transformation
94
Abbildungsverzeichnis
Abbildungsverzeichnis
Abb. 1: Die unterschiedlichen Java-Plattformen [Java09] ...................................................................... 4
Abb. 2: Verschiedenen Emulatoren vom WTK 2.2 [Karb05, S. 52] ......................................................... 6
Abb. 3: MPowerPlayer im Webbrowser Firefox mit dem Spiel Guitar Hero [Mpla09a] ......................... 7
Abb. 4: Klassenhierarchie für darstellbare Elemente des MIDP [SzRö06] .............................................. 9
Abb. 5: Login MIDlet [Logi08] ................................................................................................................. 9
Abb. 6: Demo-MIDlets vom Micro Window Toolkit [Micr07b] ............................................................. 10
Abb. 7: Demo-MIDlet von der Light-Weight Visual Component Library [Vish06c] ............................... 11
Abb. 8: Entwicklungsplattform TagsMe GUI [Tags09b] ........................................................................ 12
Abb. 9: Demo-Anwendung von TagsMe [Tags09c] ............................................................................... 13
Abb. 10: LWUIT Resource Editor [Knud08] ........................................................................................... 15
Abb. 11: Demo Anwendung von LWUIT [Knud08] ................................................................................ 15
Abb. 12: Apple iPhone 3G [Appl09a] .................................................................................................... 18
Abb. 13: Apple iTunes [Appl09b] .......................................................................................................... 19
Abb. 14: Die Android-Applikation Compare Everywhere [Andr09b] .................................................... 28
Abb. 15: Die Android-Applikation Cooking Capsules [Andr09c] ........................................................... 28
Abb. 16: Die Android-Applikation Wikitude [Andr09d] ........................................................................ 29
Abb. 17: Android Software Stack, bestehend aus fünf Schichten [Andr09e] ....................................... 32
Abb. 18: Beispiel-Button ....................................................................................................................... 40
Abb. 19: Beispiel-Button in X-Richtung gestreckt ................................................................................. 40
Abb. 20: Beispiel-Button als NinePatch-Grafik ..................................................................................... 41
Abb. 21: Draw 9-patch mit Beispiel-Button als NinePatch-Grafik ........................................................ 41
Abb. 22: Dalvik Debug Monitor Service ................................................................................................ 42
Abb. 23: T-Mobile G1 – HTC Dream [Spar09] ....................................................................................... 49
Abb. 24: Vodafone G2 – HTC Magic [Kret09a] ...................................................................................... 50
Abb. 25: HTC Hero [Kret09b] ................................................................................................................ 51
Abb. 26: Kogan Agora (Pro) [Kret09c] ................................................................................................... 52
Abb. 27: Lenovo OPhone [Melz08] ....................................................................................................... 53
Abb. 28: Samsung I7500 Galaxy [Kret09e] ............................................................................................ 54
Abb. 29: Das Android-Projekt: Anmeldeformular ................................................................................. 56
Abb. 30: Lebenszyklus einer Activity [Andr09p] ................................................................................... 60
Abb. 31: Layout vom Anmeldeformular ............................................................................................... 62
Abb. 32: Modaler Fehlerdialog vom Anmeldeformular ........................................................................ 64
Abb. 33: Kontextmenü (links) und Hilfe-Dialog (rechts) vom Anmeldeformular .................................. 65
Abb. 34: Anmeldeformular im Hochformat (links) und im Querformat (rechts) .................................. 67
Abb. 35: Anmeldeformular mit angepasstem Anmelden-Button ......................................................... 68
Abb. 36: Zustände eines Buttons: normal (links), fokussiert (Mitte), gedrückt (rechts)....................... 68
Abb. 37: Aktivitätsdiagramm des Sportwetten-Prototyps .................................................................... 73
Abb. 38: Die Activity Hauptmenü des Sportwetten-Prototyps ............................................................. 75
Abb. 39: Die Activity Quoten des Sportwetten-Prototyps .................................................................... 76
Abb. 40: log4j-Ausgaben in LogCat ....................................................................................................... 80
Abb. 41: Abhängigkeitsbaum der Klasse org.apache.log4j.Logger ....................................................... 88
95
Tabellenverzeichnis
Tabellenverzeichnis
Tab. 1: Übersicht Entwicklungsplattformen ........................................................................................... 3
Tab. 2: Kommerzielle Lizenzen für LwVCL............................................................................................. 11
Tab. 3: Freeware Alternativen zu iTunes .............................................................................................. 19
Tab. 4: Framework Bestandteile vom iPhone SDK ................................................................................ 20
Tab. 5: Dienstleistungen von Google Inc. ............................................................................................. 23
Tab. 6: Alle 50 Firmen der Open Handset Alliance [Open] ................................................................... 25
Tab. 7: Bekannte Halbleiterfirmen der OHA ......................................................................................... 26
Tab. 8: Bekannte Softwarefirmen der OHA .......................................................................................... 26
Tab. 9: Gegenüberstellung der drei Plattformen .................................................................................. 31
Tab. 10: Anwendungen der Applications-Schicht ................................................................................. 33
Tab. 11: Mechanismen der Application Framework-Schicht [MoKo09, S. 9] [Andr09e] ...................... 33
Tab. 12: Bibliotheken der Libraries-Schicht [MoKo, S. 7] [Andr09e] .................................................... 34
Tab. 13: Core Libraries der Android Runtime-Schicht [MoKo09, S. 8] [Burn08] ................................... 35
Tab. 14: zusätzliche Core Libraries der Android Runtime-Schicht [Burn08] ......................................... 35
Tab. 15: Entwicklungsschritte einer Android-Applikation .................................................................... 36
Tab. 16: Verschiedene Android SDKs [Andre09g] ................................................................................. 37
Tab. 17: Parameter für den Android Emulator ..................................................................................... 38
Tab. 18: Vier verschiedene Skins vom Android Emulator [Andr09i] ..................................................... 39
Tab. 19: Aufrufe der Android Debug Bridge ......................................................................................... 43
Tab. 20: Beispiel für sqlite3 ................................................................................................................... 44
Tab. 21: Parameter für mksdcard ......................................................................................................... 45
Tab. 22: Von activitycreator generierte Dateien und Ordner ............................................................... 46
Tab. 23: Android SDKs und Plug-Ins ...................................................................................................... 47
Tab. 24: Funktionstasten vom T-Mobile G1 .......................................................................................... 49
Tab. 25: Alle Zustände einer Activity .................................................................................................... 61
Tab. 26: Wettereignis auf einem Wettschein ....................................................................................... 72
Tab. 27: Gültige Tags innerhalb von <pre> ........................................................................................... 87
97
Literaturverzeichnis
Literaturverzeichnis
[Alby08]
Alby, T.: Das mobile Web. München, Carl Hanser Verlag 2008.
[Andr]
Android: What is Android?
http://www.android.com/about/
oJ, Abruf am 17.8.2009.
[Andr09a]
Android Developer Challenge: ADC 2.
http://code.google.com/intl/de-DE/android/adc/
2009, Abruf am 17.8.2009.
[Andr09b]
Android Developer Challenge: Compare Everywhere.
http://code.google.com/intl/deDE/android/adc/adc_gallery/app.html?id=8
2009, Abruf am 17.8.2009.
[Andr09c]
Android Developer Challenge: Cooking Capsules.
http://code.google.com/intl/deDE/android/adc/adc_gallery/app.html?id=9
2009, Abruf am 17.8.2009.
[Andr09d]
Android Developer Challenge: Wikitude.
http://code.google.com/intl/deDE/android/adc/adc_gallery/app.html?id=50
2009, Abruf am 17.8.2009.
[Andr09e]
Android Developers: What is Android?
http://developer.android.com/guide/basics/what-is-android.html
2009, Abruf am 1.9.2009.
[Andr09f]
Android Developers: Tools Overview.
http://developer.android.com/guide/developing/tools/index.html
2009, Abruf am 5.9.2009.
[Andr09g]
Android Developers: Android 1.5 SDK, Release 3.
http://developer.android.com/sdk/1.5_r3/index.html
2009, Abruf am 5.9.2009.
[Andr09h]
Android Open Source Project: Get source.
http://source.android.com/download
2009, Abruf am 5.9.2009.
[Andr09i]
Android Developers: Android Emulator.
http://developer.android.com/guide/developing/tools/emulator.html
2009, Abruf am 6.9.2009.
99
Literaturverzeichnis
[Andr09j]
Android Developers: Android Debug Bridge.
http://developer.android.com/guide/developing/tools/adb.html
2009, Abruf am 6.9.2009.
[Andr09k]
Android Developers: Android Asset Packaging Tool.
http://developer.android.com/guide/developing/tools/aapt.html
2009, Abruf am 7.9.2009.
[Andr09l]
Android Developers: Designing a Remote Interface Using AIDL.
http://developer.android.com/guide/developing/tools/aidl.html
2009, Abruf am 7.9.2009.
[Andr09m]
Android Developers: mksdcard.
http://developer.android.com/guide/developing/tools/othertools.html
2009, Abruf am 7.9.2009.
[Andr09n]
Android Developers: UI/Application Exerciser Monkey.
http://developer.android.com/guide/developing/tools/monkey.html
2009, Abruf am 7.9.2009.
[Andr09o]
Android Developers: Download the ADT Plugin Zip File
http://developer.android.com/sdk/adt_download.html
2009, Abruf am 8.9.2009.
[Andr09p]
Android Developers: Activity
http://developer.android.com/reference/android/app/Activity.html
2009, Abruf am 9.9.2009.
[Appl09a]
Apple: iPhone - Galerie - Fotos.
http://www.apple.com/de/iphone/gallery/#hardware02
2009, Abruf am 12.8.2009.
[Appl09b]
Apple: iTunes - iTunes laden.
http://www.apple.com/de/itunes/download/
2009, Abruf am 12.8.2009.
[Appl09c]
Apple: iMac - Der All-in-One-Computer für Fotos, Filme und Musik.
http://www.apple.com/de/imac/
2009, Abruf am 15.8.2009.
[BaGa02]
Backschat, M.; Garden, O.: Enterprise JavaBeans. Grundlagen - Konzept Praxis. Berlin, Spektrum Akademischer Verlag 2002.
[BePa09]
Becker, A., Pant, M.: Android. Grundlagen und Programmierung. 1. Aufl.,
Heidelberg, dpunkt.verlag GmbH 2009.
[BrMo06]
Breymann, U., Mosemann, H.: Java ME. Anwendungsentwicklung für
Handys, PDA und Co. München, Wien, Carl Hanser Verlag 2006.
100
Literaturverzeichnis
[Brow08]
Brown, E.: Android Developer Challenge announces first-round winners.
http://www.linuxfordevices.com/c/a/News/Android-Developer-Challengeannounces-firstround-winners/
2008, Abruf am 16.8.2009.
[Burk08]
Burke, E.: Browsing Android Source in Eclipse.
http://stuffthathappens.com/blog/2008/11/01/browsing-android-sourcein-eclipse/
2008, Abruf am 5.9.2009.
[Burn08]
Burnette, E.: Java vs. Android APIs.
http://blogs.zdnet.com/Burnette/?p=504
2008, Abruf am 1.9.2009.
[Davi09]
David, P.: Mobile Zauberei. fondsmagazin, Seite 45, Ausgabe 03/2009.
[Dsdp]
DSDP-MTJ: Supported Wireless Toolkits.
http://www.eclipse.org/dsdp/mtj/development/tutorial/supported.php
2009, Abruf am 19.8.2009.
[Elgi05]
Elgin, B.: BusinessWeek: Google Buys Android for Its Mobile Arsenal.
http://www.businessweek.com/technology/content/aug2005/tc20050817
_0949_tc024.htm
2005, Abruf am 17.8.2009.
[Emme03]
Emmerich, W.: Konstruktion von verteilten Objekten. Heidelberg,
dpunkt.verlag GmbH 2003.
[Guen]
Guenstiger.de: Apple IPhone 3G.
http://www.guenstiger.de/gt/main.asp?produkt=771056
oJ, Abruf am 14.8.2009.
[HaLo04]
Hatcher, E., Loughran, S.: Java-Entwicklung mit Ant. 1. Aufl., Bonn,
mitp-Verlag 2004.
[Java09]
Java ME Technology.
http://java.sun.com/javame/technology/index.jsp
2009, Abruf am 18.8.2009.
[Karb05]
Karbacher, N.: Diplomarbeit: Kommunikation und Austausch von
Multimediadaten in spontanen Bluetooth-Netzwerken mittels J2ME.
http://www.n3po.com/daten/Diplomarbeit.pdf
2005, Abruf am 18.8.2009.
[Knud08]
Knudsen, J.: The Lightweight User Interface Toolkit (LWUIT): An
Introduction.
http://java.sun.com/developer/technicalArticles/javame/lwuit_intro/
2008, Abruf am 25.8.2009.
101
Literaturverzeichnis
[Kret09a]
Kretschmann, T.: Zweites Android-Handy kommt im April.
http://www.tomshardware.com/de/Vodafone-Android-HTC-MagicGoogle,news-242407.html
2009, Abruf am 5.8.2009.
[Kret09b]
Kretschmann, T.: HTC: Android-Smartphone mit »Sense«.
http://www.tomshardware.com/de/HTC-Hero-Android-Sense,news243047.html
2009, Abruf am 5.8.2009.
[Kret09c]
Kretschmann, T.: Zweites Android-Phone angekündigt.
http://www.tomshardware.com/de/Agora-Smartphone-Open-SourceGoogle,news-242050.html
2009, Abruf am 6.8.2009.
Kretschmann, T.: Kogans Android-Phone kommt doch nicht.
http://www.tomshardware.com/de/Android-Display-G1,news242234.html
2009, Abruf am 6.8.2009.
[Kret09d]
[Kret09e]
Kretschmann, T.:Samsung mit eigenem Handy.
http://www.tomshardware.com/de/I7500-Samsung-Android-GoogleO2,news-242809.html
2009, Abruf am 6.8.2009.
[Lafo09]
Lafortune, E.: ProGuard FAQ: What is obfuscation?
http://proguard.sourceforge.net/FAQ.html#obfuscation
2009, Abruf am 19.8.2009.
[Logi08]
Login Midlet.
http://www.java2s.com/Code/Java/J2ME/LoginMidlet.htm
2008, Abruf am 23.8.2009.
[Melz08]
Elzer, R.: Lenovo OPhone: Das Google-Phone im schicken Business-Anzug.
http://www.areamobile.de/news/10334-lenovo-ophone-das-googlephone-im-schicken-business-anzug
2008, Abruf am 6.8.2009.
[Micr07a]
Micro Window Toolkit: Home.
http://j2me-mwt.sourceforge.net/index.html
2007, Abruf am 23.8.2009.
[Micr07b]
Micro Window Toolkit: Demo Midlets.
http://j2me-mwt.sourceforge.net/demomidlets.html
2007, Abruf am 23.8.2009.
[Micr09]
MicroEmulator: Introduction.
http://snapshot.microemu.org/index.html
2009, Abruf am 19.8.2009.
[MoKo09]
Mosemann, H., Kose, M.: Android. Anwendungen für das HandyBetriebssystem erfolgreich programmieren. München, Wien, Carl Hanser
Verlag 2009.
102
Literaturverzeichnis
[Mpla09a]
mplayit: free mobile games demos.
http://mplayit.com/#GuitarHeroWorldTourMobile
2009, Abruf am 19.8.2009.
[Mpla09b]
mplayit SDK: About.
http://mpowerplayer.com/sdk
2009, Abruf am 19.8.2009.
[Nowa05]
Nowak, J.: Fortgeschrittene Programmierung mit Java 5. Generics,
Annotations, Concurrency und Reflection. 1. Aufl., Heidelberg,
dpunkt.verlag GmbH 2005.
[Oe2409]
oe24.at: 2009 wird 4 Milliarden-Marke erreicht.
http://www.oe24.at/digital/2009-wird-4-Milliarden-Marke-erreicht0507136.ece
2009, Abruf am 10.8.2009.
[Oest07]
Oestreich, N.: Freeware-Roundup: Alle iTunes-Alternativen.
http://www.ifun.de/content/view/2949/1/
2007, Abruf am 12.8.2009.
[Open]
Open Handset Alliance: Members.
http://www.openhandsetalliance.com/oha_members.html
oJ, Abruf am 10.8.2009.
[Prin09]
Prinz, M.: Ausarbeitung zum Masterseminar WS 08/09: J2ME, Android und
iPhone SDK im Vergleich.
http://cart.kolix.de/wpcontent/uploads/2009/01/vergleich_j2me_android_iphone.pdf
2009, Abruf am 12.8.2009.
[Sete09]
Setera, C.: Eclipse ME: Eclipse Mobile Tools for Java Passes Release Review.
http://eclipseme.org/
2009, Abruf am 19.8.2009.
[Shark08]
Sharkey, J.: Leveraging the Android Emulator.
http://jsharkey.org/blog/2008/10/10/leveraging-the-android-emulator/
2008, Abruf am 6.9.2009.
[Spar09]
Sparhandy: T-Mobile G1 - ich habe es fast verstanden.
http://www.sparhandy.de/blog/t-mobile-g1-ich-habe-s-fast-verstanden/
2009, Abruf am 4.8.2009.
[Spie08]
Spiegel Online: Google-Handy in der Kritik: Akku grauenhaft, Software Eins
minus.
http://www.spiegel.de/netzwelt/mobil/0,1518,584639,00.html
2008, Abruf am 4.8.2009.
[Sun09]
Sun Microsystems: Developer’s Guide - Lightweight UI Toolkit.
https://lwuit.dev.java.net/files/documents/8797/138819/LWUIT_1_2.zip
2009, Abruf am 25.8.2009.
Szczygiel S., Röwekamp, L.: Application Development in J2ME. Teil I. Seite
[SzRö06]
103
Literaturverzeichnis
III.
http://www.areamobile.de/specials/J2ME/teil_III.php
2006, Abruf am 20.8.2009.
[Tags09a]
TagsMe: Build Mobile Device Applications.
http://tech.tagsme.com/
2009, Abruf am 23.8.2009.
[Tags09b]
TagsMe GUI Editor.
http://tech.tagsme.com/index.php?option=com_content&task=view&id=4
4&Itemid=63
2009, Abruf am 23.8.2009.
[Tags09c]
TagsMe: Gallery Screen Shots.
http://tech.tagsme.com/index.php?option=com_content&task=view&id=6
&Itemid=6
2009, Abruf am 23.8.2009.
[Tmob]
T-Mobile: Technische Details des iPhone 3G.
http://www.t-mobile.de/iphone/technische-details
oJ, Abruf am 12.8.2009.
[Uebe]
Ueberthings: J2ME Tutorial: Provisioning.
http://www.uberthings.com/mobile/index.html#provisioning
oJ, Abruf am 19.8.2009.
[Unlo]
Unlock your Google Phone: How to Activate and Unlock Boxed Packed
T-Mobile G1.
http://www.unlock-tmobileg1.com/procedures/activate.php
oJ, Abruf am 4.8.2009.
[Vish06a]
Vishneuvski, A.: Light Weight Components: Overview.
http://www.lwvcl.com/index.php
2006, Abruf am 23.8.2009.
[Vish06b]
Vishneuvski, A.: Light Weight Components: Purchase.
http://www.lwvcl.com/price.php
2006, Abruf am 23.8.2009.
[Vish06c]
Vishneuvski, A.: Light Weight Components: J2ME Screen Shots.
http://www.lwvcl.com/j2me-screens.php
2006, Abruf am 23.8.2009.
[Webf09]
Webflashers: Was ist AMOLED?
http://www.oled.at/aktive-matrix-oled.htm
2009, Abruf am 6.8.2009.
[Wiki09a]
Wikipedia: HTC Dream - Technische Daten.
http://de.wikipedia.org/wiki/HTC_Dream
2009, Abruf am 5.8.2009.
[Wiki09b]
Wikipedia: Geotagging.
104
Literaturverzeichnis
http://en.wikipedia.org/wiki/Geotagging
2009, Abruf am 12.8.209.
[Wiki09c]
Wikipedia: List of iPhone and iPod Touch models.
http://en.wikipedia.org/wiki/List_of_iPhone_and_iPod_Touch_models
2009, Abruf am 12.8.2009.
[Wiki09d]
Wikipedia: iPhone OS.
http://en.wikipedia.org/wiki/IPhone_OS
2009, Abruf am 12.8.2009.
[Wiki09e]
Wikipedia: Tagged Image File Format – Exploits.
http://en.wikipedia.org/wiki/Tagged_Image_File_Format#Exploits
2009, Abruf am 13.8.2009.
[Wiki09f]
Wikipedia: Apple Developer Connection.
http://de.wikipedia.org/wiki/Apple_Developer_Connection
2009, Abruf am 14.8.2009.
[Wiki09g]
Wikipedia: Apple iPhone.
http://de.wikipedia.org/wiki/Apple_iPhone
2009, Abruf am 14.8.2009.
[Wiki09h]
Wikipedia: Google.
http://de.wikipedia.org/wiki/Google
2009, Abruf am 15.8.2009.
[Wiki09i]
Wikipedia: Google Inc.
http://de.wikipedia.org/wiki/Google_Inc.
2009, Abruf am 15.8.2009.
[Wiki09j]
Wikipedia: Sportwette
http://de.wikipedia.org/wiki/Sportwette
2009, Abruf am 12.9.2009
105
Eidesstattliche Erklärung
Eidesstattliche Erklärung
Gemäß § 26 (1) der DPO erkläre ich an Eides statt, dass ich die vorliegende Arbeit
selbständig angefertigt habe. Ich habe mich keiner fremden Hilfe bedient und keine
anderen, als die angegebenen Quellen und Hilfsmittel benutzt. Alle Stellen, die wörtlich
oder sinngemäß veröffentlichten oder nicht veröffentlichten Schriften und anderen Quellen
entnommen sind, habe ich als solche kenntlich gemacht. Diese Arbeit hat in gleicher oder
ähnlicher Form noch keiner Prüfungsbehörde vorgelegen.
Dortmund, 14.09.2009
_____________________________________
(Marco Alexander Schmitz)
106
Herunterladen