summaryrefslogtreecommitdiffstats
path: root/ausarbeitung/Tutorial.tex~
blob: 556039728032dfcf1d39cd2cc59cfc3f326f8f4b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
\section{Technische Grundlagen}

Die Wahl der Plattform hängt von zwei verschiedenen Faktoren ab. Zum einen stellt sich die Frage, ob die Handymodelle die
benötigte Hardware, wie zum Beispiel \textit{GPS} oder eine Kamera besitzen, zum anderen ob Schnittstellen vorhanden sind um das
Programm für das System zu entwickeln. \newline

Die Problematik der Plattformwahl aufgrund von vorhandener oder nicht vorhandener Hardware ist nicht allzu groß. Die meisten
aktuellen Geräte haben mittlerweile eine ähnliche Ausstattung was Speicher und Prozessorleistung angeht.Auch erweiterte Features
wie \textit{GPS} oder Lagesensoren sind in den meisten, aktuellen Geräten vorhanden oder werden in der nächsten Generation, des
jeweiligen Herstellers, vorhanden sein.\newline

Es gestalltet sich schon schwieriger eine Plattform aufgrund des Betriebssystemes zu wählen. Bei geeigneter Auswahl ist es
möglich die Software auf mehrere Betriebssysteme für Smartphones zu portieren und somit eine mehrfache Implementation zu
vermeiden. Es wäre somit auch möglich viele Nutzer zu erreichen und die Kommunikation zwischen einem Besitzer eines
\textit{iPhones} sowie dem Besitzer eines \textit{Palm Pre's} sicherzustellen.\newline
Des weiteren ist es auch von Interesse, ob andere Programme und Bibliotheken auf den jeweiligen Systemen ausführbar sind.
Es wäre also ein \textit{Layer} von Interesse mit welchem immer die gleichen Programmbibliotheken genutzen werden können. Dabei
sollte das zugrundeliegende System unabhängig von diesem \textit{Layer} sein. Es soll also damit vom zugrundeliegenden
Betriebssystem abstrahiert werden. Ein entsprechender \textit{Layer} stellt der \textit{Portable Operating System Interface for
Unix Layer (POSIX Layer)} \citep{POSIX} dar. Mit diesem \textit{Layer} stehen eine große Menge an aktuellen
Bibliotheken aus der \textit{Open-Source} Gemeinde zur Verfügung. Diese haben den Vorteil, dass sie aktiv
weiterentwickelt werden und auch ständig neue Bibliotheken hinzukommen. Anwendungen, die auf einem \textit{Linux}-System
entwickelt wurden können somit ohne weiteres auf ein anderes, \textit{POSIX} kompatibles System, portiert werden, ohne das
die genutzten Bibliotheken ausgetauscht werden müssen.\newline
Zusätzlich stellt sich auch die Frage der zu nutzenden Programmiersprache. Diese sollte von einer möglichst großen Mengen an
Betriebsystemen unterstützt werden. Man müsste das, wenn man das Programm für ein neues Gerät portieren möchte, das Progamm somit
nicht immer komplett neu implementieren.

\subsection{Betriebsysteme für mobile Geräte}

Durch die Wahl eines Betriebsystemes wird schon indirekt eine Vorauswahl an Nutzbaren Bibliotheken und Programmiersprachen
getroffen wird. Im Folgenden werden fünf Betriebssysteme für mobile Plattformen vorgestellt und auf deren Portierungsmöglichkeiten
eingegangen.

\subsubsection{Windows Mobile}

Das von Microsoft entwickelte \textit{Windows Mobile} in der aktuellen Version 6.5 verfügbar. Das gesamte Betriebssystem basiert
auf der \textit{Windows Win32 API} und lässt Ähnlichkeiten zu den Desktop-Varianten der Windows-Familie erkennen. \textit{Windows
Phone} besitzt keinen \textit{POSIX Layer}, allerdings existiert ein \textit{Cross-Compiler} names \textit{CeGCC} \citep{CeGCC},
mit welchem Programme die in \textit{C}/\textit{C++} geschrieben wurden für diese Plattform kompiliert werden können.\newline

\subsubsection{Android}

Das von \textit{Google} entwickelte \textit{Android} \citep{Android} setzt auf einen Linux-Kernel der Version 2.6 auf. Dieser
Kernel kümmert sich um die Prozess- und Speicherverwaltung, Kommunikation sowie um die Hardwareabstraktion. Auf diese Grundlage
setzt eine virtuelle Java-Maschine auf, in welcher \textit{Android} läuft.\newline

Zum Implementieren von Anwendungen stellt \textit{Google} eigens ein \textit{SDK} bereit. Dieses greift allerdings nur auf
\textit{Java}-Bibliotheken zurück, womit sich die Anzahl der  nutzbaren Sprachen im Moment eben auf diese eine beschränkt. Des
weiteren bietet \textit{Google} mittlerweile ein \textit{NDK} an, mit desen Hilfe es auch möglich ist Programme in \textit{C} oder
\textit{C++} zu schreiben. \textit{Google} rät allerdings von der Nutzung anderer Bibliotheken ab, da nur im \textit{NDK}
enthaltenen, laut Hersteller, stabil auf den Geräten laufen.
Allerdings ergeben sich hier für die Zukunft, sobald mehr Bibliotheken unterstützt werden, sicher interessante Möglichkeiten für
Entwicklung und Portierung von Anwendungen.\newline

\subsubsection{WebOS}

\textit{WebOS} \citep{WebOS} wurde von \textit{Palm} als Nachfolger von \textit{PalmOS} entwickelt und ist momentan nur auf zwei
Geräten zu finden: Auf dem \textit{Palm Pre} und dem \textit{Palm Pixi}.\newline
Für dieses Betriebssystem existiert ein \textit{SDK} für \textit{HTML5}, \textit{CSS} und \textit{Java}. Ein weiteres, welches im
März 2010 veröffentlicht wird, soll die \textit{C}  und \textit{C++} Entwicklung ermöglichen. Des weiteren beinhaltet
\textit{WebOS} einen \textit{POSIX Layers}. Somit werden mehrere Programmiersprachen unterstützt und es besteht die
Möglichkeit den \textit{POSIX Layer} zu nutzen.\newline

\subsubsection{iPhone OS}

Bei \textit{iPhoneOS} \citep{iPhoneOS} handelt es sich um eine abgeänderte und angepasste Version von MacOS. Es wurde eigens für
das iPhone entwickelt. Auch für dieses System existiert ein \textit{SDK}, welches allerdings nur die Sprache \textit{Objective-C}
unterstützt. Des weiteren fehlt auch eine Unterstützung des \textit{POSIX Layers} oder einer anderen Abstraktion dieser Art. Der
größte Kritikpunkt an diesem System dürfte allerdings das fehlen von \textit{Multitasking}-Unterstützung sein. Somit ist es nicht
möglich zwei Anwendungen parallel auszuführen, was gerade \textit{location awareness} Anwendungen stark einschränkt, da hier
häufig weitere Dienste im Hintergrund aktiv sein sollten.\newline

\subsubsection{Symbian OS}

\textit{SymbianOS} \citep{SymbianOS} ist eine Betriebssystem welches vorzugsweise auf Geräten der Firma \textit{Nokia} zum
Einsatz kommt. Es existiert ein \textit{SDK}, was neben \textit{C}/\textit{C++} auch noch weitere Sprachen wie zum Beispiel
\textit{Python} oder \textit{Java} unterstützt. Mit dem \textit{SDK} wird auch ein \textit{Cross-Compiler} angeboten, welcher es
ermöglicht Programme direkt zu portieren. Des weitern besitzt \textit{Symian OS} auch einen \textit{POSIX Layer}.

\subsubsection{Zielplattform}

Die Wahl der Zielplattform ist auf \textit{Windows Mobile} gefallen, da es hier möglich ist die Anwendung in \textit{C} zu
implementieren. Da mit Hilfe des \textit{CeGCC} die Anwendung portiert werden kann, kann diese auch in einer
\textit{Linux}-Umgebung entwickelt werden.\newline
\textit{iPhoneOS} wurde aufgrund seiner mangelnden \textit{Multitasking}-Unterstützung ausgeschlossen. Diese ist für den
geplanten Dienst wichtig, da bei diesem Prozesse im Hintergund notwendig sind und dies auf einem solchen System nicht
realisierbar wäre. \textit{Android} hat zwar eine \textit{C} Unterstützung, allerdings gibt der Hersteller an das nur die
mit dem \textit{NDK} verfügbaren Bibliotheken zum momentanen Zeitpunkt stabil verfügbar sind. Dies schränkt die
Entwicklung stark ein und ist für das zu entwickelnde Programm nicht geeignet.\newline
Aufgrund der Implementierung in \textit{C} ist es auch möglich das Programm für \textit{WebOS} und \textit{SymbianOS} zu
kompilieren.

\subsection{Softwaregrundlagen}

Anhand der gewählten Zielplattform und Programmiersprache muss nun eine Möglichkeit gefunden werden das Programm sowohl für die
jeweiligen Plattformen zu kompilieren, sowie die graphischen Elemente auf den Plattformen darzustellen.

\subsubsection{CeGCC}

Da \textit{Windows Mobile} und die Programmiersprache \textit{C} genutzt wird, wird der \textit{CeGCC} als
\textit{Cross-Compiler} verwendet. Mit ihm ist es möglich \textit{C} Programmcode, der unter \textit{Linux} entwickelt wurde, nach
\textit{Windows Mobile} zu portieren. Bei \textit{CeGCC} handelt es sich um ein \textit{Open-Source} Projekt, bassierend auf dem
\textit{GCC}. Mit diesem Tool können in einer \textit{Linux} Umgebung die für \textit{Windows Mobile} benötigten Bibliotheken und
ausführbaren Dateien erstellt werden.\newline

Es wird zwischen zwei verschiedenen Arten des \textit{CeGCC's} unterschieden. Zum Einen \textit{CeGCC} und zum Anderen
\textit{mingw32ce}.
Der Unterschied zwischen diesen beiden Kompilern besteht darin, dass ersterer nur dann benutzt wird, wenn man nur Linux
Bibliotheken einbinden möchte. Der \textit{mingw32ce}-Kompiler wird dann gebraucht, wenn auch \textit{Windows Mobile}
Bibliotheken zum Einstatz kommen.\newline

Soll das Programm nun für \textit{WebOS} oder \textit{SymbianOS} portiert werden, kann dies auf unter \textit{Linux} normal
kompiliert werden.

\subsubsection{Enlightenment}

Neben einem \textit{Cross-Compiler} wird noch ein geeignetes Frontend benötigt, um das Programm auch für den Benutzer
ansprechend darzustellen und eine einfache Bedienbarkeit zu garantieren. Dieses Frontend sollte auch in \textit{C} oder
\textit{C++} geschrieben sein, um auch hier die Portierbarkeit für die gewünschten Plattformen zu erhalten. Hier fiel die Wahl
auf das freie, seit 1997 existierende, \textit{Enlightenment} \citep{efl} Projekt. Dieses Softwarepaket unterstützt alle gängigen
Plattformen wie Windows, Linux, BSD und MacOS. Es beinhaltet einen eigenen \textit{Window-Manager} names \textit{Elementary}.
\textit{Elementary} bietet ein umfangreiches Paket an grafischen Elementen die genutzt und frei angeordnet werden können.

\begin{figure}[h]
\centering
 \includegraphics[width=2.2cm]{Bilder/elm-app-01_2} \includegraphics[width=2.7cm]{Bilder/elm-app-02_2}
 \caption{Beispiele verschiedener \textit{Elementary} Icons}
\end{figure}

\textit{Elementary} setzt auf die \textit{Enlightenment Foundation Libraries (EFL)} auf. Diese Bibliotheken werden zum Teil von
Enlightenment benötigt, andere können für optionale Features installiert werden. Für die Darstellung auf mobilen Geräten sind die
Pakete \textit{Evil, Eina, Eet, Embryo, Evas, Ecore, Edje} und\textit{Elementary} nötig.

\begin{figure}[h]
\centering
 \includegraphics[width=2.7cm]{Bilder/efl}
 \caption{Aufbau von \textit{Enlightenment}}
\end{figure}

Bei \textit{Ecore} handelt es sich um eine Bibliothek, welche das serialisieren von mehreren Programmteilen ermöglicht und
für den Betrieb auf mobilen Geräten optimiert wurde. \textit{Edje} ist eine komplexe grafische Design und Layout Bibliothek,
welche mit einer internen \textit{state machine} und einem Zustandsgraphen speichert was wo, in welcher Farbe und wie sichtbar
ist und gezeichnet werden soll. Die Bibliothek \textit{Evas} ist eine \textit{canvas}-Bibliothek, welche sich um Effekte wie
Alpha-Blending oder das skalieren von Bildern kümmert. \textit{Eina} stellt verschiedene, optimierte Datentypen und Tools
bereit.\newline

Im Anhang 1 sind genaue Anweisungen zu finden, um \textit{Enlightenment} für \textit{Windows Mobile} zu portieren.