De Gaetano Andrea JAVA 4 EMBEDDED Cosa e' J2ME ? J2me e' la versione per dispositivi portatili di java. Permette di poter programmare midlet, piccoli programmi nell'ordine delle decine di kb, in grado di essere eseguiti su dispositivi che dispongono di una JVM (Java Virtual Machine) adatta, al pari delle applet delle pagine web. Cosa e' una JVM? Java compila i sorgenti dei suoi programmi in Bytecode, mentre linguaggi come il C++ compilano i sorgenti dei programmi in un codice che è il codice della macchina. Il Bytecode java viene interpretato da una JVM che lo esegue sulla macchina ospite. Questo permette di realizzare un codice solo, che puo' essere eseguito su piu' sistemi operativi e macchine diverse senza dover ricompilare il codice e quindi il programma. De Gaetano Andrea – Java 4 embedded L'importanza di usare Java Il fatto proprio di poter scrivere il codice una volta sola e non doverlo riscrivere per i vari dispositivi crea una grande portabilita'. I dispositivi j2me (come ad esempio i cellulari) sono molti differenti tra loro. Hanno caratteristiche diverse come ad esempio: -Sistemi operativi diversi (Symbian , Epoc .. ) -Risorse hardware diverse (diversi processori, ram etc) -Schermi diversi -Tasti differenti -Accesso all'audio differente. -Altre caratteristiche... La jvm sara' ottimizzata per ogni dispositivo e il programma verra' creato una volta, dando la possibilità di girare sui diversi dispositivi. De Gaetano Andrea – Java 4 embedded Configurazioni CDC... Esistono 2 configurazioni j2me che definiscono 2 standard da rispettare per entrare in particolari categorie e implementazioni j2me: CDC e CLDC CDC Progettata per dispositivi con memoria ampia, processori veloci e connessioni alla rete a banda molto estesa come: -TV set-top boxes -sistemi telematici per automobili -PDA di fascia alta. La JVM è una JVM quasi al pari di quella presente nei pc con un sottoinsieme ampio delle API utilizzate per la piattaforma J2SE. I dispositivi devono avere un processore a 32 bit e 2MB di memoria disponibile per la piattaforma Java e le relative applicazioni. De Gaetano Andrea – Java 4 embedded Configurazione CLDC CLDC E' una configurazione che ha richieste più leggere e contenute. E' progettata per quei dispositivi che hanno un collegamento alla rete intermittente (tipicamente gprs), processori lenti e una quantità di memoria limitata. Di solito i dispositivi che utilizzano questa configurazione sono i dispositivi utilizzati per la telefonia mobile e PDA. Il processore in questi casi è spesso a 16 bit, la memoria per Java e le applicazioni relative è compresa tra i 128 e i 512 KB (con il tempo questo valore è aumentato notevolmente). Tutti i cellulari attualmente in commercio hanno una configurazione CLDC. De Gaetano Andrea – Java 4 embedded Limitazioni rispetto J2SE -Gruppi di thread. La JVM non supporta la classe ThreadGroup quindi non si possono lanciare (o fermare) più thread in un colpo solo. -Finalizzazione. finalize() l'implementazione della JVM non supportera' la finalizzazione. -Calcoli a virgola mobile. Non ci sono numeri in virgola mobile ma e' comunque possibile con opportune librerie opensource utilizzarli. -Interfaccia Nativa Java. Non è possibile chiamare funzioni native del sistema operativo ospite per effettuare operazioni. -Caricatore di classi personalizzate. Il caricatore di classi subisce severi controlli e non può essere sostituito, ignorato o modificato. -Reflection. In J2SE si possono usare le classi Reflection per ottenere informazioni sulla JVM in esecuzione. De Gaetano Andrea – Java 4 embedded Sicurezza La configurazione CLDC definisce un modello conosciuto come “sandbox” che vieta l’accesso a tutto quello che è fuori dalla “scatola” (come nelle applet). Un ultimo aspetto è quello della verifica dell’integrità dei file di classe: 1 - PreVerifica: Durante il processo di programmazione, o prima di caricare una classe su di un apparecchio, si esegue un programma per l’inserimento di attributi addizionali nel file di classe.Necessario per eseguire il punto 2 2 – Verifica: carica una classe pre-verificata, il verificatore interno dell’apparecchio ne percorre tutte le istruzioni e se non trova inconsuetudini la firma , permettendo qunidi di poter testare o installare l'applicativo sul dispositivo. De Gaetano Andrea – Java 4 embedded Profilo MIDP MIDP, è un profilo che definisce un insieme di librerie create sulla base delle varie configurazioni. Attualmente esistono 2 versioni di midp: 1.0 e 2.0 (più recente). Midp 2.0 e' un estensione delle librerie midp 1.0. Contiene classi particolari per la gestione di audio,video,fotocamera,connessioni seriali bluetooth etc... MIDP 1.0 è formata in totale da sette package: -java.io Classi che forniscono sistemi di input ed output attraverso stream -java.lang Classi di sistema derivate dalla J2SE -java.util Classi di utilità derivate da J2SE (random,hastable,calendar, date etc) -javax.micoredition.io Supporto per le connessioni wireless e gli stream (siano file,piuttosto che connessioni verso server) -javax.microedition.lcdui Supporto per l'interfaccia utente -javax.microedition.midlet Classi di base per le MIDlet -javax.microedition.rms Supporto per la memorizzazione di dati De Gaetano Andrea – Java 4 embedded Ecco un elenco di alcune librerie presenti in midp 2.0: -javax.microedition.lcdui.game Un set di api per i videogiochi (sprite, tiled layer etc) -javax.microedition.media e javax.microedition.media.control servono per controllare e riprodurre suoni, filmati , utilizzare la fotocamera (suonare mp3 riprodurre filmati etc) -javax.microedition.pki Certificati per connessioni sicure Altre librerie presenti midp 2.0 che non sono necessariamente presenti: -WMA 1.0 per gestire l'invio e la ricezione degli sms, possibilità di “risvegliare” una midlet -WMA 2.0 aggiornamento con inclusione al supporto mms -Java APIs for Bluetooth per connessioni bluetooth -Mobile 3D Graphics librerie per gestire il 3D De Gaetano Andrea – Java 4 embedded Distribuzione delle applicazioni Una volta terminato lo sviluppo di un'applicazione, per poterla distribuire è necessario creare un file che contenga tutte le classi e le risorse (midi png etc). Il file che si andrà a creare è un file JAR (pari di un archivio zip o tar). Questo file JAR oltre alle classi Java ed alle risorse ha anche al suo interno un particolare file, manifest.mf, che si trova nella cartella META-INF dell'archivio. In questo file si trovano tutta una serie di attibuti molto importanti per la definizione della MIDlet: MIDlet-Name Nome della MIDlet che apparirà nell'elenco delle applicazioni MIDlet-Version Numero di versione del MIDlet MIDlet-Vendor Autore della MIDlet MicroEdition-Profile MIDP-1.0/MIDP-2.0 MicroEdition-Configuration (CLDC-1.0/CDC) MIDlet-Icon Icona MIDlet-Info-URL URL per le info supplementari De Gaetano Andrea – Java 4 embedded Jar & Jad Oltre al jar con il manifest e' necessario (almeno in midp 1.0) fornire anche un file jad contenente parametri necessari al dispositivo per per localizzare e installare la midlet. MIDlet-Name Nome della MIDlet che verrà visualizzato MIDlet-Version Numero di versione del MIDlet MIDlet-Vendor Autore della MIDlet MIDlet-Jar-URL URL del file JAR (assoluto) MIDlet-Jar-Size Dimensione del file JAR in byte Ve ne sono altri ma questi sono essenziali per fare installare la midlet. Le midlet generalmente sono installate via OTA (Over The Air) e ospitate su un webserver con determinate impostazioni (Vedremo nelle slide piu' avanti). De Gaetano Andrea – Java 4 embedded Tool e programmi di sviluppo Software necessario: -j2se scaricabile da java.sun.com -Wireless Toolkit sempre su java.sun.com -Un editor di testo qualsiasi (nedit,vi,emacs,gedit,kwrite, etc) Questo e' il software minimo per programmare in j2me. J2SE dovra' essere installato prima del wireless toolkit e sara' necessario ai fini dell'installazione e della compilazione delle midlet. Il wireless toolkit contiene un compilatore e un set di emulatori (standard) per testare le applicazioni. E' inoltre possibile da questo settare i vari parametri su cui dovra' essere compilata l'applicazione (midp 1.0/2.0 | CLDC 1.0/1.1) De Gaetano Andrea – Java 4 embedded Wireless Toolkit da vicino De Gaetano Andrea – Java 4 embedded Creazione di un nuovo Progetto De Gaetano Andrea – Java 4 embedded Settings della midlet De Gaetano Andrea – Java 4 embedded Cosa succede ora... A questo punto il nostro Toolkit ha creato diverse cartelle del progetto che troverete nella directory dove avete installato il toolkit , sotto apps, ci sara' il nome del vostro progetto. All'interno di queste troverete altre 4 o 5 cartelle: ● ● SRC dove metterete i sorgenti (file .java) RES dove solitamente risiedono i file audio e i file di testo o le immagini ● CLASSES conterra' le classi compilate ● TMPCLASSES directory temporanea per i class ● BIN conterra' manifest.mf ,il jad e il jar, quest'ultimo una volta scelto di creare il pacchetto selezionando “Create Package” dal menu' del programma. De Gaetano Andrea – Java 4 embedded Un applicazione di esempio ● import javax.microedition.lcdui.*; ● import javax.microedition.midlet.*; ● //le librerie utilizzate per lo sviluppo di questa applicazione ● public class Hello extends MIDlet { ● //creiamo una classe HelloWorld che estenda (sia una ) MIDlet ● ● Display display; /*creiamo un Display ovvero il gestore di schermo su cui disegneremo o inseriremo form*/ ● Form form; ● Image tux = null; ● ● public void destroyApp(boolean unconditional) { NotifyDestroyed(); /* metodo utilizzato per distruggere e quindi uscire dalla midlet*/ } ● ● De Gaetano Andrea – Java 4 embedded Un applicazione di esempio (2) ● ● ● public void pauseApp() { }/*questo metodo viene invocato dalla midlet e gli si predispone le cose da fare quando si ritorna da un evento come: ricezione di un messaggio, una chiamata,l'applicazione non e' piu' attiva o per qualche motivo si e' sospesa l'applicazione.*/ public void startApp() {/* e' il metodo principale (un po' il main del C o l'init delle applet java) chiamato al lancio della midlet*/ ● display = Display.getDisplay(this); //istanziamo il gestore di display ● form = new Form("LINUXDAY2K4"); //creiamo il form passandogli un titolo ● StringItem sItem = new StringItem(null,"Hello World!"); ● ● ● //creiamo una stringa la solita helloworld form.append(sItem); //aggiungiamo l'oggetto in coda al form form.append ("Questo e' l'output restituito dal dispositivo"); //appendiamo un altra stringa De Gaetano Andrea – Java 4 embedded Un applicazione di esempio (3) ● try{ ● ● tux = Image.createImage("/tux.png"); /*carichiamo l'immagine che dovremo inserire in RES del progetto */ ● }catch (Exception e) {}; ● form.append (new ImageItem("LinuxDay2k4!",tux ,ImageItem.LAYOUT_CENTER,"testo alternativo")); ● ● /*Appendiamo un oggetto ImageItem ovvero un oggetto costituito da un immagine con un testo*/ display.setCurrent(form); ● ● //diciamo al display di visualizzare il form } ● ● } ● De Gaetano Andrea – Java 4 embedded Risultato sull'emulatore De Gaetano Andrea – Java 4 embedded Installazione sul dispositivo Il modo piu' sicuro per testare la vostra midlet e' via OTA (over the air). Depositare JAR e JAD su un webserver settando opportunamente i mime types nel file .htaccess. #MIME Types for MIDLETS AddType application/java-archive .jar AddType text/vnd.sun.j2me.app-descriptor .jad A questo punto se avete settato correttamente il jad e il jar vi bastera' collegarvi via cellulare (wap/gprs) all'url del jad.Il vostro cellulare o dispositivo si colleghera' e installera' la midlet. Esistono altri modi per installare le midlet: via bluetooth (bluez.sourceforge.net), via irda e cavo. Per il bluetooth come per l'irda bastera' inviare la midlet dal computer al cellulare/dispositivo.. Non tutti i cellulari/dipositivi nonostante abbiano irda e bluetooth dispongono di installazioni del genere (Es. Nokia,SonyEricsson si, siemens , nec no). De Gaetano Andrea – Java 4 embedded Panoramica sui vari IDE Eclipse ME Plugin per sviluppare applicazioni j2me con eclipse Features -Supporto multiplo dei vari toolkit -Creazione della Suite di un Progetto (jar jad etc) -Creazione nuova Midlet -JAD editor -Preverifica -Eclipse supporto per il lancio dell' Emulatore -Midlet debugging -JAR pacchetto e offuscamento -Server per il test OTA -Esportazione dei file per Antenna (porting mobile di ant) De Gaetano Andrea – Java 4 embedded Panoramica sui vari IDE (2) Netbeans Netbeans è un ottimo ide java oltre che j2me, e' possibile includere i plugin per J2ME scaricando direttamente dall'update center del programma i plugin necessari. Features -Supporta tutte le versioni di WTK (1.0 2.0 2.1 2.2) -Creazione della Suite di un Progetto (jar jad etc) anche direttamente offuscata. -Utilizza Ant come motore per compilare con la possibilità di adattare l'xml usato dal progetto a seconda delle esigenze -Debugging -Organizzazione in progetti -JAD editor e suite editor -Integrazione con diversi emulatori (nokia, sony ericsson etc) -Server Tomcat già configurato per il test OTA De Gaetano Andrea – Java 4 embedded Link J2ME http://java.sun.com http://www.netbeans.org http://eclipseme.sourceforge.net/ http://www.wmlscript.it http://www.java2me.org http://dega1999.altervista.org/j2me/ De Gaetano Andrea – Java 4 embedded Link utili per bluetooth http://www.bluez.org/ http://openobex.sourceforge.net/ USSP-PUSH De Gaetano Andrea – Java 4 embedded