Anwendungsentwicklung für Symbian OS
Anwendungsentwicklung für Symbian OS
Anwendungsentwicklung für Symbian OS
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Anwendungsentwicklung</strong> für <strong>Symbian</strong> <strong>OS</strong><br />
Eric Thomas & Jürgen Zeitz<br />
23. Februar 2006<br />
Zusammenfassung<br />
<strong>Symbian</strong> <strong>OS</strong> ist ein gängiges Betriebssystem für mobile Geräte.<br />
Endkunden, Hersteller und Software-Entwickler profitieren von der Architektur,<br />
welche für <strong>Symbian</strong> <strong>OS</strong> entwickelt wurde. Aber ohne gute<br />
Anwendungen für diese Plattform wäre <strong>Symbian</strong> für den Endkunden<br />
uninteressant. Damit eine Anwendung für <strong>Symbian</strong> <strong>OS</strong> geschrieben<br />
werden kann, ist es nötig, die Eigenheiten von <strong>Symbian</strong> <strong>OS</strong> zu verstehen<br />
und einen Blick auf den komplexen Build-Prozess zu werfen.<br />
Inhaltsverzeichnis<br />
1 Mobile Geräte 3<br />
2 Wozu <strong>Symbian</strong> <strong>OS</strong> 3<br />
3 Das Betriebssystem 5<br />
3.1 Oberflächen des Betriebssystem . . . . . . . . . . . . . . . . . 5<br />
3.2 Dateisystem und Speichermedien . . . . . . . . . . . . . . . . 6<br />
3.3 Speichermanagement . . . . . . . . . . . . . . . . . . . . . . . 8<br />
4 Entwicklung für <strong>Symbian</strong> <strong>OS</strong> 9<br />
4.1 Programmiersprachen . . . . . . . . . . . . . . . . . . . . . . . 9<br />
4.2 Entwicklungsumgebungen . . . . . . . . . . . . . . . . . . . . 10<br />
4.3 Sichere Speicherverwaltung . . . . . . . . . . . . . . . . . . . . 11<br />
4.4 Erste Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
4.5 Der Buildprozess . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
5 Anhang 19<br />
A Projekdefinitionsdatei 19<br />
1
B Package-Datei 19<br />
C Installationsdatei 20<br />
D Ressourcen 21<br />
2
1 Mobile Geräte<br />
Der Entwicklungsprozess von mobilen Geräten verläuft gerade im Bereich<br />
der Mobiltelefone sehr schnell. Sie werden PCs immer ähnlicher und erhalten<br />
mit jeder Generation weitere Funktionen. Natürlich steigt auch der Wunsch<br />
der Nutzer die Geräte durch eigene Anwendungen um beliebige Funktionen<br />
zu ergänzen. Wie auf Computern werden in diesem Bereich zunehmend<br />
Betriebssysteme eingesetzt, um die erweiterte Funktionalität zu nutzen und<br />
anzupassen.<br />
Mobiltelefone, die neben den üblichen Telefoniefunktionen weitere PCähnliche<br />
Funktionalitäten bereitstellen, werden als Smartphone bezeichnet.<br />
Zu den erweiterten Funktionalitäten zählt das versenden von E-Mail oder<br />
Fax sowie das Surfen im Internet. Kontakte, Termine und Aufgaben können<br />
verwaltet werden und es ist möglich, Fotos oder Videos zu erstellen, welche<br />
auf dem vergleichsweise großen Farbdisplay in guter Qualität angezeigt werden.<br />
Smartphones können darüber hinaus untereinander oder mit Computern<br />
Daten austauschen.<br />
2 Wozu <strong>Symbian</strong> <strong>OS</strong><br />
Das Betriebssystem eines mobilen Gerätes muss den hohen Ansprüchen mehrerer<br />
Parteien genügen. Der Benutzer verlangt von seinem Mobiltelefon, dass<br />
er jederzeit erreichbar ist. Daten, die er in dem Gerät speichert, dürfen auf<br />
keinen Fall verloren gehen und müssen problemlos zwischen ihm und anderen<br />
mobielen Geräten oder Desktop PCs ausgetauscht werden können.<br />
Die Betriebszeit des Mobiltelefons soll so lang wie möglich sein, wobei die<br />
Erinnerungs- bzw. Weckfunktion selbst in ausgeschaltetem Zustand funktionieren<br />
muss. Einfache Benutzung, hundertprozentige Verlässlichkeit und absolute<br />
Stabilität wird vom Benutzer ebenso vorrausgesetzt, wie die Möglichkeit<br />
sein Handy bzw. seinen PDA um neue Funktionen erweitern zu können.<br />
Damit dieses Bedürfnis befriedigt werden kann, ist ein Netzwerk von Entwicklern<br />
für das Betriebssystem eines solchen Gerätes nötig. Dies impliziert, dass<br />
die Lernkurve für die Entwicklung nicht zu steil ist, dass Objektorientierung<br />
unterstützt wird und ein einfach zu nutzendes Fehlerbehandlungssystem verfügbar<br />
ist. SDKs, Hilfsmittel, Dokumentationen, technische Unterstützung<br />
und Schulungen werden ebenso selbstverständlich vorrausgesetzt. Damit der<br />
Programmierer in seinen Möglichkeiten nicht eingeschränkt wird, muss er<br />
auf alle Systemressourcen zugreifen können. Hierzu zählen auch die eventuell<br />
einzigartigen Charakteristika spezieller Mobiltelefonmodelle. Hardwarehersteller<br />
stellen zusätzliche Anforderungen an ein entsprechendes Betriebssys-<br />
3
tem, damit sie es auf ihren Geräten vorinstallieren. Das Betriebssystem muss<br />
z.B. auf verschiedenen, mitunter völlig unterschiedlich bedienbaren Geräten<br />
funktionieren, denn nur so ist es möglich, ein Betriebssystem günstig auf verschiedenen<br />
Geräteklassen einzusetzen. Unterschiedliche Hersteller verlangen<br />
Anpassbarkeit des Aussehens eines Betriebssystems, damit sie sich von der<br />
Konkurrenz abheben können. Das Betriebssystem muss zukünftige Entwicklungen<br />
entweder schon unterstützen oder eine einfache Möglichkeit vorsehen,<br />
diese zu integrieren.<br />
<strong>Symbian</strong> <strong>OS</strong> schafft den Spagat, auf der einen Seite kompakt zu sein<br />
und auf der anderen Seite all die genannten Anforderungen zu erfüllen. Das<br />
Benutzerinterface ist komplett vom Betriebssystemkern getrennt, welcher seinerseits<br />
so klein wie möglich gehalten wurde. Dies reduziert das Risiko, das<br />
System auf irgend eine Weise unsicher zu machen. <strong>Symbian</strong> <strong>OS</strong> unterstützt<br />
offene Standards, wie Java 1 , Bluetooth 2 , MMS 3 , SyncML 4 , IPv6 5 , etc. und<br />
ist damit gewappnet für aktuelle und kommende Entwicklungen. Einfache<br />
Mechanismen zur Codewiederverwendung und zum Speichermangement garantieren<br />
sichere, effiziente und günstige <strong>Anwendungsentwicklung</strong>. Durch die<br />
Verwendung der verbreiteten Programmiersprache C++ kann nahezu jeder<br />
Programmierer sofort Software für <strong>Symbian</strong> <strong>OS</strong> entwickeln. Es ist dabei möglich,<br />
sowohl portable Programme zu schreiben, die auf jedem <strong>Symbian</strong>-Gerät<br />
funktionieren, als auch gerätespezifische Software zu entwickeln, die auf spezielle<br />
Systemressourcen einer Geräteklasse zugreift. Ein großes, meherere tausend<br />
Teilnehmer umfassendes Netzwerk an Entwicklern garantiert zudem,<br />
dass das Betriebssystem den Ansprüchen von Anwendungsentwicklern, Herstellern<br />
und Endkunden gerecht wird. Nicht umsonst ist <strong>Symbian</strong> <strong>OS</strong> 6 neben<br />
Microsofts angepasster Windows-Version Windows Mobile 7 das wohl am weitesten<br />
verbreitete Betriebssystem für mobile Geräte. War <strong>Symbian</strong> <strong>OS</strong> 2003<br />
noch auf 8 Millionen Geräten installiert [Symb<strong>OS</strong>], stieg die Zahl bis 2005<br />
auf 39 Millionen Geräte [<strong>Symbian</strong>].<br />
1 http://java.sun.com/j2me/<br />
2 http://www.bluetooth.com/bluetooth/<br />
3 Multimedia Messaging Service<br />
4 Synchronization Markup Language, http://www.openmobilealliance.org/syncml/<br />
5 Internet Protocol, Version 6, http://www.ietf.org/rfc/rfc2460.txt<br />
6 http://www.symbian.com/<br />
7 http://www.microsoft.com/windowsmobile/<br />
4
3 Das Betriebssystem<br />
3.1 Oberflächen des Betriebssystem<br />
Der Kern des <strong>Symbian</strong>-Betriebssystems wird von <strong>Symbian</strong> Ltd. 8 entwickelt<br />
und ist bei allen Geräten gleich. Je nach Gerät und Geräteklasse werden<br />
allerdings verschiedene Betriebssystemoberflächen eingesetzt, die von anderen<br />
Anbietern bereitgestellt werden. Von Nokia 9 stammen hierbei die Series<br />
60, 80 und 90. UIQ Technology 10 bietet zudem die selbst entwickelte UIQ-<br />
Plattform an.<br />
Die Unterschiede der verschiedenen Plattformen liegen lediglich in den<br />
Komponenten, die für Darstellung, Oberfläche und Eingabegeräte ausgelegt<br />
sind. Zum Einen haben die verschiedenen Geräteklassen deutliche Unterschiede<br />
in der Displaygröße und zum anderen gibt es eine Vielzahl unterschiedlicher<br />
Eingabegeräte. Hierbei reicht das Spektrum von normalen Telefontastaturen<br />
über Mini-Tastaturen, welche sich nur in ihrer Größe von einer<br />
Computertastatur unterscheiden, bis hin zu Touchscreens, die mit einem Stift<br />
bedient werden.<br />
Am weitesten verbreitet ist <strong>Symbian</strong> Series 60. Diese Variante des Betriebssystems<br />
findet vorallem auf sogenannten sprachzentrischen Geräten Verwendung.<br />
Zu dieser Klasse zählen die meisten Smartphones, da hier der<br />
Anwendungsschwerpunkt auf der Sprachkommunikation liegt. Die Eingabe<br />
erfolgt dabei über eine normale Telefontastatur mit Ziffernblock, 5-Wege-<br />
Navigationstaste und zwei Softbuttons, die frei mit Funktionen belegt werden<br />
können.<br />
Die Series 80 wird weitgehend auf Organizern eingesetzt. Diese gehören<br />
zur Klasse der informationszentrischen Geräte, wobei sie jedoch in der Regel<br />
auch über Telefoniefunktionen verfügen. Diese Geräte zeichnen sich durch<br />
eine computerähnliche Tastatur und ein größeres Display aus.<br />
Series 90 und UIQ sind sich sehr ähnlich. Beide werden auf PDA-ähnlichen<br />
Geräten eingesetzt, die zur Klasse der informationszentrischen Geräten mit<br />
Telefoniefunktion zählen. Das spezielle Merkmal dieser Geräteklasse ist der<br />
Touchscreen, über den alle Benutzereingaben erfolgen. Manche Geräte haben<br />
jedoch zusätzlich noch eine Tastatur. Der hauptsächliche Unterschied<br />
zwischen Series 90 und UIQ liegt darin, dass Series 90 das Anlegen benutzerdefinierter<br />
Skins unterstützt. So ist es möglich die Oberfläche des Bestriebssystems<br />
beliebig umzugestalten.<br />
8 <strong>Symbian</strong> Ltd., http://www.symbian.com<br />
9 Nokia GmbH, http://www.nokia.de/<br />
10 User Interface Quartz, http://www.uiq.com/<br />
5
Oberfläche Anwendungsgebiet Hardware<br />
Series 60 sprachzentrisch, erweiterte Farbdisplay,<br />
Informationsfunktionen Telefontastatur<br />
Series 80 informationszentrisch, Telefoniefunktion<br />
Großes Farbdisplay,<br />
Mini-Tastatur<br />
Series 90 informationszentrisch, Telefoniefunktion<br />
Touchscreen<br />
unterstützt<br />
benutzerdefinierte<br />
Skins<br />
(PDA-ähnlich)<br />
UIQ<br />
informationszentrisch, Telefoniefunktion<br />
(PDA-ähnlich)<br />
Touchscreen<br />
Tabelle 1: Die verschiedenen Plattformen<br />
3.2 Dateisystem und Speichermedien<br />
Das Dateisystem von <strong>Symbian</strong> <strong>OS</strong> ist stark an Microsoft Windows 11 orientiert.<br />
Unter <strong>Symbian</strong> werden den verschiendenen Speichermedien wie unter<br />
Windows Laufwerksbuchstaben zugeordnet. Über diese können die Medien<br />
angesprochen werden. Dabei gibt es auf jedem Gerät grundsätzlich mindestens<br />
zwei Laufwerke.<br />
Gerät<br />
optional<br />
ROM<br />
RAM<br />
Flash<br />
RAM<br />
Card<br />
Card<br />
Z: C:<br />
D: E: ...<br />
Abbildung 1: Laufwerke<br />
Über das Laufwerk mit der Kennung Z: wird auf das ROM 12 eines Geräts<br />
zugegriffen. Hier ist wie der Name schon sagt kein Schreibzugriff möglich. Das<br />
ROM enthält die vorinstallierte Software eines Geräts. Hier sind Betriebssystem,<br />
Bibliotheken und gegebenenfalls weitere vom Hersteller vorinstallierte<br />
Anwendungen abgelegt.<br />
11 http://www.microsoft.com/windows/<br />
12 Read Only Memory<br />
6
Z:<br />
Abbildung 2: Speichermanagement nach [Task00]<br />
Auf das RAM 13 wird unter <strong>Symbian</strong> <strong>OS</strong> ebenfalls wie auf ein Laufwerk<br />
zugegriffen. Es ist über die Laufwerkskennung C: zu erreichen. Hier hat das<br />
Betriebssystem entsprechend Schreib-Lese-Zugriff und kann Nutzerdaten und<br />
Konfigurationen speichern. Auch vom Benutzter installierte Programme werden<br />
hier abgelegt. Das RAM wird in modernen Geräten durch RAM- und<br />
Flash-RAM-Bausteine realisiert. Flash-RAM-Bausteine haben den Vorteil,<br />
dass sie ohne eine ständige Stromversorgung auskommen, um Daten persistent<br />
zu speichern. Datenverlust durch mangelnde Stromversorgung ist somit<br />
ausgeschlossen während gleichzeitig der Akku geschont wird. Die Verwaltung<br />
des RAMs wird vom Betriebssystem übernommen. Nachinstallierte Software<br />
wird automatisch im Flash-RAM gespeichert, während das flüchtige RAM<br />
von Programmen während ihrer Ausführung genutzt wird.<br />
Die meisten mobilen Geräte unterstützen externe Speichermedien wie<br />
CompactFlash Cards 14 oder SD Memory Cards. Jedes zusätzliche Speichermedium<br />
wird dabei mit einer fortlaufenden Laufwerkskennung (D:, E:, ...)<br />
in das Dateisystem von <strong>Symbian</strong> eingebunden. Da alle Daten auf Speicherkarten<br />
persistent gespeichert werden, sind diese sowohl zur Speicherung von<br />
Benutzerdaten als auch zur Installation weiterer Programme geeignet.<br />
13 Random Access Memory<br />
14 http://www.compactflash.org/<br />
7
Lauferk Speicher Datenhaltung Speicherinhalt<br />
Z: ROM persistent Betriebssystemdaten, werkseitig<br />
installierte Anwendungen<br />
C: Flash-RAM persistent nachinstallierte Anwendungen,<br />
Anwendungs- und System-<br />
Dateien (.ini), Daten<br />
C: RAM flüchtig Ausführung der Anwendungen<br />
D:, E:, ... Memory-Cards persistent Anwendungen, Daten<br />
3.3 Speichermanagement<br />
Tabelle 2: Speicher<br />
Ein großer Unterschied zu anderen Betriebssystemen ist, dass Programme<br />
unter <strong>Symbian</strong> <strong>OS</strong> nicht zuerst ins RAM geladen müssen, um ausgeführt<br />
werden zu können. Sie werden direkt aus dem ROM gestartet. Im Vergleich<br />
zur Festplatte eines normalen PCs ist das ROM eines mobilen Geräts deutlich<br />
schneller und ermöglicht so das direkte Starten der Anwendung. Zur Laufzeit<br />
entstandene Daten werden in <strong>Symbian</strong> aber ebenfalls im RAM abgelegt.<br />
Ferner unterstützt <strong>Symbian</strong> ein Konzept, das es ermöglicht es den knappen<br />
Speicher eines Geräts optimal auszunutzen. Dabei werden Bibliotheken,<br />
die von mehreren Anwendungen benötigt werden, nur einmal in den Speicher<br />
geladen und von den Programmen gleichzeitig genutzt (Vergleiche [Symb<strong>OS</strong>,<br />
Seite 77]).<br />
Anders als bei Desktop-PCs gibt es bei <strong>Symbian</strong> keine Auslagerungsdatei.<br />
Wenn keine freien Speicherblöcke mehr vorhanden sind, tritt ein outof-memory-<br />
oder ein disk-full-Fehler auf. Da der verfügbare Speicher auf<br />
mobilen Geräten ohnehin sehr begrenzt ist, muß verstärkt auf solche Fehler<br />
geachtet werden. Zur Vermeidung vom Memory Leaks 15 stellt <strong>Symbian</strong> daher<br />
diverse Mechanismen zur Verfügung(siehe Abschnitt 4.3).<br />
Speicher, der bei der Objekterzeugung oder durch explizite Allokierung<br />
reserviert wird, wird vom zugeteilten Speicher (Heap) des jeweiligen Threads<br />
geholt. Falls im Heap nicht genug freie Speicherblöcke zur Verfügung stehen,<br />
versucht der Heap-Manager den Heap um weitere Blöcke zu vergößern. Jeder<br />
Thread hat zusätzlich einen 12 kByte großen Stack. Hier können entsprechend<br />
nur geringe Datenmengen (z.B. Variableninhalte von Grunddatentypen) abgelegt<br />
werden.<br />
15 Speicherlöcher - nicht freigegebener Speicher<br />
8
4 Entwicklung für <strong>Symbian</strong> <strong>OS</strong><br />
Native <strong>Symbian</strong>-Programme werden in der Regel auf Computern mit Windows<br />
als Betriebssystem entwickelt. Um zu gewährleisten, das die entwickelten<br />
Programme auf einem Endgerät mit <strong>Symbian</strong> <strong>OS</strong> lauffähig sind, wird<br />
durch einen Emulator die API von <strong>Symbian</strong> <strong>OS</strong> bereitgestellt. Die so zur<br />
Verfügung gestellten Dienste werden auf der jeweiligen Hardware jeweils anders<br />
implementiert, wobei auf Quellcode-Ebene keine Unterschiede bestehen.<br />
Soll ein Dienst des Betriebssystems, wie etwa der Fileserver, aus einem Programm<br />
heraus angesprochen werden, so ist der Funktionsaufruf im Quellcode<br />
unabhängig von der genutzten Hardwareplattform. Im Emulator greift der<br />
Fileserver-Dienst auf ein Unterverzeichnis auf der Festplatte zu, während auf<br />
einem echten Gerät ein Zugriff auf die RAM-Disk erfolgt. Beim Übertragen<br />
einer Applikation auf ein Endgerät, muß die Anwendung mit einem Crosscompiler<br />
16 übersetzt werden. Programmcode, der für dem Emulator übersetzt<br />
wurde ist auf echten Geräten nicht lauffähig, da hier andere Prozessoren benutzt<br />
werden, die einen anderen Befehlssatz unterstützen, als die Prozessoren<br />
der Entwicklungssysteme (vgl. Abschnitt 4.5.1).<br />
4.1 Programmiersprachen<br />
Es gibt mehrere Möglichkeiten Programme für mobile Geräte zu schreiben.<br />
Die meisten mobilen Geräte unterstützen Java. Hierbei läuft auf dem Gerät<br />
eine KVM 17 , welche Java-Midlets 18 ausführen kann. Der Vorteil hierbei ist,<br />
daß die Midlets auf jedem Java-fähigen Gerät laufen, auf dem die vom Midlet<br />
benutzten APIs implementiert sind. Auch <strong>Symbian</strong>-Geräte haben in der<br />
Regel eine KVM, um Java-Programme ausführen zu können.<br />
Der größte Vorteil, bei der direkten Entwicklung von <strong>Symbian</strong>-Software<br />
ist der uneingeschränkte Zugriff auf alle Systemressourcen. Da die Programme,<br />
genau wie das Betriebssystem in C++ implementiert werden, kann hier<br />
auf alle Betriebssystemfunktionen zugegriffen werden. Die Programme unterliegen<br />
nicht den Einschränkungen einer Laufzeitumgebung. Auf diese Weise<br />
kann auf Bluetooth-, Kamera-, Radio-, GPS-Komponenten oder das Dateissytem<br />
direkt zugegriffen werden. Dies ermöglicht das Schreiben von Treibern,<br />
Antivirensoftware und anderen Programmen, die tief in das System eingreifen.<br />
Auch der Einsatz von Skriptsprachen ist auf mobilen Geräten möglich.<br />
16 Compiler, der ausführbaren Code für eine andere Computerplattform erzeugt<br />
17 Kilobyte Virtual Machine, Java-Laufzeitumgebung<br />
18 Java-Anwendung für mobile Geräte<br />
9
<strong>Symbian</strong> <strong>OS</strong> bietet beispielsweise die Möglichkeit Python 19 einzusetzen. Der<br />
Vorteil von Python ist hierbei, dass die Sprache die Möglichkeit bietet C-<br />
Module zu integrieren. Auf diese Weise ist auch von Python aus der Zugriff<br />
auf Betriebssystemfunktionen möglich. Im Gegensatz zu reinen C++ Programmen<br />
ist hier jedoch mit einer schlechteren Performance zu rechnen.<br />
4.2 Entwicklungsumgebungen<br />
<strong>Symbian</strong> SDKs 20 werden sowohl von <strong>Symbian</strong> direkt als auch von den Herstellern<br />
der Endgeräte, wie zum Beispiel Nokia, angeboten. Sie enthalten<br />
verschiedene Hilfsprogramme zum Erstellen von <strong>Symbian</strong>-Anwendungen sowie<br />
einen Emulator, um die Programme auf einem Desktop-PC zu testen.<br />
Die SDKs unterstützen direkt die Entwicklungsumgebungen Microsoft Visual<br />
C++ 21 , Metrowerks CodeWarrior 22 , sowie emphBorland Mobile Studio 23 .<br />
Sie bieten die bekannten Vorteile einer Entwicklungsumgebung wie Syntax-<br />
Highlighting, das Anzeigen von Klassen oder das Kompilieren auf Tastendruck.<br />
Allerdings existieren zum Teil große Unterschiede in der Art der Integration<br />
der SDKs in die jeweilige IDE 24 . Während in Visual C++ lediglich<br />
ein Wizard integriert werden kann, der dabei hilft, das Grundgerüst einer Anwendung<br />
zu erstellen, bietet das Mobile Studio von Borland deutlich mehr<br />
Komfort. Neben der Verwaltung der Projektdateien (.mmp) besteht hier auch<br />
die Möglichkeit mit wenigen Handgriffen aus der IDE heraus verschiedene<br />
Build-Targets (siehe Abschnitt 4.5.1) auszuwählen, oder auch GUI-Elemente<br />
leicht mit einigen Mausklicks zu erstellen.<br />
Das Tool makmake, auf das in Abschnitt 4.5 näher eingegangen wird bietet<br />
die Möglichkeit MS-Visual-C++-Projektdateien zu erstellen, die mit der<br />
IDE geöffnet werden können. Zu diesem Zweck muß das Tool mit dem Auruf<br />
makmake programm.mmp vc6 gestartet werden. Wird ein Projekt über die so<br />
erstellte Datei geladen, sind in der IDE sämtliche Parameter gesetzt, um die<br />
Anwendung von dort aus zu kompilieren, zu starten oder zu debuggen. Allerdings<br />
müssen die Projektdateien jedesmal neu erstellt werden, wenn neue<br />
Quellcode-Dateien zum Projekt hinzugefügt werden. Diese müssen zunächst<br />
in die Projektdefinitionsdatei eingetragen werden, bevor daraus erneut eine<br />
Workspace-Datei erstellt werden kann.<br />
19 http://www.python.org/<br />
20 Software Development Kit<br />
21 http://msdn.microsoft.com/visualc/<br />
22 http://www.metrowerks.com/<br />
23 http://www.borland.com/downloads/download_cbuilderx.html<br />
24 Integrated Development Environment: Entwicklungsumgebung<br />
10
4.3 Sichere Speicherverwaltung<br />
C++ Programme für <strong>Symbian</strong> müssen hinsichtlich des Speichermanagements<br />
mit besonderer Sorgfalt programmiert werden. Besondere Makros, Funktionen<br />
und Klassen erleichtern es dem Programmierer, diese komplexe Anforderung<br />
umzusetzen ([Symb<strong>OS</strong>, Siehe S.52,88f.]).<br />
Mit Hilfe der Makros __UHEAP_MARK und __UHEAP_MARKEND, die das komplette<br />
Programm umschließen sollten, wird der allokierte Speicher bei Programmstart<br />
und -ende überprüft. Somit wird gewährleistet, daß der komplette<br />
von der Anwendung genutzte Speicher beim Verlassen des Programms<br />
wieder freigegeben wird.<br />
Die Klasse CleanupStack hilft ebenfalls dabei, Memory Leaks zu vermeiden.<br />
Auf dem Cleanupstack werden zusätzliche Referenzen auf Objekte<br />
abgelegt. Falls beim Verarbeiten eines Objekts ein Fehler auftritt, und die<br />
Referenz darauf verloren geht, existiert weiterhin die Objektreferenz auf dem<br />
Cleanupstack, die dazu genutzt werden kann, den vom Objekt belegten Speicher<br />
wieder freizugeben. Die statischen Funktionen PushL(), Pop() sowie<br />
PopAndDestroy() der Klasse CleanupStack dienen dazu, Objektereferenzen<br />
auf dem Cleanupstack zu speichern, sie wieder davon zu entfernen und gegebenenfalls<br />
das zugehörige Objekt zu zerstören.<br />
<strong>Symbian</strong> bietet darüber hinaus einen fehlertoleranten Konstruktor. Der<br />
Operator new (ELeave) erzeugt ein temporäres Objekt. Konnte das temporäre<br />
Objekt erfolgreich erstellt werden, wird es dem eigentlichen Objekt<br />
übergeben und die Objekterzeugung kann ohne weitere Speicherprobleme<br />
abgeschlossen werden. Tritt ein Fehler auf, so läuft die Routine in die vorgesehene<br />
Fehlerbehandlung. Eine typische Verwendung des fehlertoleranten<br />
Konstruktors sieht wie folgt aus:<br />
CFbsBitmap iBmp = new ( ELeave ) CFbsBitmap ;<br />
4.4 Erste Anwendungen<br />
4.4.1 Konsolenanwendung<br />
<strong>Symbian</strong> bietet neben der von Smartphones gewohnten graphischen Oberfläche<br />
eine Konsole, wie man es von Betriebssystemen wie Linux oder Windows<br />
gewohnt ist. In der Praxis findet diese jedoch kaum Verwendung und wird für<br />
gewöhnlich von Entwicklern zum Debuggen genutzt. Am Beispiel einer Konsolenanwendung<br />
läßt sich jedoch gut der Aufbau eines simplen Programms erklären,<br />
ohne auf das komplexe GUI-Framework einzugehen. C++ Programme<br />
unter <strong>Symbian</strong> haben, wie in anderen Programmiersprachen auch, einen festen<br />
Einstiegspunkt in den Programmcode. Dies ist die Funktion E32Main().<br />
11
Sie wird beim Start der Anwendung gerufen. Als Rückgabewert wird ein<br />
Integer verlangt. Dieser stellt, wie in anderen C-Programmen üblich, einen<br />
Exit-Status dar.<br />
Ein einfaches „Hello World!“-Programm für die Konsole sieht folgendermassen<br />
aus:<br />
# include < e32base . h><br />
# include < e32cons . h><br />
LOCAL_D CConsoleBase ∗ c o n s o l e ;<br />
_LIT( t i t l e , " Hello ␣Text" )<br />
void consoleMainL ( )<br />
{<br />
c o n s o l e = Console : : NewL( t i t l e , TSize ( KConsFullScreen ,<br />
KConsFullScreen ) ) ;<br />
CleanupStack : : PushL ( c o n s o l e ) ;<br />
console −>P r i n t f (_L( " Hello ␣World ! \ n" ) ) ;<br />
console −>P r i n t f (_L( " [ p r e s s ␣any␣key ] " ) ) ;<br />
console −>Getch ( ) ;<br />
}<br />
CleanupStack : : PopAndDestroy ( ) ;<br />
GLDEF_C TInt E32Main ( )<br />
{<br />
__UHEAP_MARK;<br />
CTrapCleanup ∗ cleanupStack=CTrapCleanup : : New ( ) ;<br />
TRAPD( error , consoleMainL ( ) ) ;<br />
__ASSERT_ALWAYS( ! error , User : : Panic (_L( "PEP" ) , e r r o r ) ) ;<br />
delete cleanupStack ;<br />
__UHEAP_MARKEND;<br />
return 0 ;<br />
}<br />
Mit diesem Quellcode wird ein Programm erzeugt, welches „Hello World!“<br />
auf der Konsole ausgibt, eine beliebige Eingabe vom Benutzer abwartet und<br />
sich daraufhin beendet.<br />
Der Zweck des Cleanupstacks und der verwendeten Makros __UHEAP_MARK<br />
und __UHEAP_MARKEND wurden bereits in Abschnitt 3.3 erläutert.<br />
12
Das Makro TRAP bzw. TRAPD stellt einen Mechanismus zur Verfügung, der<br />
mit dem Exception-Handling in anderen Programmiersprachen vergleichbar<br />
ist. Der erste Parameter ist dabei eine Variable, in der ein Fehlercode gespeichert<br />
wird. Der zweite Parameter ist die auszuführende Funktion. Eine<br />
Funktion kann mittels USER::LEAVE() die normale Ausführung beenden<br />
und die Exception-Behandlung anstoßen. Als Programmierkonvention gilt es<br />
Funktionen, die solche Fehler auslösen können, mit einem L am Ende des<br />
Funktionsnamens zu kennzeichnen. Das __ASSERT_ALWAYS-Makro überprüft<br />
anschließend, ob die in TRAPD ausgeführte Funktion einen Fehler zurückgeliefert<br />
hat und reagiert entsprechend. Durch den Aufruf von User::Panic()<br />
wird eine Systemreaktion (Panic) ausgelöst. Dies führt dazu, daß der Kernel<br />
die Programmausführung stoppt und den kompletten zum Prozess gehörenden<br />
Speicher freigibt.<br />
Das eigentliche Verhalten der Anwendung wird durch die Befehle Printf()<br />
und Getch() des Konsolenobjekts realisiert. Printf() gibt dabei eine Zeichenkette<br />
auf der Konsole aus, während Getch() auf eine Benutzereingabe<br />
wartet und danach mit der Ausführung des Programms fortfährt.<br />
Der Parameter _L("Hello World!\n"), welcher Printf() übergeben wird,<br />
ist mit einem String-Objekt vergleichbar. In <strong>Symbian</strong> werden anstelle von<br />
Strings so genannte Deskriptoren verwendet. Diese entsprechen im Grunde<br />
einer String-Klasse und bieten ähnliche Funktionen an. Dazu zählt u.a. das<br />
Suchen von Zeichen oder der lexikographische Vergleich. Zur Erstellung von<br />
Deskriptoren existieren zwei Makros. Das Makro _L erzeugt einen Deskriptor<br />
ohne einen Namen dafür zu vergeben. Er kann so direkt als Parameter<br />
übergeben werden. Werden Deskriptoren an mehreren Stellen benötigt, ist es<br />
sinnvoll mittels _LIT 25 einen benannten Deskriptor zu erzeugen.<br />
4.4.2 Graphische-Anwendung<br />
GUI-Anwendungen 26 für <strong>Symbian</strong> basieren auf CONE 27 und EIKON 28 . CO-<br />
NE ist hierbei die zugrunde liegende Schicht, die eine Zeichenfläche auf<br />
dem Display bereitstellt und für die Eventbehandlung zuständig ist. EI-<br />
KON hingegen verwaltet das Look&Feel der Oberfläche. Die Komponenten<br />
von EIKON sind entsprechend austausch- und erweiterbar. So können Gerätehersteller<br />
die GUI-Komponenten ihrer Software anpassen und erweitern<br />
ohne tief in den Code des Betriebssystems einzugreifen. Auf der nächsten<br />
Schicht des Frameworks erben Klassen des UIKON-Frameworks von EIKON-<br />
25 _L bzw. _LIT steht dabei für Literal<br />
26 GUI: Graphical User Interface bzw. Grafische Benutzeroberfläche<br />
27 Control-Environment<br />
28 Griechisch für Aussehen, Form<br />
13
Model<br />
CExampleDocument<br />
+CreateAppUiL()<br />
CExampleAppView<br />
+Draw()<br />
View<br />
Controller<br />
CExampleAppUi<br />
+HandleCommandL()<br />
CExampleApplication<br />
+AppDlluid()<br />
+CreateDocumentL()<br />
erzeugt<br />
Abbildung 3: Model-View-Controller<br />
Klassen und bieten eine User-Interface-Klassenbilbliothek für Standard-GUI-<br />
Komponenten (Vergleiche [Symb<strong>OS</strong>, Seite 110]).<br />
Das Application Famework, das graphische Anwendungen unter <strong>Symbian</strong><br />
<strong>OS</strong> ermöglicht, wendet das klassische Model-View-Controller-Paradigma 29<br />
an. Ein Programm mit graphischer Oberfläche besteht aus mindestens vier<br />
Klassen. Neben den Klassen für die Daten (Model), die Darstellung (View)<br />
und die Datenverarbeitung (Controller) gibt es eine weitere Applikationsklasse,<br />
die für das Starten der Anwendung verantwortlich ist.<br />
Beim Starten der Anwendung wird zunächst vom Framework eine Instanz<br />
der Klasse CExampleApplication erstellt. Danach wird die UID 30<br />
der Anwendung ausgelesen und geprüft, ob das Programm bereits läuft.<br />
Ist dies der Fall wird zu der laufenden Instanz gewechselt. Auf diese Weise<br />
wird verhindert, dass mehrere Instanzen eines Programms gestartet werden.<br />
Läuft eine Anwendung noch nicht, wird anschließend die Model-Klasse<br />
CExampleDocument instanziiert. Dabei werden persistent gespeicherte Daten<br />
geladen, falls solche vorhanden sind. Ist das Laden der Daten abgeschlossen,<br />
wird vom Model aus eine Instanz der Klasse CExampleAppUi erstellt. Dabei<br />
handelt es sich um die Controller-Klasse, über die die Daten des Modells manipuliert<br />
werden können. Abschließend instanziiert die Controller-Klasse die<br />
View-Klasse CExampleAppView. Diese ist für die Darstellung der Anwendung<br />
auf dem Display zuständig. Sie ist für das Zeichnen der Oberflächenkomponenten<br />
verantwortlich.<br />
4.5 Der Buildprozess<br />
Um ein Projekt zu erstellen, werden zunächst Makefiles benötigt, die den<br />
Kompilierprozess steuern. Zum Erstellen der genannten Makefiles wird zu-<br />
29 Architekturmuster zur Trennung von Software-Systemen<br />
30 Unique Identifier<br />
14
CEikApplication<br />
+AppDlluid()<br />
+CreateDocumentL()<br />
Uikon-Framework<br />
CEikDocument<br />
+CreateAppUiL()<br />
CEikAppUi<br />
+HandleCommandL()<br />
Control Environment<br />
CONE<br />
CCoeControl<br />
+Draw()<br />
CExampleApplication<br />
CExampleDocument<br />
CExampleAppUi<br />
CExampleAppView<br />
+AppDlluid()<br />
+CreateDocumentL()<br />
+CreateAppUiL()<br />
+HandleCommandL()<br />
+Draw()<br />
Abbildung 4: GUI-Klassen<br />
nächst die Datei Bld.inf benötigt. Sie enthält in der Regel nur einen Verweis<br />
auf die Projektdefinitionsdatei und wird vom Entwickler erstellt. Ihr Inhalt<br />
muss mindestens aus zwei Zeilen bestehen:<br />
PRJ_MMPFILES<br />
. \ group \ h e l l o w o r l d .mmp<br />
Die Projektdefinitionsdatei enthält weitere Informationen über das zu<br />
erstellende Projekt. Ihr Inhalt wird in Abschnitt A genauer beschrieben.<br />
Der Aufruf bldmake bldfiles verarbeitet die Datei Bld.inf bzw. die<br />
darin angegebene Projektdefinitionsdatei und generiert dabei sämtliche Makefiles<br />
für die verschiedenen Build-Targets (siehe Abschnitt 4.5.1) sowie die<br />
Batchdatei Abld.bat. Zu diesem Zweck wird während der Ausführung das<br />
Makefile Creation Utility makmake aufgerufen, welches aus einer Projektdefinitionsdatei<br />
ein Makefile für eine beliebige Plattform generieren kann.<br />
Durch das Ausführen der Batchdatei Abld.bat mit dem gewünschten<br />
Build-Target als Parameter, wird das Kompilieren und Linken der entsprechenden<br />
Dateien angestoßen. Intern wird dabei das Perl-Skript Abld.pl 31 mit<br />
den entsprechenden Parametern aufgerufen. Dieses lokalisiert das gewünschte<br />
Makefile und parametrisiert das Tool nmake damit. Während der darauffolgenden<br />
Verarbeitung des Makefiles werden Compiler und Linker aufgerufen,<br />
um aus den Quellcode-Dateien ausführbaren Programmcode zu erzeugen.<br />
4.5.1 Build-Targets<br />
Bei der <strong>Anwendungsentwicklung</strong> für <strong>Symbian</strong> <strong>OS</strong> ist zu beachten, daß Software<br />
auf PCs entwickelt wird, die in der Regel mit einer x86 CPU 32 laufen.<br />
31 ABLD: Automatic Build Tool<br />
32 Prozessor mit CISC-Architektur<br />
15
ldmake<br />
Aufruf:<br />
verarbeitet<br />
bldmake bldfiles<br />
bld.inf<br />
verweist auf<br />
*.mmp<br />
ruft auf<br />
makmake<br />
erzeugt<br />
Abld.bat<br />
*.WINS<br />
*.ARMI<br />
...<br />
Abbildung 5: BldMake<br />
Die entwickelte Anwendung wird später jedoch auf einen anderen Gerät eingesetzt,<br />
das einen anderen Chipsatz verwendet. In Geräten, die unter dem<br />
<strong>Symbian</strong> Betriebsystem laufen, werden meist StrongARM-Prozessoren 33 verbaut.<br />
Diese beherrschen weniger und andere Befehle als x86 CPUs. Somit ist<br />
kompilierter Code nur auf dem Gerät lauffähig, für den er übersetzt wurde.<br />
Um auf einem PC ausführbare Dateien für ein <strong>Symbian</strong>-Gerät zu erstellen<br />
wird daher ein Cross-Compiler eingesetzt.<br />
Da Programme für verschiedene Prozessorarchitekturen anders erstellt<br />
werden und andere Compiler nutzen, werden verschiedene Makefiles benötigt,<br />
die die entsprechenden Schritte und Abhängigkeiten definieren. Für jede<br />
Zielplattform wird ein eigenes Makefile benötigt, das mit Hilfe des Tools<br />
makmake erstellt werden kann. Um alle Makefiles für alle verfügbaren Plattformen<br />
in einem Schritt zu erstellen, kann das Tool bldmake wie in Abschnitt<br />
4.5 beschrieben genutzt werden.<br />
4.5.2 Build für den Emulator<br />
Wurden die Makefiles bereits, wie in Abschnitt 4.5 beschrieben erstellt, kann<br />
der Buildprozess direkt angestoßen werden. Durch den Aufruf abld build<br />
wins udeb wird mit Hilfe des Makefiles mit der Endung WINS ausführbarer<br />
33 Prozessor mit RISC-Architektur<br />
16
abld.bat<br />
ruft auf<br />
Aufruf:<br />
abld build udeb wins<br />
abld build urel armi<br />
abld.pl<br />
ruft auf<br />
nmake<br />
ruft auf<br />
verarbeitet<br />
*.WINS<br />
*.ARMI<br />
...<br />
Compiler/<br />
Crosscompiler<br />
verarbeitet<br />
Quellcode<br />
(*.h, *.cpp)<br />
Linker<br />
erzeugt<br />
verarbeitet<br />
Objektcode<br />
(*.o, *.obj)<br />
erzeugt<br />
Programmcode<br />
(*.app, *.exe, *.dll)<br />
Abbildung 6: Automatic Build Tool<br />
Build<br />
UREL<br />
UDEB<br />
Typ<br />
Unicode Release<br />
Unicode Debug<br />
WINS<br />
ARMI<br />
WINS<br />
ARMI<br />
Zielplattform<br />
WINS: Emulator<br />
ARMI: Device<br />
Abbildung 7: Build-Targets<br />
17
Bld.inf<br />
bldmake bldfiles<br />
Bld.inf<br />
bldmake bldfiles<br />
Abld.bat<br />
*.app, *.rsc<br />
Abld build wins urel<br />
oder<br />
Abld build wins udeb<br />
Abld.bat<br />
*.app, *.rsc<br />
Abld build wins urel<br />
oder<br />
Abld build wins udeb<br />
makesis *.pkg<br />
*.sis<br />
Abbildung 8: Build-Prozess für Emulator und Endgerät<br />
Code für das Build-Target WINS erzeugt. Ergebnis des Builprozesses sind zwei<br />
Dateien mit den Endungen .app und .rsc. Beide Dateien liegen im Verzeichnis<br />
\epoc32\release\wins\udeb\z\system\apps\PROJEKTNAME. Die APP-<br />
Datei ist dabei das ausführbare Programm und die RSC-Datei die kompilierte<br />
Ressource (siehe Abschnitt D). Wurde in der Projektdefinitionsdatei als Zieltyp<br />
EXE angegeben wird eine ausführbare Datei mit selbiger Endung im Verzeichnis<br />
\epoc32\release\wins\udeb\ erzeugt. Diese Datei kann direkt aus<br />
Windows gestartet werden und lädt das Programm direkt in den Emulator.<br />
4.5.3 Build für die Zielplattform<br />
Der Buildprozess für die Zielplattform ist ähnlich dem für den Emulator. Da<br />
das Programm jedoch noch auf dem <strong>Symbian</strong>-Gerät installiert werden muß,<br />
sind einige weitere Schritte notwendig.<br />
Der Aufruf abld build armi urel stößt den Buildprozess unter der Verwendung<br />
des Makefiles mit der Endung ARMI an. Die dabei entstandenen<br />
Dateien mit den Endungen APP und RSC müssen anschließend in eine Installationsdatei<br />
verpackt werden, die auf dem Endgerät ausgeführt werden<br />
kann. Hierzu wird eine PKG-Datei benötigt, die Installationsinformationen<br />
und Systemvoraussetzungen enthält (siehe Abschnitt B). Diese Datei ist mit<br />
dem Java-Application-Descriptor (JAD-Datei) bei J2ME zu vergleichen und<br />
wird vom Programmierer geschrieben. Die Installationsdatei mit der Endung<br />
SIS (siehe Abschnitt C) kann schließlich aus der PKG-Datei generiert werden.<br />
Dies geschieht mit Hilfe des Tools makesis. Die Installationsdatei enthält den<br />
ausführbaren Programmcode und ist mit einem JAR-Archiv auf der J2ME-<br />
Plattform vergleichbar.<br />
18
5 Anhang<br />
A<br />
Projekdefinitionsdatei<br />
In der Projektdefinitionsdatei mit der Endung MMP werden alle Informationen<br />
aufgelistet, die für das Erstellen der Buildskripte und schließlich der fertigen<br />
Anwendung nötig sind. Hier stehen neben allen benötigten Dateien (Sourcecode,<br />
Ressourcen) auch die zugehörigen Quell-Pfade, sowie weitere Angaben<br />
zur zu erstellenden Datei (Ziel-Pfad, Name, Typ). Weiterhin sind auch sämtliche<br />
verwendeten Bibliotheken aufgelistet, die später durch den Linker eingebunden<br />
werden müssen. Weiterhin ist auch die aus bis zu drei 32 Bit Werten<br />
bestehende Unique ID (UID) enthalten. Die UID teilt dem Betriebssystem<br />
z.B. den Typ und den Subtyp der Anwendung mit. Die wichtigste Funktion<br />
der UID ist jedoch die eindeutige Identifikation eines Programms. Anhand<br />
der UID wird z.B. überprüft, ob ein Programm schon läuft und nur zu ihm<br />
gewechselt werden muss, oder ob es neu in den Speicher zu laden ist. Zum<br />
Entwickeln können UIDs zwischen 0x01000000 und 0x0fffffff verwendet<br />
werden. Für Software, die an Kunden ausgeliefert wird, müssen jedoch gültige<br />
UIDs bei <strong>Symbian</strong> beantragt werden. Dies ist kostenlos möglich.<br />
TARGET HelloWorld.app<br />
TARGETTYPE app<br />
UID 0x100039CE 0x10008ACE<br />
TARGETPATH \\system\\apps\\HelloWorld<br />
SOURCEPATH .<br />
SOURCE HelloWorld_main.cpp<br />
SOURCE HelloWorld_Application.cpp<br />
SOURCE HelloWorld_Document.cpp<br />
SOURCE HelloWorld_AppUi.cpp<br />
SOURCE HelloWorld_AppView.cpp<br />
USERINCLUDE .<br />
SYSTEMINCLUDE \\epoc32\\include<br />
RESOURCE HelloWorld.rss<br />
LIBRARY euser.lib apparc.lib cone.lib eikcore.lib<br />
B<br />
Package-Datei<br />
Die Package-Datei wird benötigt, um alle Dateien eines Programms in ein<br />
Installationspaket zu packen. Zu diesem Zweck enthält das PKG-File Infor-<br />
19
mationen über alle zu paketierenden Programmdateien. Weiterhin sind Programmversion,<br />
Zielplattform und verfügbare Sprachversionen angegeben.<br />
; Languages<br />
&EN,DE<br />
; UID<br />
#{"HelloWorld","HalloWelt"},(0x10008ACE),1,0,0<br />
; Supports Series 60 v 0.9<br />
(0x101F6F88), 0, 0, 0, {"Series60ProductID"}<br />
; Files to install<br />
"\<strong>Symbian</strong>\6.1\Siemens\SX1\bin\Epoc32\release\armi\urel\HelloWorld.app"-<br />
"!:\system\apps\HelloWorld\HelloWorld.app"<br />
"\<strong>Symbian</strong>\6.1\Siemens\SX1\bin\Epoc32\release\armi\urel\HelloWorld.rsc"-<br />
"!:\system\apps\HelloWorld\HelloWorld.rsc"<br />
"\<strong>Symbian</strong>\6.1\Siemens\SX1\bin\Epoc32\release\armi\urel\HelloWorld_caption.rsc"-<br />
"!:\system\apps\HelloWorld\HelloWorld_caption.rsc"<br />
"\<strong>Symbian</strong>\6.1\Siemens\SX1\bin\Epoc32\release\armi\urel\HelloWorld.aif"-<br />
"!:\system\apps\HelloWorld\HelloWorld.aif"<br />
C<br />
Installationsdatei<br />
Auf <strong>Symbian</strong>-Endgeräten können Anwendungen aus Installationsarchiven mit<br />
der Endung SIS installiert werden. Um eine solche Datei zu erstellen wird<br />
ein Package-File benötigt, wie es in Abschnitt B näher beschrieben wurde.<br />
Das Tool makesis packt die dort angegebenen Dateien zusammen mit zusätzlichen<br />
Metainformationen in eine Installationsdatei. Die fertige Sis-Datei<br />
kann schließlich mit Hilfe des im SDK enthaltenen Tools Sisar oder durch<br />
den Kommandozeilenaufruf makesis programm.pkg generiert werden.<br />
Um die Herkunft einer Installationsdatei zu verifizieren bietet <strong>Symbian</strong><br />
ein sicheres Softwareinstallationssystem an, welches signierte Software auf ihre<br />
Vertrauenwürdigkeit überprüfen kann. Eigene Software kann mit Hilfe des<br />
Tools Makekeys signiert werden. Makekeys integriert ein digitales Zertifikat<br />
in die Sis-Datei. Somit kann der Softwarehersteller identifiziert werden und<br />
es ist sichergestellt, dass die Software nicht von Dritten verändert wurde.<br />
20
D<br />
Ressourcen<br />
In Ressourcedateien wird die Benutzerschnittstelle eines Programms definiert.<br />
Neben den in der Anwendung Texten werden hier auch Menüstrukturen<br />
festgelegt. Die Auslagerung von Texten hat den Vorteil, daß eine Anwendung<br />
leicht lokalisiert werden kann. Dafür muss nur die jeweilige Ressource-Datei<br />
ausgetauscht werden. Ein erneutes Kompilieren des Programms ist nicht notwendig,<br />
da Ressourcen dynamisch geladen werden.<br />
NAME HELLOWORLD<br />
#include <br />
#include <br />
#include <br />
#include "helloworld.hrh"<br />
RESOURCE RSS_SIGNATURE {}<br />
RESOURCE EIK_APP_INFO<br />
{<br />
menubar=r_helloworld_menubar;<br />
status_pane=R_AVKON_STATUS_PANE_LAYOUT_USUAL;<br />
cba=R_AVKON_SOFTKEYS_OPTIONS_EXIT;<br />
}<br />
RESOURCE MENU_BAR r_helloworld_menubar<br />
{<br />
titles =<br />
{<br />
MENU_TITLE { menu_pane = r_helloworld_options_menu;<br />
txt = "Options";}<br />
};<br />
}<br />
Ressourcedateien müssen, wie Quellcode auch in ein binäres Format übersetzt<br />
werden. Dies geschieht mit Hilfe des Ressourcencompilers. Dieser erzeugt<br />
aus einer RSS-Datei eine kompilierte Ressource mit der Endung RSC und<br />
eine Ressource-Header-Datei mit der Endung RSG. Die Ressource-Header-<br />
Datei wird schließlich in die Quellcodedateien inkludiert, um hier die symbolischen<br />
IDs der Ressourcen bekannt zu machen.<br />
Neben den RSS-Ressourcedateien gibt es noch AIF-Ressourcen. AIF steht<br />
dabei für Application Information File. Diese Ressource wird bei der Installation<br />
einer Anwendung auf einem <strong>Symbian</strong>-Gerät berücksichtigt. Sie enthält<br />
21
Informationen darüber, wie ein Programm in die Oberfläche eines <strong>Symbian</strong>-<br />
Gerätes integriert werden soll und wie dies dargestellt wird. Hier werden sowohl<br />
die Icons einer Anwendung als auch deren Name in verschiedenen Sprachen<br />
abgelegt. Ausserdem kann hier festgelegt werden, ob die Applikation<br />
in den Application-Launcher 34 eingebunden wird. Fehlt die AIF-Ressource,<br />
werden Standard-Icons und Einstellungen verwendet.<br />
Das AIF wird entweder direkt mit dem AIF-Builder 35 oder automatisch<br />
während des Build-Prozesses generiert. Für die automatische Generierung<br />
müssen allerdings die AIF-Informationen in der Projektdefinitionsdatei eingetragen<br />
und zusätzlich eine weitere RSS-Ressource erstellt werden.<br />
#include <br />
RESSOURCE AIF_DATA<br />
{<br />
caption_list =<br />
{<br />
CAPTION { code=ELangEnglisch; caption "HelloWorld!";},<br />
CAPTION { code=ELangGerman; caption "HalloWelt!";},<br />
};<br />
app_uid=0x10008ACE;<br />
num_icons=2;<br />
embeddability=KAppNotEmbeddable;<br />
newfile=KAppDoesNotSupportNewFile;<br />
}<br />
Diese Ressource enthält den Anwendungsnamen in mehreren Sprachen,<br />
die Unique ID, die Anzahl der verwendeten Icons, sowie Informationen darüber,<br />
ob die Anwendung in andere Programme integriert werden kann, und<br />
ob sie neue Dateien erstellen darf. Die Icons, die als Bitmap-Grafik in der Projektdefinitionsdatei<br />
angegeben sind, werden beim Erstellen der AIF-Ressource<br />
in das Multiple-Bitmap-Format (.mbm) umgewandelt und dem AIF hinzugefügt.<br />
34 Hauptmenü eines Smartphones<br />
35 Teil des <strong>Symbian</strong> SDKs<br />
22
Literatur<br />
[Symb<strong>OS</strong>] Ansgar Gerlicher, Stephan Rupp: <strong>Symbian</strong> <strong>OS</strong>, Dpunkt Verlag,<br />
Mai 2004, ISBN 3898642852<br />
[Task00] Martin Tasker et.al., Professional <strong>Symbian</strong> Programming, Wrox<br />
Peer Information, 2000, ISBN 186100303X<br />
[<strong>Symbian</strong>] <strong>Symbian</strong>, http://www.symbian.com<br />
23