06.04.2015 Views

Java ME

Java ME

Java ME

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Java</strong> <strong>ME</strong><br />

<strong>Java</strong> Micro edition


Pregled<br />

<br />

<br />

<br />

<br />

<br />

<br />

Zgodovina<br />

Osnove Jave <strong>ME</strong> (J2<strong>ME</strong>)<br />

<strong>Java</strong> <strong>ME</strong>:CDC/CLDC<br />

Midlet-i<br />

Razvojna orodja<br />

Primer aplikacije


Zgodovina<br />

<br />

1990: Začetek jave kot interni projekt v podjetju Sun<br />

Microsystems<br />

<br />

1995: Izide JDK 1.0<br />

<br />

1999: <strong>Java</strong> se razdeli v tri sklope:<br />

<br />

<br />

<br />

<br />

<strong>Java</strong> SE (J2SE) – Standard edition<br />

<strong>Java</strong> EE (J2EE) – Enterprise edition<br />

<strong>Java</strong> <strong>ME</strong> (J2<strong>ME</strong>)-Microedition (Personal java,<br />

Mobile java)<br />

2000/01:Prvi telefoni s podporo za J2<strong>ME</strong>


Zgodovina<br />

<br />

<br />

<br />

<br />

2004: 250 milijonov telefonov s podporo J2<strong>ME</strong><br />

2005: 700 milijonov telefonov s podporo J2<strong>ME</strong><br />

<br />

Sprememba imena v <strong>Java</strong> <strong>ME</strong><br />

2006: <strong>Java</strong> <strong>ME</strong> spremeni licenco v GPL<br />

Danes: Vsi proizvajalci telefonov podpirajo javo


<strong>Java</strong>


<strong>Java</strong> <strong>ME</strong> (J2<strong>ME</strong>)


Spremembe <strong>Java</strong> jezik-a<br />

<br />

Spremembe <strong>Java</strong> jezika so se zgodile na treh<br />

področjih<br />

<br />

Ni podpore za plavajočo vejico (CLDC 1.0), CLDC 1.1<br />

<br />

<br />

jo ima vendar ni zahtevan v MIDP 2.0<br />

Ne pozna finalizacije oz. ni metode finalize()<br />

Podpora izjemam je omejena


Spremembe JVM<br />

<br />

<br />

<br />

Zaradi varnosti ne podpira JNI (<strong>Java</strong> native<br />

interface)<br />

Zaradi varnosti ni uporabniško določenih<br />

nalagalnikov razredov (Custom class loaders)<br />

Ni skupin niti (thread groups) ter demonskih niti<br />

(deamon threads)


<strong>Java</strong> <strong>ME</strong><br />

<br />

<br />

<br />

<br />

<br />

<strong>Java</strong> Micro Edition<br />

<strong>Java</strong> za “male” naprave<br />

Da bi zadostili različnim tipom naprav se uvedejo<br />

konfiguracije in profili<br />

Vse je definirano z JSR-ji<br />

http://jcp.org


<strong>Java</strong> <strong>ME</strong> konfiguracije<br />

<br />

<br />

Konfiguracije se ločijo glede na lastnosti JVM,<br />

uporabljene knjižnice iz J2SE ter uporabljene<br />

lastnosti <strong>Java</strong> programskega jezika<br />

Trenutno poznamo dve konfiguraciji<br />

<br />

<br />

CLDC - Connected limited device configuration<br />

CDC – Connected device configuration


<strong>Java</strong> <strong>ME</strong> konfiguracije


CDC<br />

<br />

<br />

<br />

<br />

TV set-top box, Internet TV, zabavni in navigacijski<br />

sistemi v avtomobilih, hišna avtomatizacija<br />

Programski model bližje Javi SE, kar omogoči lažji<br />

prenos obstoječih aplikacij.<br />

Trajne in širokopasovne omrežne povezave<br />

Velik pomnilnik ter močnejši procesorji (glede na<br />

CLDC)


CLDC<br />

<br />

<br />

<br />

<br />

<br />

Za manj zmogljive naprave, ki imajo majhno<br />

procesorsko moč, majhne pomnilniške<br />

kapacitete, mali ekran ter omejene možnosti<br />

povezovanja v mrežo<br />

Telefoni, manj zmogljivi PDA-ji, osebni<br />

organizatorji<br />

Uporabljajo enostavne uporabniške vmesnike<br />

(v primerjavi z osebnimi računalniki)<br />

JVM : KVM (“Kilobyte Virtual Machine”)<br />

Trenutno na voljo CLDC 1.0 in1.1


CDC vs. CLDC<br />

<br />

<br />

CDC je subset Jave SE z nekaj dodatnimi razredi.<br />

CLDC je subset CDC-ja<br />

<strong>Java</strong> SE<br />

CDC<br />

CLDC


MIDP 2.0 (JSR 118 )<br />

<br />

Definira API vmesnik za :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Uporabniški vmesnik<br />

Življenski cikel aplikacije<br />

Omrežno povezljivost<br />

