Praxis (2003)

Einstieg in die Entwicklung von Java-Programmen für das SonyEricsson P800 unter Windows

Foto vom P800
SonyEricsson P800

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.

Vorbereitungen

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:

Screenshot der Verzeichnis-Struktur
Symbian\UIQ_70\erj\Projekte\IPCalc\
  • Projekt-Dateien von der IDE
  • Dateien vom AIFBuilder (siehe unten)
Symbian\UIQ_70\erj\Projekte\IPCalc\code
  • Fertige Java-Klassen (*.class)
Symbian\UIQ_70\erj\Projekte\IPCalc\install
  • Ergebnis vom AIFBuilder
  • JAR-Paket
Symbian\UIQ_70\erj\Projekte\IPCalc\sis-package
  • Fertiges SIS-Paket zur Installation auf dem P800
Symbian\UIQ_70\erj\Projekte\IPCalc\source
  • Java Quellcode-Dateien (*.java)

In der IDE sollte der Classpath auf folgende Pakete gesetzt werden:

Screenshot der Batch-Befehle
Die Batch-Dateien sind nahezu eine komplette textbasierte Entwicklungsumgebung

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
Deklariert Variablen (an dein System anpassen!) für den Emulator, den Classpath usw. Muss vor den anderen Batch-Dateien ausgeführt werden
checkenv.bat
Wird von den folgenden Dateien aufgerufen um zu prüfen, ob die start.bat vorher gestartet wurde und APPNAME definiert ist.
make.bat
Kompiliert alle .java-Dateien einer Applikation und erstellt ein JAR-Paket daraus
emu.bat
Startet den P800-Emulator mit einem Programm
sis.bat
Erstellt eine SIS-Datei und führt diese zur Installation auf dem P800 aus.

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.

Die Application UID von 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.

AIF Builder

Screenshot vom AIF-Builder
Mit dem AIF-Builder werden die Einstellungen zum Erstellen eines SIS-Paketes gesetzt

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.

Erstellen eines SIS-Paketes

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.

Java-Klassen für die Benutzeroberfläche UIQ

Das P800 läuft ja bekanntlich unter Symbian 7. Symbian kommt mit verschiedenen Benutzeroberflächen (User InterfaceUI). 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

Der Emulator

[Screenshot vom Emulator]
Der Emulator bietet zahlreiche Debug-Funktionen

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
}

Beispiel-Software-Download

Siehe Programme und Saufkollege

Kristof Hamann, 2003