Programmieren mobiler Geräte 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 J2ME Toolkit Erste Schritte JAVA mobil 27.11.03 6 Einführung J2ME 04.12.03 7 MIDP 1.0 GUI 11.12.03 8 JSR RMS+IO 18.12.03 9 MIDP 2.0 Media+Game Grafik POSE RMS Tomcat Servlet Kannel SMS Service Vernetzte Systeme 08.01.04 10 Grundlagen Netzwerke 15.01.04 11 Projektvergabe 22.01.04 12 29.01.04 13 05.02.04 14 12.02.04 15 SMS, MMS Cocoon Präsentationen Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 www.informatik.unibas.ch/lehre 1 ENTWICKLUNG Übersicht Java Basis Technologien Entwicklungs-Werkzeuge Ant Eclipse Wireless Toolkit Nokia WAP Toolkit PalmOS Emulator J2SE Java Archive ( JAR ) file format J2ME Mobile Information Device Profile (MIDP) J2EE Servlets Cocoon Übertragungs - Technologien Hardware Drahtlose Netze WAP 2.0 SMS / MMS Departement Informatik Universität Basel Mobile Geräte http://www.informatik.unibas.ch/lehre Programmieren mobiler Geräte Lektion 6 2 Übung 4 : WML / WMLS TECHNOLOGIE 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 5 Die Java Welt TECHNOLOGIE One Size Does Not Fit All J2SE Java 2 Standard Edition Kernklassen für Applets und Applikationen J2EE Java 2 Enterprise Edition Servlets, JSP, Java Enterprise Beans heavy duty enterprise networking, I/O, and DB features Übermenge von J2SE J2ME J2ME J2SE J2EE Java 2 Micro Edition Untermenge von J2SE Optimiert für wireless mobile devices Definiert durch Profile und Konfigurationen (MIDP, CLDC) Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 6 TECHNOLOGIE andere Wireless Java Technologien PersonalJava + JavaPhone: Vorläufer von J2ME Kontakt-Smart Card JavaCard Kontaktlose Smart Card Smart Button 8/16-bit CPU @ 3.7 MHz 1kB RAM + 16kB EEPROM /flash Java Card Virtual Machine Java Card API Java Card Development Kit JCDK Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 SIM Card USB Token http://www.informatik.unibas.ch/lehre 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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 Profile MIDP1.0 Departement Informatik Universität Basel MIDP2.0 CDC FP Programmieren mobiler Geräte Lektion 6 PP http://www.informatik.unibas.ch/lehre 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) Connected Limited Device Configuration für kleine mobile Geräte CDC Connected Device Configuration für TV Set Top Boxes, Internet TV, Automobile Unterhaltungs-/NavigationsSysteme (gutes Netzwerk, grosser Screen, kleine CPU) Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 10 CLDC Connected Limited Device Configuration TECHNOLOGIE 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 12 CDC Profile TECHNOLOGIE PDAP PDA Profile: MIDP + PIM + FC (FileConnection für Memory Card etc) FP Foundation Profile: Network, no GUI, 1 MB ROM, 0.5 MB RAM PBP Personal Basis Profile: FP, Robust Network, AWT GUI, 2/1 MB ROM/RAM PP Personal Profile: CDC, FP, hi-fidelity GUI, Applets, 2.5/1 MB ROM/RAM Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 13 Optional Packages JSR PIM : Personal Information Manager BTAPI : Bluetooth WMA : Wireless Messaging TECHNOLOGIE Public Review Proposed Final Draft Final Release 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 14 TECHNOLOGIE Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 15 MIDlet = J2ME Application TECHNOLOGIE Sandbox Security kein Zugriff auf Telefonfeatures JAM Java Application Manager kontrolliert Installation, Ausführung, Löschen von MIDlets; Ausführungsumgebung, ErrorHandling MIDlet Lifecycle Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 16 ENTWICKLUNG Entwicklung in J2ME 0 1 2 3 4 5 6 Lauffähiges Midlet aus 2 Files JAR : Archiv mit den Klassen und Resourcen JAD : Beschreibung des JAR und globale Einstellungen Preverify Obfuscation Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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) Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 19 Schritt 3 : JAD ENTWICKLUNG 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 20 ENTWICKLUNG Schritt 4 & 5: Emulator & Debugging Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 21 Schritt 6 : Deployment ENTWICKLUNG Serial Cable Connection Infrarot Bluetooth Mobiles Internet Download OTA (over-the-air) Discovery + JAD downloading through Non-IP Transport oder Downloading JAR Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 22 MIDP Application Programming Interface Input/Output Network Connection HTTP etc Midlet Lifecycle startApp() pauseApp() destoyApp() Record Management System Zum Zugriff auf den Persistenten Speicher (byte array) Core von J2SE MIDP 1.0 neu in 2.0 ENTWICKLUNG LCD User Interface java.io Screen-based java.lang High level GUI Elemente java.util Low level javax.microedition.io Canvas, Pixel javax.microedition.lcdui Game javax.microedition.lcdui.game GameCanvas javax.microedition.media Layer javax.microedition.media.control Sprites javax.microedition.midlet javax.microedition.pki javax.microedition.rms Zusatz-Pakete WMA MMAPI Multi Media Wireless Messaging Sound MessageConnection MIDI MessageListener Video Departement Informatik Programmieren mobiler Geräte Universität Basel Lektion 6 Sound Mobile Media Player VolumeControl Public Key Secure Connections http://www.informatik.unibas.ch/lehre 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/ Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 24 Entwicklungsplattformen ENTWICKLUNG 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... Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 25 WERKZEUG Wireless ToolKit 2.0 WTK 2.0 ../wtk20/index.html KToolbar Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 26 Verzeichnisse WERKZEUG ../wtk20/BinaryReleaseNotes.html Projekte Programme Dokumentation JAVA DOC, PDF MIDP , MM, WMA Klassenbibliotheken Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 27 WERKZEUG MIDlet Projekt öffnen KToolbar MIDlet erzeugen MIDlet starten Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 28 MIDlet Deployment Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 WERKZEUG http://www.informatik.unibas.ch/lehre 29 Neues Projekt WERKZEUG KToolBar • 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: Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 30 Java Editor von Eclipse nutzen WERKZEUG Pfad auf KTool apps Ordner Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 31 WERKZEUG Java Editor von Eclipse nutzen Source Pfad ../wt20/apps/neuesProjekt/src Binary Pfad ../wt20/apps/neuesProjekt/tmpclasses Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 32 Java Editor von Eclipse nutzen WERKZEUG Klassen Bibliothek hinzufügen midpapi ../wt20/lib/midpapi.zip Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 33 Java Doc ../wtk20/docs/api/midp/ Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 WERKZEUG http://www.informatik.unibas.ch/lehre 34 MIDlet Information, JAD File WERKZEUG MIDlet Welcome.java hinzufügen Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 35 Welcome.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; WERKZEUG LCD User Interface Screen-based High level GUI Elemente Low level Canvas, Pixel public class Welcome extends MIDlet implements { private Display display; // Reference to private TextBox tbMain; // A Textbox to private Command cmExit; // A Command to Interface CommandListener CommandAction() CommandListener Display object for this MIDlet display a message exit the MIDlet public Welcome() { display = Display.getDisplay(this); Constructor cmExit = new Command("Exit", Command.SCREEN, 1); Factory statische Methode, erzeugt display Instanz tbMain = new TextBox("Welcome", "Core J2ME", 50, 0); tbMain.addCommand(cmExit); tbMain.setCommandListener(this); } Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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(); } } } Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 Command Reagiert auf Command c, in Displayable s MIDlet Methoden für Exit http://www.informatik.unibas.ch/lehre 37 Run Welcome.java Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 WERKZEUG http://www.informatik.unibas.ch/lehre 38 Command & Command Listener WERKZEUG command object Event Informationen label, type and priority Beispiel: cmHelp = new Command(“Help”, Command. HELP, 1); Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 39 Command types: javax.microedition.lcdui.Command Value Description BACK A request to move to the previous screen CANCEL A request to cancel an operation EXIT A request to exit the MIDlet HELP A request to display help information ITEM 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 OK SCREEN STOP Departement Informatik Universität Basel WERKZEUG Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 40 WERKZEUG TooManyCommands import javax.microedition.midlet.*; import javax.microedition.lcdui.*; Interface 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); Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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); } View public void startApp() fmMain { display.setCurrent(fmMain); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 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 Departement Informatik Universität Basel Programmieren mobiler Geräte Lektion 6 http://www.informatik.unibas.ch/lehre 43