Multimedijo<br />

Shrambo podatkov (RMS)<br />

OTA – over the air nalaganje aplikacij<br />

Minimalne sistemske zahteve<br />

<br />

<br />

<br />

<br />

<br />

128 KB RAM,8 KB trajnega spomina<br />

128 KB za KVM<br />

Zaslon: 94x54 pik<br />

Tipkovnica ali zaslon na dotik<br />

Omrežna povezljivost (dvosmerno, brezžično, občasne<br />

povezave, omejena pasovna širina)


MIDP 2.0 (JSR 118 )<br />

<br />

API ki ga definira CLDC 1.1 + MIDP 2.0<br />

API je omejen v<br />

primerjavi z JAVA SE


CLDC/MIDP<br />

<br />

CLDC obravnava<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Jezik <strong>Java</strong><br />

<strong>Java</strong>nski virtualni stroj<br />

Osnovne knjižnice<br />

Vhod/Izhod<br />

Omrežno povezovanje<br />

Varnost<br />

Internacionalizacijo<br />

<br />

<br />

CLDC ne obravnava<br />

<br />

Življenskega cikla aplikacije<br />

<br />

Funkcionalnosti uporabniških<br />

vmesnikov<br />

<br />

Rokovanja z dogodki<br />

<br />

Visokonivojskega modela<br />

aplikacij<br />

Te stvari obravnava MIDP


MIDlet<br />

<br />

<br />

<br />

<br />

MIDP aplikacija se imenuje MIDlet in je izpeljana<br />

iz javax.microedition.midlet<br />

Konceptualno so MIDlet-i enaki Applet-om<br />

MIDlet-i se lahko izvajajo na vseh napravah, ki<br />

imajo podprt MIDP profil (compile once, run<br />

anywhere)<br />

Implementirane mora imeti tri abstraktne metode:<br />

<br />

<br />

<br />

startApp()-sprožimo izvajanje midlet-a<br />

pauseApp()-uporablja jo sistem za začasno prekinitev<br />

destroyApp()-pokliče jo sistem pred ukinitvijo midleta


MIDlet življenski cikel<br />

<br />

<br />

MIDlet-i so vedno v enem od treh stanj.<br />

Za prehajanje stanj skrbi AMS (Application manager)<br />

MIDlet()<br />

startApp()<br />

Paused<br />

Active<br />

pauseApp()<br />

destroyApp()<br />

destroyApp()<br />

Destroyed


Midlet struktura<br />

public class Midlet extends MIDlet {<br />

public void startApp() {<br />

}<br />

public void pauseApp() {<br />

}<br />

public void destroyApp(boolean unconditional) {<br />

}<br />

}


Potek kreiranja aplikacije


Garniture MIDlet (Midlet suite)<br />

<br />

<br />

<br />

Kolekcija MIDletov ter manifesta, ki so združeni v<br />

JAR paketu se imenuje Midlet garnitura<br />

Midleti v garnituri si delijo isti trajni pomnilnik<br />

(RMS), sklad, static spremenljivke.<br />

JAR paket MIDlet garniture vsebuje:<br />

<br />

<br />

<br />

Razrede (class), ki implementirajo MIDlet-e<br />

Vse datoteke, ki jih MIDlet uporablja: slike, ikone...<br />

Manifest, ki opisuje vsebino datoteke JAR


Garniture MIDlet (Midlet suite)<br />

<br />

<br />

MIDP uvaja še dodatno opcijsko JAD datoteko<br />

(Application description), ki omogoča, da naprava<br />

pred namestitvijo ugotovi, če naprava ustreza vsem<br />

zahtevam aplikacije<br />

Imeti mora vsaj naslednje lastnosti:<br />

<br />

<br />

<br />

<br />

<br />

MIDlet-Name<br />

MIDlet-Version<br />

MIDlet-Vendor<br />

MIDlet-Jar-URL<br />

MIDlet-Jar-Size


Primer JAD datoteke<br />

MIDlet-Name: HelloMIDlet<br />

MIDlet-Version: 1.0.0<br />

MIDlet-Vendor: Sun Microsystems, Inc.<br />

MIDlet-Description: A Simple Example<br />

MIDlet-Info-URL: http://java.sun.com/j2me/<br />

MIDlet-Jar-URL: Hello.jar<br />

MIDlet-Jar-Size: 1063 MicroEdition-Profile:<br />

MIDP-1.0 MicroEdition-Configuration: CLDC-1.0<br />

MIDlet-1: Hello,, HelloMIDlet<br />

(Name, Icon, Class)


Nameščanje<br />

•<br />

Garniture MIDlet (MIDlet suites) lahko posredujemo napravicam na<br />

enega od naslednjih načinov:<br />

•<br />

Kopiranje direktno v pomnilnik (BT, USB, ..)<br />

•<br />

Preko brskalnika, ki razume MI<strong>ME</strong> tipa JAD<br />

•<br />

Preko SMS sporočila


GUI<br />

<br />

<br />

<br />

<br />

