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