Praxis (2003)
Das P800 von SonyEricsson läuft auf dem Betriebssystem Symbian in der Version 7. Von Haus aus lässt sich somit Software in den Programmiersprachen C++ oder Java schreiben. Im Gegensatz zu früheren Java-Handys ist der Hauptprozessor vom P800 schnell genug um mit den Anforderungen der Java Virtual Machine (JVM) klarzukommen. Aus diesem Grund, und dass ich kein C++ kann, habe ich mich entschlossen Java-Programme zu entwickeln. Leider haben sich mir einige Hürden in den Weg gestellt, die den Zeitpunkt der Fertigstellung des ersten lauffähigen Programmes sehr verzögert haben. Aus diesem Grund habe ich dieses HowTo geschrieben, welches sich sicherlich auch auf die Entwicklung von Java-Programmen für das P900 und deren Nachfolger übertragen lässt.
Als Grundlage wird das Symbian OS 7 UIQ SDK for Sony
Ericsson P800
benötigt. Dieses kann man im Developer-Bereich der Ericsson-Website herunterladen
(über 250MB). Die Software muss komplett installiert werden – auch
mit C-Komponenten, selbst wenn nur Java programmiert werden soll.
Anschließend wird der Inhalt der ZIP-Datei "Symbian P800
Emulator" in das Verzeichnis Symbian\UIQ_70\epoc32\data
kopiert (Dateien überschreiben). Für die Java-Entwicklung wird
natürlich ein Java
Development Kit (JDK) von Sun benötigt.
Nach erfolgreicher Installation kann es losgehen. Im Symbian SDK ist keine
Integrated Development Environment
(IDE) mitgeliefert. Die
gibt es von der Firma Metrowerks kostenpflichtig. Es kann aber auch jede andere
Java-IDE, wie z.B. Eclipse, verwendet werden. Es muss lediglich der Classpath
den Gegebenheiten des P800-SDK angepasst werden. Natürlich kann auch ein
simpler Text-Editor verwendet werden. Zumindest Syntax-Highlighting sollte er
unterstützen.
Es ist sehr sinnvoll, sich für alle Projekte eine einheitliche
Verzeichnis-Struktur festzulegen. Das Symbian SDK sieht als Basis-Verzeichnis
für Java-Programme Symbian\UIQ_70\erj\
vor. Hier können
Unterverzeichnisse mit den einzelnen Projekten erstellt werden. Meine
Unterverzeichnis-Struktur sieht wie folgt aus, am Beispiel des Programmes
IPCalc
:
Symbian\UIQ_70\erj\Projekte\IPCalc\
Symbian\UIQ_70\erj\Projekte\IPCalc\code
Symbian\UIQ_70\erj\Projekte\IPCalc\install
Symbian\UIQ_70\erj\Projekte\IPCalc\sis-package
Symbian\UIQ_70\erj\Projekte\IPCalc\source
In der IDE sollte der Classpath auf folgende Pakete gesetzt werden:
Symbian\UIQ_70\epoc32\java\lib\classes.zip
Symbian\UIQ_70\erj\ext\qawt.jar
Symbian\UIQ_70\erj\ext\util.jar
Symbian\UIQ_70\epoc32\java\ext\javaphone.jar
Um Programme zu kompilieren, den Emulator zu starten oder ein SIS-Paket zu erstellen, habe ich aus den Symbian-Beispielen ein paar Batch-Dateien erstellt, die diese Arbeit sehr erleichtern [Download].
start.bat
checkenv.bat
make.bat
emu.bat
sis.bat
In der Datei start.bat
befinden sich Deklarationen von
Umgebungsvariablen, die die Umgebungspfade enthalten. Diese musst du
natürlich deiner Installation des P800-SDKs und des JDKs anpassen.
Die Programm-Entwicklung läuft nun folgendermaßen ab:
Der Java-Quellcode wird mit einem Editor geschrieben, die Datei im
source-Verzeichnis gespeichert. Die Windows-Startmenü-Verknüpfung
C:\WINNT\system32\CMD.EXE /K D:\Symbian\start.bat
wird aufgerufen.
In der Kommandozeile wird SET APPNAME=deinprogrammname
eingegeben.
Anschließend können die Befehle make
, emu
und sis
eingegeben werden um das Programm zu kompilieren, testen
und zu installieren. Kompilieren und Starten im Emulator sollte jetzt
funktionieren. In den nächsten Abschnitten wird erklärt, was zum
Erstellen eines SIS-Paketes noch nötig ist. Übrigens: die Meldungen
Laufzeitfehlern erscheinen in der Eingabeaufforderung, von der aus der Befehl
emu
aufgerufen wurde – natürlich nur, wenn das Programm
im Emulator auf dem PC läuft. Tritt auf dem P800 ein Fehler auf, so wird
das Programm gnadenlos beendet.
Application UIDvon Symbian
Symbian geht bei der Zuordnung von Dateien zu Applikationen einen etwas außergewöhnlichen Weg: Jedes Programm erhält eine eindeutige Application UID. Anhand dieser UID wird festgestellt, welche Datei zu welchem Programm gehört. Die Application UID vergibt Symbian persönlich. Auf der Webseite heisst es, dass eine E-Mail mit dem Betreff 'UID Request' an uid@symbiandevnet.com gesendet werden soll. Dabei muss der eigene Name oder der des Programmes angegeben werden, sowie eine E-Mail-Adresse und die Anzahl der gewünschten UIDs. Symbian schreibt jedoch, dass immer 10 UIDs zugewiesen werden und erhöhter Bedarf begründet werden soll.
Besitzt man noch keine offizielle UID, dann kann welche aus dem Test-Bereich 0x00000001 bis 0x0FFFFFFF benutzen. Programme mit einer solchen UID sollten jedoch erst mit offizieller UID veröffentlicht werden.
Bevor ein SIS-Paket erstellt wird, muss für jedes Programm einmal eine
AIF-, APP- und TXT-Datei erstellt werden. Diese Aufgabe übernimmt der
AIFBuilder vom P800-SDK. Er wird über die Kommandozeile mit dem Befehl
aifbuilder
gestartet. Dort wird eine neue Datei angelegt. Unter Application
wird als Application
Language
Java gewählt, der Name des Programmes, die Application UID
und die Java-Kommandozeile eingetragen. Die Java-Kommandozeile muss -cp
Programname.jar Programname
lauten (mit den zutreffenden Werten).
Bei UI Variants
wird UIQ mit einem Haken versehen. In
das Feld Location to generate files
wird das
Unterverzeichnis install
im Projekt-Verzeichnis des Programmes
ausgewählt. Das Output directory for temporary files
kann beliebig gewählt werden. Nun wird auf den Button Create
geklickt. Es öffnet sich der AIF Icon Designer.
Dort müssen Icons in verschiedenen Größen gezeichnet werden,
die später in der Programm-Auswahlliste vom P800 erscheinen. Ein
abschließendes Speichern und File, Exit
kehrt
zurück. Nun kann mittels klick auf Generate
die
Erstellung von den den oben erwähnten Dateien begonnen werden.
Der letzt Schritt ist das Erstellen eines SIS-Paketes aus den fertigen Dateien (aif, app, jar und txt). Dazu muss eine Datei mit der Endung .pkg erstellt werden, die sinnigerweise den Namen des Programmes trägt. Die pkg-Datei sieht so aus:
; Installation header #IPCalc,(0x01234562),1,0,1,TYPE=SA ; (0x101F80BE),1,0,0,SonyEricssonP80xPlatformProductID ; ; Files "install\IPCalc.aif"-"!:\System\Apps\IPCalc\IPCalc.aif" "install\IPCalc.app"-"!:\System\Apps\IPCalc\IPCalc.app" "install\IPCalc.jar"-"!:\System\Apps\IPCalc\IPCalc.jar" "install\IPCalc.txt"-"!:\System\Apps\IPCalc\IPCalc.txt"
Beginnt eine Zeile mit einem Semikolon, wird sie als Kommentar
interpretiert. Wichtig ist die zweite Zeile, denn dort steht der Name des
Programmes (hier: IPCalc), die Application UID (hier eine Test-UID: 0x01234562)
und die Versions-Nummer (hier: 1,0,1). Die vierte Zeile gibt an, auf welchem
System das Programm installiert werden kann. Als letztes folgt eine Liste der
Dateien, die in das SIS-Paket sollen. Links vom Gleichheitszeichen steht der
lokale Pfad auf deiner Festplatte und rechts der Pfad im P800. Das
Ausrufezeichen am Anfang wird je nach Installationsziel durch C für den
internen Speicher oder D für den MemoryStick ersetzt. Wenn die Datei
gespeichert wurde, kann meine Batch-Datei sis
aufgerufen werden um
das Paket zu erstellen und auf das Handy zu kopieren.
Das P800 läuft ja bekanntlich unter Symbian 7. Symbian kommt mit
verschiedenen Benutzeroberflächen (User Interface
– UI). Auf dem P800 läuft das User Interface Quartz
(UIQ). Um das
Look&Feel von dieser Oberfläche auch in Java zu erhalten wurden die
original Sun-Klassen modifiziert und an das Design von UIQ angepasst.
Außerdem wurden noch ein paar weitere Klassen hinzugefügt, die die
Arbeit erleichtern. Diese Klassen befinden sich im Package
com.symbian.devnet.quartz.awt
– die Dokumentation befindet
sich unter Symbian\UIQ_70\erj\utilities\Awt\docs\index.html
.
Hauptmerkmal: Die Basis-Klasse eines UIQ-Java-Programm, die das User-Interface
darstellt, sollte in nicht die Klasse java.awt.Frame
erweitern,
sondern die Symbian-Klasse
com.symbian.devnet.quartz.awt.QFrame
Ein Beispiel-Programm soll die Verwendung der Klasse demonstrieren.
Aber Vorsicht: Kurioser Weise befindet sich das UIQ-Package nicht
automatisch im Classpath vom P800. Daher macht es Sinn, dieses zur eigenen
Applikation beizulegen, sprich die .class-Dateien vom QAWT-Package in das
JAR-Archiv kopieren. Ich kopiere einfach das komplette Package
com.symbian.devnet.quartz.awt in mein Projekt. Das Package liegt auf deinem
Computer unter Symbian\UIQ_70\erj\Ext\qawt.jar
– Ich kopiere diese
Datei in mein install
-Verzeichnis und füge in der .pkg-Datei
vom Projekt einen entsprechenden Eintrag hinzu. Ebenso muss im AIFBuilder
natürlich die JAR-Datei als Classpath angegeben sein. Also lautet die
Zeile bei Java Command Line Text
: -cp
qawt.jar;Projekt.jar Projekt
Symbian liefert zu dem SDK einen Emulator mit, der unter Windows läuft
und dem Design vom P800 entspricht. Der Emulator wird mit der Batch-Datei
emu
gestartet. Fehlermeldungen erscheinen dann im Fenster, von wo
aus emu
gestartet wurde. Leider hat der Emulator einen
entscheidenen Nachteil: Er braucht sehr lange zum Starten. Aus diesem Grund
kann es passieren, dass er noch nicht bereit ist, wenn schon deine
Java-Applikation läuft und diese somit nicht sichtbar wird. Der Emulator
bietet zum Glück eine Option Task switch
, mit der man
das Programm dann in den Vordergrund setzen kann, schön ist es aber nicht.
Um das Problem zu lösen verwendet Symbian in seinen Beispielen folgenden
Code, der den Start der Java-Applikation verzögert, wenn der Emulator mit
dem Parameter wait
aufgerufen wurde. Dies geschieht mit den
Batch-Dateien automatisch.
public static void main(String[] args)
{
if (args.length > 0) {
String s = args[args.length - 1];
if (s.equals("wait")) {
try {
Thread.sleep(8000);
}
catch (InterruptedException e) {}
}
}
new Gleitzeit(); // durch deinen Klassennamen ersetzen
}
Siehe Programme und Saufkollege
Kristof Hamann, 2003