MIDP ima definirano svojo UI arhitekturo<br />

javax.microedition.lcdui<br />

Visokonivojski prenosljiv API<br />

<br />

<br />

Abstrakten in prenosljiv<br />

Delal naj bi na vseh napravah<br />

Nizkonivojski API<br />

<br />

<br />

Popolna kontrola nad zaslonom<br />

Nastanejo lahko problemi pri prenosljivosti aplikacij


Visokonivojski API<br />

<br />

Izhajamo iz razreda Form<br />

public class MyForm extends Form {<br />

private TextField name;<br />

private TextField password;<br />

public MyForm(String title) {<br />

super(title);<br />

name = new TextField("Name:", "", 20, TextField.ANY);<br />

password = new TextField("Password:","",20,TextField.PASSWORD);<br />

append(name);<br />

append(password);<br />

}<br />

}<br />

}


Nizkonivojski API<br />

<br />

Izhajamo iz razreda Canvas in povozimo metodo<br />

paint()<br />

public class MyCanvas extends Canvas {<br />

public MyCanvas() {<br />

setFullScreenMode(true);<br />

}<br />

public void paint(Graphics g) {<br />

g.setColor(255, 0, 0);<br />

int width = this.getWidth();<br />

int height = this.getHeight();<br />

g.fillRect(0, 0, width, height);<br />

g.setColor(255, 255, 255);<br />

Font f = Font.getFont(Font.FACE_SYSTEM,<br />

Font.STYLE_BOLD, Font.SIZE_LARGE);<br />

g.setFont(f);<br />

g.drawRect(10, 10, width - 25, height - 25);<br />

g.drawString("Napaka!!", width/2, height/2,<br />

g.BASELINE|g.HCENTER);<br />

}<br />

}


Mrežne povezave<br />

<br />

<br />

<br />

<br />

Za mrežne povezave skrbi GCF<br />

Definiran v javax.microedition.io<br />

Pokriva veliko množico povezav<br />

<br />

<br />

<br />

<br />

<br />

Http,https<br />

Socket,SSL,TLS<br />

Comm (serijska povezava)<br />

Datagram (UDP)<br />

Bluetooth<br />

URL definira tip povezave


Mrežne povezave<br />

String url = "socket://www.j2medeveloper.com:80";<br />

SocketConnection c = (SocketConnection)Connector.open(url);<br />

String url = "http://www.j2medeveloper:80/com/myServlet";<br />

HttpConnection c = (HttpConnection)Connector.open(url);<br />

String url = "file:///myResourceFile.res";<br />

FileConnection c = (FileConnection)Connector.open(url);<br />

String url = "datagram://www.j2medeveloper.com:7001";<br />

UDPDatagramConnection c = (UDPDatagramConnection)Connector.open(url);


Trajni spomin<br />

<br />

<br />

<br />

<br />

<br />

<br />

Record Management System (RMS) min. 8Kb<br />

Definiran v javax.microedition.rms<br />

API neodvisen od naprave<br />

Posamezni vnosi (Record) so polja bytov in imajo<br />

unikaten ID (ni index)<br />

Vnosi se shranjujejo v “record store”, ki imajo<br />

unikatna imena<br />

“record store” zagotavlja da bodo vsi zapisi<br />

atomarni


Trajni spomin<br />

public boolean storeUsername(String username) {<br />

RecordStore rs;<br />

try {<br />

rs = RecordStore.openRecordStore(“loginInfo”, false);<br />

byte[] user = username.getBytes();<br />

rs.addRecord(user,0,user.length);<br />

return true;<br />

} catch (Exception e) {<br />

return false;<br />

} finally {<br />

if (rs != null)<br />

rs.closeRecordStore();<br />

}<br />

}


Game API<br />

<br />

<br />

Optimiziran za igre<br />

Definiran v javax.microedition.lcdui.game


Preostali API<br />

<br />

Wireless messaging API (JSR-120)<br />

<br />

Mobile media API (JSR-135)<br />

<br />

Bluetooth API (JSR-82)<br />

<br />

Mobile 3D Graphics API (JSR-184)<br />

<br />

Location API (JSR-179)<br />

<br />

Web services API (JSR-172)<br />

<br />

.....


Razvojna orodja<br />

<br />

<strong>Java</strong> <strong>ME</strong> SDK 3.0<br />

<br />

NetBeans (6.7.1)<br />

<br />

Eclipse<strong>ME</strong><br />

<br />

SDK-ji proizvajalcev telefonov (emulatorji)


Vaje<br />

<br />

Uporabljalo se bo NetBeans 6.7.1<br />

<br />

Nokia Emulator S60


“BIG Picture”<br />

MIDP java<br />

aplikacije<br />

MIDP<br />

<strong>Java</strong> aplikacije<br />

Specifičen API<br />

za<br />

posamezne naprave<br />

Aplikacije prilagojene<br />

operacijskemu sistemu<br />

(C, C++,...)<br />

CLDC<br />

Operacijski sistem (Symbian, Android, Windows mobile, ...)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!