19.01.2015 Aufrufe

Anwendungsentwicklung für Symbian OS

Anwendungsentwicklung für Symbian OS

Anwendungsentwicklung für Symbian OS

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!