Java ME - ReadingSample - Beck-Shop

Werbung
Java ME
Anwendungsentwicklung für Handys, PDA und Co.
von
Heiko Mosemann, Ulrich Breymann
1. Auflage
Hanser München 2006
Verlag C.H. Beck im Internet:
www.beck.de
ISBN 978 3 446 22997 6
Zu Inhaltsverzeichnis
schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG
Java ME
Heiko Mosemann, Ulrich Breymann
Anwendungsentwicklung für Handys, PDA und Co.
ISBN 3-446-22997-3
Leseprobe
Weitere Informationen oder Bestellungen unter
http://www.hanser.de/3-446-22997-3 sowie im Buchhandel
2 Erste Schritte
2.1
2.1.1
Das erste Programm
Die Werkzeuge
Um ein erstes Programm für ein Mobiltelefon schreiben zu können, brauchen wir
eine Entwicklungsumgebung. Es gibt mehrere Systeme auf dem Markt, wir wenden uns zunächst der einfachsten Lösung zu, auf anspruchsvollere Werkzeuge
wird im Abschnitt 17 eingegangen. Im Folgenden werden betriebssystemtypische
Hinweise nur für die am meisten verbreiteten Desktop-Betriebssysteme Windows
XP und Linux gegeben.1 Die einfachste Lösung besteht aus drei Teilen:
1. Java SE Development Kit (JDK)
Um die Programme kompilieren zu können, muss das JDK installiert sein
(download von [JSE]). Am besten setzt man auch gleich den Pfad entsprechend und die Umgebungsvariable JAVA_HOME, wie im Anhang auf Seite 359
beschrieben. Diese Umgebungsvariable wird benötigt, wenn wir später einen
Web-Server installieren (siehe unten, Abschnitt 17.3).
2. Java ME Wireless Toolkit
Sun stellt ein aus mehreren Komponenten bestehendes Werkzeug zur Verfügung, mit dem sehr leicht MIDlets ausprobiert werden können, das Java ME
Wireless Toolkit, abgekürzt WTK (download von [JMEW]). Dieses Toolkit wird
anschließend ebenfalls installiert. Es sei angenommen, dass die Installation in
das Verzeichnis C:\WTK (Windows) bzw. /home/user/wtk (Linux) erfolgt. Bei der
Installation wird die Existenz des JDKs vorausgesetzt. Falls das JDK eine modernere Version als diejenige ist, mit der das Toolkit getestet worden ist, wird
man bei der Installation darauf hingewiesen. Wegen der Kompatibilität des Bytecodes sollten keine Schwierigkeiten zu erwarten sein – aber sie sind nicht auszuschließen, gerade bei dem großen Wechsel von Java 1.4 nach Java 5.
3. Nun brauchen wir noch einen beliebigen Editor zum Programmieren. Die
folgenden drei Editoren gibt es sowohl für Windows wie für Linux: JEdit
(www.jedit.org), SCiTE (www.scintilla.org), XEmacs (www.xemacs.org).
Alternativ gibt es Entwicklungswerkzeuge von einzelnen Herstellern wie SonyEricsson oder Nokia. Auch ist die Integration in andere Entwicklungsumgebungen
1
MAC-User bitten wir vorab um Entschuldigung!
22
2 Erste Schritte
wie NetBeans oder Eclipse möglich. Abschnitt 17.1 im Kapitel über Werkzeuge beschreibt die Entwicklung mobiler Anwendungen mit Eclipse.
2.1.2
Entwicklungsschritte
Hier werden die allerersten Entwicklungsschritte vom Schreiben des Programms
bis zu seiner Ausführung auf einem Emulator beschrieben. Als Werkzeug wird das
Wireless Toolkit (WTK) von Sun benutzt, wie auch in allen folgenden Beispielen.
Programm schreiben
Mit einem der genannten Editoren oder einem anderen schreiben wir das kleine
Programm ErstesMIDlet.java, das einen vorgegebenen Text ausgibt und ein erläuterndes Laufband (Ticker) anzeigt.
Das erste Programm
package de.java_me.jme.beispiele.Projekt0;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ErstesMIDlet extends MIDlet {
private Form form = new Form("Das erste MIDlet!");
public ErstesMIDlet() {
form.addCommand(new Command("ENDE", Command.EXIT, 1));
form.setCommandListener(new CommandListener() {
public void commandAction(Command c, Displayable d) {
notifyDestroyed();
}
});
form.setTicker(new Ticker("Ticker läuft!"));
}
protected void startApp() {
form.append(new StringItem("Nachricht:",
"MIDlet gestartet!"));
Display.getDisplay(this).setCurrent(form);
}
protected void pauseApp() { }
protected void destroyApp(boolean b) { }
}
Einzelheiten zur Funktionsweise der einzelnen Anweisungen werden auf nachfolgende Kapitel verschoben, um zunächst den großen Zusammenhang darzu-
2.1 Das erste Programm
23
stellen. Das WTK bringt die Bibliothek javax.microedition mit, die im JDK
nicht enthalten ist, sowie die zugehörige Dokumentation der APIs, siehe C:\WTK
\docs\api\midp\index.html (Windows) bzw. /home/user/wtk/docs/api/midp/index.html
(Linux). Im Beispielprogramm fällt auf, dass die sonst bei vielen Java-Programmen vorhandene Funktion main(String[]) fehlt – dazu erfahren Sie mehr im
Kapitel 4, »MIDlet Grundlagen«.
Projekt anlegen
Nun starten wir die Komponente KToolBar des Toolkits mit »Start« → »Alle Programme« → »Java ME Wireless Toolkit« → »KToolbar« (Windows) bzw. durch Eingabe des Kommandos /home/user/wtk/bin/ktoolbar (Linux). Die nun folgenden, unten beschriebenen Bedienungsschritte zeigt Abbildung 2.1.
Einstellungen
Abbildung 2.1: Anlegen eines Projekts mit dem WTK
24
2 Erste Schritte
Im KToolbar-Fenster klicken wir nun auf »New Project«, wählen einen Projektnamen, zum Beispiel »Projekt0«, und tragen den Namen unserer ersten MIDletKlasse einschließlich des Package-Namens ein (de.java_me.jme.beispiele.
Projekt0.ErstesMIDlet). Die im nächsten Fenster vorgeschlagenen Projekteinstellungen werden mit OK bestätigt. Die Datei ErstesMIDlet.java kopieren wir in
das neu angelegte Verzeichnis
C:\WTK\apps\Projekt0\src\de\java_me\beispiele\Projekt0 (Windows) bzw.
/home/user/wtk/apps/Projekt0/src/de/java_me/beispiele/Projekt0 (Linux).
Übersetzen und Verifizieren
Betätigen der Schaltfläche »Build« bewirkt die Übersetzung des Programms in
class-Dateien, die im Unterverzeichnis tmpclasses des Projekts abgelegt werden.
Falls die Meldung »Build failed« erscheinen sollte, gibt es noch Syntaxfehler im
Programm, die mit dem Editor zu korrigieren sind, andernfalls erscheint die Meldung »Build complete«. »Build« sorgt für die Einbindung der richtigen Bibliotheken und ist letztlich nichts anderes, als wenn im Verzeichnis Projekt0 in einer Shell
(Linux) bzw. Eingabeaufforderung (Windows) ein entsprechendes Kommando einTipp gegeben würde. Wer wissen will, was sich »hinter den Kulissen« tut, sollte den
Abschnitt 2.5 am Ende dieses Kapitels lesen. Der Abschnitt enthält die Kommandozeilen und auch Informationen über notwendige Optionen, die im Sun WTK mit
den »Project settings« eingestellt werden.
»Build« bewirkt aber noch mehr, nämlich die Prä-Verifikation. Eine vollständige Verifikation im mobilen Endgerät ist zu aufwändig. Es müsste Speicher für das Programm zur Verifikation des Bytecodes bereitgestellt werden, und es würde Laufzeit beim Start einer Anwendung kosten. Daher wird die Bytecode-Verifikation in
zwei Schritten ausgeführt: Eine Prä-Verifikation im ersten Schritt, bei der die verifizierten Dateien aus tmpclasses nach classes kopiert werden, und die abschließende Verifikation beim Start der Anwendung auf dem Endgerät. Der erste Schritt
wird also schon bei der Konstruktion der Software unternommen, und der zweite
Schritt kann deswegen mit sehr viel weniger Speicher und Laufzeit auskommen.
Java ME stellt für die Prä-Verifikation das Programm preverify zur Verfügung, das
mit »Build« implizit aufgerufen wird.
Start der Anwendung – noch ohne Installation
Das Toolkit emuliert verschiedene Gerätetypen, die in der Zeile »Device« zur Auswahl angeboten werden. Mit »Run« wird das Projekt auf dem angezeigten Gerät,
zum Beispiel DefaultColorPhone, wenn wir kein anderes wählen, zum Start angeboten. Der Eintrag »Launch« unten rechts ist ein so genannter Softkey, der mit
der direkt darunter befindlichen Taste betätigt wird und der unser erstes MIDlet
startet. Abbildung 2.2 zeigt das Ergebnis.
2.2 Installationsvorbereitungen
25
Abbildung 2.2: Das erste MIDlet
2.2
Installationsvorbereitungen
Mit der Schaltfläche »Run« läuft das Programm auf Basis der erzeugten classDateien. Das reicht jedoch nicht – letztlich wird eine jar-Datei benötigt, die man auf
ein mobiles Gerät portieren, dort installieren und zur Ausführung bringen kann.
2.2.1
Packen
Die Wahl von »Project« → »Package« → »Create Package« in der obersten Menüzeile bewirkt gleich mehrere Schritte:
• Übersetzen und Prä-Verifikation
mit »Build« wie oben beschrieben.
• Packen zu einem Java-Archiv
Die entstehenden Dateien Projekt0.jar, Projekt0.jad und MANIFEST.MF werden
26
2 Erste Schritte
im Verzeichnis bin des Projekts abgelegt. Statt Projekt0 ist der jeweilige Projektname einzusetzen, hier beziehen wir uns auf das obige Beispiel. Projekt0.jar ist
das ausführbare Java-Archiv, Projekt0.jad ist eine Beschreibungsdatei (java archive description), die den Umfang der Anwendung in Bytes und andere Daten
enthält.
Speicher ist knapp, und die Bandbreite der Netzverbindung ist teuer. Deshalb ist
in Projekt0.jad die Angabe der Größe der jar-Datei besonders wichtig. Die Nutzerin
oder der Nutzer eines mobilen Geräts (oder ein Programm auf diesem Gerät) kann
dann auf der Basis dieser Information entscheiden, ob die jar-Datei tatsächlich aus
dem Internet heruntergeladen werden soll. Für das oben beschriebene Projekt lautet Projekt0.jad2 :
MIDlet-1: Projekt0, Projekt0.png,
de.java_me.beispiele.Projekt0.ErstesMIDlet
MIDlet-Jar-Size: 2458
MIDlet-Jar-URL: Projekt0.jar
MIDlet-Name: Projekt0
MIDlet-Vendor: Unknown
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
Diese vom WTK automatisch erzeugte Datei kann nicht mit einem Shell-Kommando erzeugt werden, aber mit einem beliebigen Editor. Es ist wichtig, dass die angegebene Dateigröße für die jar-Datei stimmt.
2.2.2
Packen mit Speicherplatzminimierung
Es gibt Werkzeuge, die die Namen im Programm durch Abkürzungen ersetzen.
Dadurch wird der Speicherplatz reduziert, die Compilation wird schneller, und
der Programmtext ist für andere nicht mehr so leicht zu entschlüsseln. Zum Beispiel könnte der Name ErstesMIDlet durch a1 ersetzt werden usw. So ein Werkzeug heißt auf Englisch »Obfuscator« von »to obfuscate« (dt. verdunkeln, verwirren). Ein Open Source Obfuscator ist unter [Prog] zu finden. Nach dem Entpacken
der heruntergeladenen Datei wird die Datei proguard.jar in das bin-Verzeichnis des
WTK kopiert und steht damit dem WTK zur Verfügung. Zum Packen wird im WTK
nun generell »Project« → »Package« → »Create Obfuscated Package« (statt »Create
Package«) in der obersten Menüzeile aufgerufen.
Wenn Namen verändert werden, könnte ein Problem auftreten, wenn Klassen dynamisch mit Class.forName() geladen werden sollen. Das wird im WTK verhindert, indem der Obfuscator mit der Option
2
Die erste Zeile erstreckt sich nur aus Layout-Gründen über zwei Zeilen.
2.3 Simulation der Luftschnittstelle
27
-keep public class * extends javax.microedition.midlet.MIDlet
aufgerufen wird. Bedeutung dieser keep-Option: Alle public-Klassennamen sowie der Name der Oberklasse javax.microedition.midlet.MIDlet sollen nicht
vom Obfuscator durch andere Namen ersetzt werden. Die Option ist im WTK voreingestellt. Auf Seite 24 wird gezeigt, wie das Programm mit dem »Run«-Knopf
des WTK gestartet wird. Dabei sind nur die class-Dateien beteiligt. Im folgenden
Abschnitt 2.3 wird die Simulation der Luftschnittstelle gezeigt, die die gepackte
jar-Datei verwendet.
2.3
Simulation der Luftschnittstelle
Im Abschnitt 17.2 wird auf Einrichtung und Benutzung eines vom WTK unabhängigen Web-Servers für Zugriffe eingegangen. Bis dahin, und natürlich erst recht
hier im Kapitel »Erste Schritte«, wird mit dem WTK-Emulator gearbeitet, der die
Over the Air-Simulation mit einem internen Web-Server des WTKs erlaubt. »Over
the Air« (OTA), deutsch etwa »durch die Luft«, meint eine Funkverbindung. Die
Auswahl in der obersten Menüzeile »Project« → »Run via OTA« ergibt den Begrüßungsbildschirm (Abbildung 2.3, links). Wenn dort »Apps« und dann »Menu«
mit dem Softkey angeklickt wird, zeigt sich (Abbildung 2.3, rechts) die Auswahl 1
(Launch) und 2 (About).
Abbildung 2.3: Begrüßungsbildschirm der OTA-Simulation und Auswahl
Die Wahl von »Launch« durch Klicken der 1 zeigt einen vorbereiteten URI (Uniform Resource Identifier, siehe Abbildung 2.4)3 an, der mit den Tasten editiert werden kann. Im Beispiel wird er unverändert gelassen. Dieser URI ist die Adresse
des im WTK eingebauten Web-Servers und zeigt auf die im bin-Verzeichnis des
3
Zu den Begriffen URI, URL und URN siehe die Einträge im Glossar Seite 392.
28
2 Erste Schritte
Projekts angelegte Datei Projekt0.html, die nur einen Verweis auf Projekt0.jad enthält. Anklicken von »Menu« liefert die Auswahl 1 (Go) und 2 (Save). Auf einem
Handy kann das Bild je nach Hersteller ganz anders aussehen. Es kann auch sein,
dass das Menu erst über die Betätigung eines Softkeys »Optionen« sichtbar wird.
Abbildung 2.4: URI
Die Wahl von 1 (Go) simuliert die Verbindung und das Laden der Datei Projekt0.jad,
deren Namen im Schirm angezeigt wird. Die Wahl des Softkeys »Install« zeigt
einen Informationsbildschirm, auf dem auch die Größe der Anwendung angezeigt
wird, an und fragt, ob die Installation fortgesetzt werden soll (Abbildung 2.5).
Abbildung 2.5: Informationen aus der jad-Datei
»Install« lädt und verifiziert den geladenen Code. Danach wird das Projekt0 zur
Auswahl angeboten. Klicken von »Menu« 1 (=Launch) startet die Anwendung, sodass sich dasselbe Bild wie Abb. 2.2 auf Seite 25 ergibt. Die Simulation ist beendet!
2.4 Installation auf einem Gerät
2.4
29
Installation auf einem Gerät
Es gibt verschiedene Wege, ein Programm auf einem mobilen Endgerät zu installieren:
• Übertragung durch die Luft.
Das Programm wird auf einen Web-Server gespielt. Von da aus kann es mit dem
Browser des Endgeräts heruntergeladen und installiert werden. Dieser Prozess
benutzt eine Funkverbindung, also die so genannte Luftschnittstelle, englisch
»over the air« oder kurz OTA genannt. Die Abbildung 2.6 zeigt den Ablauf von
der Entwicklung bis zur Nutzung.
Entwicklung
Nutzung
Ergebnis:
Editieren
URL wählen
.java
Download
.jad
javac
.class
preverify
Luftschnittstelle
(Funk)
Download
.jar
.class
jar
Mobilfunkanbieter
Installieren und
verifizieren
.jar .jad
run
(KVM)
obfuscate
.jar .jad
auf Web-Server
bringen
Internet
Abbildung 2.6: Ablauf von der Entwicklung bis zur Nutzung
30
2 Erste Schritte
• Direkte Übertragung vom PC.
Direkte Übertragung kann im Wesentlichen auf zwei Arten geschehen: drahtlos
über eine Infrarotschnittstelle oder Bluetooth, oder über ein USB-Kabel.
Bei der Übertragung benutzt man am besten die für das Gerät vorgesehene
Software des Herstellers, die allerdings im Allgemeinen nur für das WindowsBetriebssystem geliefert wird. Leider ist das Vorgehen zur direkten Übertragung
sehr herstellerspezifisch, sodass keine generelle Vorgehensweise beschrieben werden kann. Aus diesem Grund sei wenigstens ein konkretes Beispiel4 gezeigt.
Software-Installation über ein USB-Kabel
Zur Installation von Software über ein USB-Kabel werden Handy und USBSchnittstelle des PC mit dem Kabel verbunden. Anschließend sind nur noch wenige Schritte zu tun:
1. Die Frage auf dem Bildschirm des Handys »Telefon als Speichergerät verwenden?« wird verneint.
2. »PC Suite« des Herstellers (nur für Windows erhältlich) aufrufen und dort »Anwendungen installieren« anklicken (siehe Abbildung 2.7).
Abbildung 2.7: Software-Installation auf dem Handy
4
Das Vorhandensein eines Firmennamens in einem Bild oder im Text ist weder als Empfehlung noch
als Ablehnung des Herstellers zu verstehen. Die Autoren haben keinerlei Geschäftsbeziehung zu
einem der Hersteller mobiler Endgeräte.
2.5 Hinter den Kulissen
31
Im erscheinenden Fenster wird links die zu installierende jar-Datei ausgewählt. Ein
Klick auf den großen Pfeil in der Mitte bewirkt die Installation. Eine Installation
über die Bluetooth-Schnittstelle ist mit der PC-Suite ebenfalls möglich und in der
Dokumentation zur Software beschrieben.
2.5
Hinter den Kulissen
Natürlich braucht man nicht zwingend das Sun WTK zur Entwicklung von MIDlets. Andere Werkzeuge wie Eclipse werden im Kapitel 17 vorgestellt. Hier wird
gezeigt, was das Sun WTK eigentlich tut, indem alle oben beschriebenen Schritte
als Kommandozeilenbefehle gezeigt werden – schließlich macht das WTK nichts
anderes, als im Hintergrund diese Befehle abzusetzen und die BildschirmausgaBitte
be umzuleiten. Im Folgenden wird davon ausgegangen, dass alle Kommandos im
beachten!
Verzeichnis des Projekts ausgeführt werden und dass das Projektverzeichnis im
Verzeichnis wtkapps des Sun WTK liegt. Wenn das nicht der Fall ist, müssen die
Kommandos entsprechend angepasst werden.
Übersetzen
Ein Klick auf die Schaltfläche »Build« des Sun WTK sorgt für die Einbindung der
richtigen Bibliotheken und ist letztlich nichts anderes, als wenn im Verzeichnis
Projekt0 in einer Shell (Linux) bzw. Eingabeaufforderung (Windows) das folgende
Kommando eingegeben würde, allerdings in einer Zeile statt der hier aus LayoutGründen gezeigten drei:
javac -bootclasspath ../../lib/cldcapi10.jar;
../../lib/midpapi20.jar -d tmpclasses -source 1.3 -target 1.1
src/de/java_me/beispiele/Projekt0/ErstesMIDlet.java
Das Verzeichnis tmpclasses muss existieren und ggf. vorher angelegt werden, wie
auch die Verzeichnisse classes und bin, die weiter unten benötigt werden. Die Option -source 1.3 besagt, dass der Quellcode als Java 1.3-Code aufzufassen ist. Option -target 1.1 weist den Compiler an, Bytecode für eine Java 1.1-Virtual Machine, wie sie oft in Handys vorhanden ist, zu erzeugen. Java 1.4 oder höher wird von
den VM derzeit nicht unterstützt. -source 1.4 verbietet sich, weil es automatisch
-target 1.4 impliziert. Die Option -bootclasspath lädt in diesem Beispiel die
Bibliotheken der Konfiguration CLDC (Connected Limited Device Configuration)
der Version 1.0 und das MIDP (Mobile Information Device Profile) der Version 2.0.
Verifizieren
Das Programm preverify wird aus dem Projekt-Verzeichnis über die folgende Kommandozeile aufgerufen:
Herunterladen