Datum Technologie Entwicklung Werkzeug Übung Grundlagen 23.10.30 1 Überblick Ant Kompilieren 30.10.03 2 WLAN, BT Eclipse Projektverwaltung 06.11.03 3 GSM Eclipse Debugging 13.11.03 4 WAP, WML, WMLS XML Nokia Toolkit WML, WMLS 20.11.03 5 WAP, SMS, MMS XML JAVA mobil 27.11.03 6 Einführung J2ME J2ME Toolkit Erste Schritte 04.12.03 7 MIDP 1.0 GUI Grafik 11.12.03 8 JSR RMS+IO POSE RMS 18.12.03 9 MIDP 2.0 Media+Game Vernetzte Systeme 08.01.04 10 Grundlagen Netzwerke Tomcat Servlet 15.01.04 11 Projektvergabe SMS, MMS Kannel SMS Service 22.01.04 12 Cocoon 29.01.04 13 05.02.04 14 12.02.04 15 Präsentationen www.informatik.unibas.ch/lehre 1
ENTWICKLUNG Übersicht Java Basis Technologien J2SE Java Archive ( JAR ) file format J2ME Mobile Information Device Profile (MIDP) J2EE Servlets Cocoon Entwicklungs-Werkzeuge Ant Eclipse Wireless Toolkit Nokia WAP Toolkit PalmOS Emulator Übertragungs - Technologien Hardware Drahtlose Netze WAP 2.0 SMS / MMS Mobile Geräte 2
TECHNOLOGIE Übung 4 : WML / WMLS Probleme bei den Lösungen: Links kontrollieren (relativ/absolut/bilder) Navigation konsistent? (Soft-Key/Links) wünschbar: von jedem Ort wieder auf die Einstiegs-Seite zu kommen ist die Seite so brauchbar für andere Leute? Erkenntnisse umsetzen bei ev. WML(S)-Projekten Anmerkungen: immer ein Textfile mit hochladen mit Erläuterungen WER (Gruppe?), WAS (Bemerkungen?), Email keine MS-WORD doc-files, lieber txt-files kontrollieren: Ueb4 bei Ueb4 hochladen, nicht bei Ueb5 oder Ueb3 bei mehreren Files: ZIP, TAR, GZ oder SIT etc 3
TECHNOLOGIE Übung 5 : SMiL / MMS Probleme bei den Übungen: Installation aller Tools Was brauche ich für was? Entwicklerproblematik bei neuesten Technologien: Wo finde ich Tools? Welches sind die besten? Wie bringe ich sie zu laufen? Was muss ich tun, damit alle Tools zusammen funktionieren Ziel: Eine zweckmässige Toolbox zusammentragen 4
TECHNOLOGIE Java 2 Micro Edition http://wireless.java.sun.com Wieso wichtig? Alle Vorteile von Java: Plattformunabhängigkeit, Sicherheit,... wird auf zunehmend vielen Platformen unterstützt: Smart Phones, Mobil-Telefone PalmOS Windows CE Symbian OS... Einfachste Art Software für unterschiedliche Mobil-Geräte zu entwickeln 5
TECHNOLOGIE Die Java Welt One Size Does Not Fit All J2SE J2EE J2ME Java 2 Standard Edition Kernklassen für Applets und Applikationen Java 2 Enterprise Edition Servlets, JSP, Java Enterprise Beans heavy duty enterprise networking, I/O, and DB features Übermenge von J2SE Java 2 Micro Edition Untermenge von J2SE Optimiert für wireless mobile devices Definiert durch Profile und Konfigurationen (MIDP, CLDC) J2ME J2SE J2EE 6
TECHNOLOGIE andere Wireless Java Technologien PersonalJava + JavaPhone: Vorläufer von J2ME JavaCard Kontaktlose Smart Card Kontakt-Smart Card Smart Button SIM Card 8/16-bit CPU @ 3.7 MHz 1kB RAM + 16kB EEPROM /flash Java Card Virtual Machine Java Card API Java Card Development Kit JCDK USB Token 7
TECHNOLOGIE J2ME vs. andere Mobile Technologien WML keine Konkurrenz: WML/J2ME = HTML/J2ME WAP/WML = Protokoll für Mobiles Browsing J2ME = Sprache für client-seitige Programme (ggf. mit Internet-Zugriff), Stand-Alone and Offline Applikationen SMS/MMS Kann mit J2ME benutzt werden (Zukunft) JSR 120 : WMA Bluetooth Um Programme auf das mobile Gerät zu laden Kann mit J2ME benutzt werden (Zukunft) JSR 82 : BTAPI 8
TECHNOLOGIE J2ME Hierarchie Verschiedenartige Geräte haben verschiedene Anforderungen. Unterteilung in Konfigurationen und Profile auch hier: One Size Does Not Fit All J2ME Konfigurationen CLDC CDC Profile MIDP1.0 MIDP2.0 FP PP 9
TECHNOLOGIE Konfigurationen Eine J2ME Konfiguration definiert für eine bestimmte Geräte-Menge: minimales Subset von Java Features Subset der Funktionalität der Java Virtual Machine (JVM) : KVM Java APIs Hardware Anforderungen Konfigurationen sind CLDC (1.0 und 1.1) CDC Connected Limited Device Configuration für kleine mobile Geräte Connected Device Configuration für TV Set Top Boxes, Internet TV, Automobile Unterhaltungs-/Navigations- Systeme (gutes Netzwerk, grosser Screen, kleine CPU) 10
TECHNOLOGIE CLDC Connected Limited Device Configuration Hardware 160 kb Java Memory 128 kb non-volatile (KVM + libs) 32 kb volatile Java Runtime 16/32-bit CPU with 8-32 MHz low power Network (often low bandwidth) 1.0 no floating point (no FPU) Security class File verification only predefined APIs / class loaders / features CLDC 1.1 with software floating point / localisation / more security 11
TECHNOLOGIE CLDC Profile: MIDP Profil ist eine genauere Beschreibung der Spezifikationen. Es setzt auf eine Konfiguration auf. MIDP 1.0 Memory: 128kB libs/ 32 kb runtime/ 8kB persistent data Input: Keyboard or Stylus/Touch screen (no mouse!) Display: 96x54 (square!) pixel mit 1-bit Color Network: 2-way wireless, low bandwidth, HTTP OS: interrupts, exceptions, scheduling, read/write persistent memory, timer, read/write network, user input, bitmap graphics, app life cycle management MIDP 2.0 kompatibel zu MIDP 1.0 HTTPS, sockets, datagrams, OTA provisioning, push: events/messages, game functionality, XML parser, sound 12
TECHNOLOGIE CDC Profile PDAP FP PBP PP PDA Profile: MIDP + PIM + FC (FileConnection für Memory Card etc) Foundation Profile: Network, no GUI, 1 MB ROM, 0.5 MB RAM Personal Basis Profile: FP, Robust Network, AWT GUI, 2/1 MB ROM/RAM Personal Profile: CDC, FP, hi-fidelity GUI, Applets, 2.5/1 MB ROM/RAM 13
TECHNOLOGIE Optional Packages JSR PIM : Personal Information Manager BTAPI : Bluetooth WMA : Wireless Messaging MMAPI : Mobile Media JAIN (SIMPLE) Presence JAIN (SIMPLE) Instant Messaging J2ME Web Services SATSA : Security and Trust Services Location SIP : Session Initiation Protocol 3D Event Tracking Public Review Proposed Final Draft Final Release 14
TECHNOLOGIE 15
TECHNOLOGIE MIDlet = J2ME Application Sandbox JAM Security kein Zugriff auf Telefonfeatures Java Application Manager kontrolliert Installation, Ausführung, Löschen von MIDlets; Ausführungsumgebung, Error- Handling MIDlet Lifecycle 16
ENTWICKLUNG Entwicklung in J2ME 0 1 2 3 4 5 Lauffähiges Midlet aus 2 Files JAR : Archiv mit den Klassen und Resourcen JAD : Beschreibung des JAR und globale Einstellungen Preverify Obfuscation 6 17
ENTWICKLUNG Schritt 0 : Vorbereitung Tools installieren, Entwicklungsumgebung zum Laufen bringen und Kennenlernen Neues Projekt einrichten Schritt 1 : Programmieren MIDlet erzeugen (am besten ausgehend von einer Vorlage) 18
ENTWICKLUNG Schritt 2 : MIDlet Suite MIDlets werden preverified und kompiliert MIDlet können/müssen in eine MIDlet Suite zusammengefasst werden. Manifest Manifest-Version: 1.0 MIDlet-Name: HelloExamples MIDlet-Vendor: Xplore N.V. MIDlet-Version: 1.0 MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0 MIDlet-1:BouncingTextMIDlet,,example.hello.BouncingTextMIDlet MIDlet-2:HelloWorldMIDlet,,example.hello.HelloWorldMIDlet MIDlets einer ganzen Suite werden in ein JAR verpackt. Dazu gehören alle CLASS Files, Bilder, Manifest, sonstige Resources Obfuscation möglich: Komprimierung des JAR und Schutz vor Reverse-Engineering 19
ENTWICKLUNG Schritt 3 : JAD JAD-File Java Application Descriptor MIDlet-Name: HelloExamples MIDlet-Vendor: Nokia Pte Ltd MIDlet-Version: 1.0 MIDlet-Jar-Size: 7808 MIDlet-Jar-URL: HelloExamples.jar Enthält obligatorisch: MIDlet-Version, MIDlet-Name, Grösse + Name/Ort des JAR Zum Installieren brauchen wir ein JAD und ein JAR: Endgeräte können schon am JAD erkennen, ob das JAR ausführbar ist: MIDlet-Version, Grösse 20
ENTWICKLUNG Schritt 4 & 5: Emulator & Debugging 21
ENTWICKLUNG Schritt 6 : Deployment Serial Cable Connection Infrarot Bluetooth Mobiles Internet Download OTA (over-the-air) Discovery + JAD downloading through Non-IP Transport oder Downloading JAR 22
MIDP Application Programming Interface Input/Output Network Connection HTTP etc Midlet Lifecycle startapp() pauseapp() destoyapp() java.io java.lang java.util javax.microedition.io javax.microedition.lcdui javax.microedition.lcdui.game javax.microedition.media javax.microedition.media.control javax.microedition.midlet javax.microedition.pki javax.microedition.rms Core von J2SE MIDP 1.0 neu in 2.0 LCD User Interface Screen-based High level GUI Elemente Low level Canvas, Pixel ENTWICKLUNG Game GameCanvas Layer Sprites Record Management System Zum Zugriff auf den Persistenten Speicher (byte array) Zusatz-Pakete WMA MMAPI Sound Mobile Media Player VolumeControl Wireless Messaging MessageConnection MessageListener Multi Media Sound MIDI Video Public Key Secure Connections 23
ENTWICKLUNG Welches MIDP? MIDP 2.0 rückwärts-kompatibel zu MIDP 1.0 MIDP 1.0 wird auf allen java-fähigen heutigen Telefonen unterstützt MIDP 2.0 mehr Funktionen, aber im Moment erst im Emulator zu gebrauchen. Das wird in einem halben Jahr schon anders aussehen. in dieser Vorlesung: 3 Lektionen MIDP 1.0, danach 1 Lektion MIDP 2.0 http://wireless.java.sun.com/device/ 24
ENTWICKLUNG Entwicklungsplattformen J2ME Wireless Toolkit 2 wireless.java.sun.com Linux Redhat, Solaris SPARC, Windows ME2SE http://kobjects.dyndns.org/kobjects/ läuft überall, wo J2SE läuft: MacOSX, Win, *NIX MIDP 1.0.3 for OSX http://mpowers.net/midp-osx/ JBuilder + Mobile (www.borland.com) Eclipse (ev. mit J2ME plug-ins) Sun ONE Studio Nokia Toolkit for J2ME Motorola etc... 25
Wireless ToolKit 2.0 WTK 2.0 WERKZEUG../wtk20/index.html KToolbar 26
WERKZEUG Verzeichnisse../wtk20/BinaryReleaseNotes.html Projekte Programme Dokumentation JAVA DOC, PDF MIDP, MM, WMA Klassenbibliotheken 27
WERKZEUG MIDlet Projekt öffnen KToolbar MIDlet erzeugen MIDlet starten 28
WERKZEUG MIDlet Deployment 29
Neues Projekt KToolBar WERKZEUG 1. Choose File -> New Project The New Project dialog appears. 2. Type the name of the project in the Project Name field, and the name of the main 3. Click Create Project. The main window s title changes to include the name of the new project, as shown by the following screenshot: 30
WERKZEUG Java Editor von Eclipse nutzen Pfad auf KTool apps Ordner 31
WERKZEUG Java Editor von Eclipse nutzen Source Pfad../wt20/apps/neuesProjekt/src Binary Pfad../wt20/apps/neuesProjekt/tmpclasses 32
Java Editor von Eclipse nutzen WERKZEUG Klassen Bibliothek hinzufügen midpapi../wt20/lib/midpapi.zip 33
Java Doc../wtk20/docs/api/midp/ WERKZEUG 34
WERKZEUG MIDlet Information, JAD File MIDlet Welcome.java hinzufügen 35
WERKZEUG Welcome.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; LCD User Interface Screen-based High level GUI Elemente Low level Canvas, Pixel Interface CommandListener CommandAction() public class Welcome extends MIDlet implements CommandListener { private Display display; // Reference to Display object for this MIDlet private TextBox tbmain; // A Textbox to display a message private Command cmexit; // A Command to exit the MIDlet public Welcome() { display = Display.getDisplay(this); cmexit = new Command("Exit", Command.SCREEN, 1); Constructor Factory statische Methode, erzeugt display Instanz } tbmain = new TextBox("Welcome", "Core J2ME", 50, 0); tbmain.addcommand(cmexit); tbmain.setcommandlistener(this); 36
WERKZEUG Welcome.java // Called by application manager to start the MIDlet. public void startapp() { display.setcurrent(tbmain); } Display Umschalten // A required method public void pauseapp() { } // A required method public void destroyapp(boolean unconditional) { } } // Check to see if our Exit command was selected public void commandaction(command c, Displayable s) { if (c == cmexit) { destroyapp(false); notifydestroyed(); } } Command Reagiert auf Command c, in Displayable s MIDlet Methoden für Exit 37
WERKZEUG Run Welcome.java 38
WERKZEUG Command & Command Listener command object Event Informationen label, type and priority Beispiel: cmhelp = new Command( Help, Command. HELP, 1); 39
Command types: javax.microedition.lcdui.command Value BACK CANCEL EXIT HELP ITEM OK SCREEN STOP Description A request to move to the previous screen A request to cancel an operation A request to exit the MIDlet A request to display help information A request to map the Command to an item on the screen Specify positive acknowledgement from the user For Commands in which it is unlikely there will be a specific key mapping available A request to stop an operation WERKZEUG 40
WERKZEUG TooManyCommands import javax.microedition.midlet.*; Interface import javax.microedition.lcdui.*; CommandListener CommandAction() public class TooManyCommands extends MIDlet implements CommandListener { private Display display; // Reference to Display object for this MIDlet private Form fmmain; // The main Form private TextBox tbaction; // Textbox to show when user selects tb private Command cmexit; // Exit the MIDlet private Command cmback; // Go "back" to the main form private Command cmuload; // "upload" data - no real action done private Command cmdload; // "download" data - no real action done public TooManyCommands() { display = Display.getDisplay(this); cmexit = new Command("Exit", Command.EXIT, 1); cmback = new Command("Back", Command.BACK, 1); cmuload = new Command("Upload", Command.SCREEN, 2); cmdload = new Command("Download", Command.SCREEN, 3); 41
WERKZEUG TooManyCommands // Create the Form, add Commands, listen for events fmmain = new Form("Core J2ME"); fmmain.addcommand(cmexit); fmmain.addcommand(cmuload); fmmain.addcommand(cmdload); fmmain.setcommandlistener(this); // Create a Textbox, add Command, listen for events tbaction = new TextBox("Process Data", "Upload/download data ", 25, 0); tbaction.addcommand(cmback); tbaction.setcommandlistener(this); } public void startapp() View fmmain { display.setcurrent(fmmain); } public void pauseapp() { } public void destroyapp(boolean unconditional) { } 42
WERKZEUG TooManyCommands // Process events public void commandaction(command c, Displayable s) { if (c == cmexit) { destroyapp(false); notifydestroyed(); View } tbaction else if (c == cmuload c == cmdload) display.setcurrent(tbaction); else if (c == cmback) display.setcurrent(fmmain); } } View fmmain 43