Programiranje mobilnih telefona (2): Java Najrasprostranjenija platforma za razvoj kod mobilnih telefona jeste Java ME (Java Micro Edition) To je i jedina programska platforma za obične, „nesmart” telefone. Ovo znači da programi pisani u Javi imaju mnogo veći broj korisnika, a samim ti i veći potencijal za zaradu.
Kako je sve počelo? Davne 1991. godine James Gosling je započeo rad na programskom jeziku Oak, koji je bio zamišljen kao jezik koji je nezavisan od platforme na kojoj se izvršava. Prvobitno, Oak je trebalo da omogući međusobnu komunikaciju uređaja, prevashodno igračkih konzola i pametnih video rekordera. Jedan od prvih planova za implementaciju jezika Oak bio je televizor sa mogućnostima naručivanja televizijskog programa. Zbog problema sa kopirajtom Oak je morao da promeni ime i tako se 1995. godine prvi put zvanično pojavilo ime Java. Što se tiče mobilnih telefona i Jave, osnove su postavljene 1998. godine, kada je interno na Sun Labs Open House konferenciji prvi put predstavljen K Virtual Machine, i odmah je zapao za oko stručnjacima iz kompanije Motorola. K Virtual Machine (ili skraćeno KVM) je, u stvari, Java Virtual Machine koja je u mogućnosti da se smesti i radi u memorijskom prostoru koji se meri u kilobajtima i ima ograničene resurse po pitanju procesorske moći. Naravno, ova nova tehnologija tražila je i neku standardizaciju, tako da su se ubrzo okupili svi poznatiji predstavnici iz industrije mobilnih telefona, kao i iz drugih usko povezanih grana informatičke industrije da bi utvrdili prve standarde (CLDC i MIDP).  | Standard koji se odnosi na specifikaciju niskog nivoa Jave jeste CLDC (Connected Limited Device Configuration). Postoje dve verzije ovog standarda: CLDC 1.0, koji se pojavio odmah nakon definisanja KVM-a, i CLDC 1.1, koji se pojavio 2001. godine. U stvari, CLDC predstavlja podskup klasa JavaSE (Java Standard Edition) koje dati uređaj podržava. Sam podskup ograničen je tako da, recimo, standard CLDC 1.0 ne podržava čak ni brojeve sa pokretnim zarezom (float ili double).Što se tiče MIDP-a (Mobile Information Device Profile), to je skup klasa koje su specifične za neki uređaj, a sam MIDP dizajniran je tako da radi iznad CLDC platforme. On mora da zadovolji sva ograničenja koja CLDC propisuje, ali i da ih još malo proširi. Na primer, to su klase za rad sa GSM mrežom, telefonskim imenikom, internom memorijom, kamerom na telefonu i slično. Iako je i MIDP specifikacija strogo standardizovana za sve uređaje, ona je najčešće i proširena dodatnim mogućnostima koje određeni proizvođači nude. Tako nije retko da postoje i Nokia klase (ili klase bilo kog drugog proizvođača) koje kontrolišu ili dopuštaju rad na specifičnim funkcijama telefona.Na kraju treba napomenuti to da se memorija virtualne mašine koju Java koristi najčešće meri u kilobajtima, što je dobra praksa da se od samog početka dizajniranja aplikacije pristupi optimizacijama, što samog kôda što pratećih podataka u vidu baza podataka, slika i zvukova. To, u najmanju ruku, nije lako. Sigurnost podataka Mobilni telefon danas već spada u neophodnost. Kako veliki deo komunikacije ide preko mobilnih telefona, postavlja se i pitanje zaštite osetljivih podataka koji se nalaze na njemu. Da bi se izbegle razne tužbe, kao i zbog pojednostavljene zaštite od opasnih programa, JavaME je poprilično restriktivna platforma i za većinu potencijalno opasnih radnji pre upotrebe traži dopuštenje od strane korisnika. To se radi na sistemskom nivou, bez mogućnosti promene izgleda i teksta pitanja. Među te akcije spadaju sve one koje mogu da šalju informacije, troše nečiji telefonski račun, čitaju lične podatke s telefona i slično. Naravno, potvrđivanje ovih akcija ume da umara korisnika. Zbog toga postoji mogućnost da se, ako se sama aplikacija potpiše digitalnim sertifikatom, preskoče ova ograničenja. Kreiranje digitalnih sertifikata košta, tako su najčešće u mogućnosti da ih imaju samo veće kompanije koje se bave razvojem softvera za mobilne telefone. Dobra strana jeste to da je za većinu akcija koje su česte dovoljno samo prvi put prihvatiti odobrenje. Sva ova pravila jedino se ne odnose na fajlove koji dolaze uz program, kao i u posebno rezervisanom prostoru za snimanje podataka. Ovaj prostor je zaseban za svaku aplikaciju i nije moguće čitati „tuđe” memorijske prostore. Uzimajući sve ovo u obzir, slobodno možemo reći da je JavaME poprilično sigurna platforma što se tiče zloupotreba. Jedini problem koji ovakav sigurnosni pristup ima jeste zaštita programa od neovlašćenog kopiranja. Nemogućnost čitanja jedinstvenog IMEI broja telefona ili, recimo, telefonskog broja vodi do toga da aplikacija nema ništa jedinstveno na šta bi mogla da se osloni za kreiranje zaštite. Iz tog razloga mnogi proizvođači telefona su onemogućili slanje JAR fajlova sa telefona. Na taj način širenje nelegalnih kopija samo je malo sputano, ali ne i zaustavljeno. Takođe, nepostojanje zaštite automatski znači da je u većini slučajeva skoro nemoguće dokazati da li je nečija kopija legalna ili ne.Kako sve to radi? Programi koji se pokreću na mobilnim telefonima zovu se MIDleti. Šire gledano, to je Java program koji se izvršava na bilo kom uređaju koji podržava platformu Java 2 Micro Edition Virtual Machine. Uže gledano, ti uređaji su u stvari većinom mobilni telefoni sa Java podrškom, pa će se u daljem tekstu koristiti pojam „mobilni telefoni”, iako bi tačnije bilo reći „uređaji sa podrškom za Java aplikacije”. Sam MIDlet uvek dolazi kao jedan JAR (Java Archive) fajl, koga upotpunjuje jedan JAD (Java Application Descriptor) fajl. Iako JAD fajl nije uvek neophodan, preporučljivo je imati ga da bi aplikacija bila u potpunosti po standardu. Unutar JAR fajla nalaze se sve datoteke koje program koristi i, kao što smo već napomenuli, za njih nisu potrebna posebna dopuštenja prilikom korišćenja. Ovakav pristup je jako zgodan, jer je na ovakav način instalacija na niskom nivou samo kopiranje JAR i JAD fajla u odgovarajući direktorijum. Svi telefoni imaju mehanizme za instalaciju, tako da se s korisničke tačke gledišta sve svodi na to kako da dotične fajlove prenesu do telefona. Takođe, moguće je programe i downloadovati sa Interneta direktno na telefon, što daje veliku fleksibilnost za distribuciju.Šta je sve potrebno? Za sam razvoj aplikacija postoji dosta razvojnih okruženja, koja su u većini i potpuno besplatna i mogu se naći i za Windows, Linux ili MacOS. Od onih poznatijih možemo navesti dva najveća, NetBeans i Eclipse, mada za potrebe razvoja može da posluži i običan tekstualni editor. Poslednji izbor ne preporučujemo s obzirom na to da prva dva odlično rade, a pritom su i besplatni. Autoru ovog teksta više leže NetBeans i Windows, tako da će nastavak teksta ići u tom pravcu. Za NetBeans je prethodno potrebno instalirati JavaSE JDK (Java Development Kit), mada na Sunovom sajtu postoji i tzv. bundle verzija NetBeansa koja sadrži i JDK. Treba samo obratiti pažnju na to da se instalira verzija NetBeansa sa Mobility Packom, tj. da podržava JavaME. Takođe, nije loša ideja skinuti i dokumentaciju za Java platformu, jer je ona vrlo opširna i veoma korisna pri razvoju aplikacija. Pored pomoći u pisanju samog kôda, prednosti ovakvih okruženja jesu postojanje integrisanog emulatora na kojem se može veoma brzo proveriti aplikacija, kao i automatsko generisanje JAR i JAD fajlova.Hello World na SK način Pravljenje prvog Java programa za mobilni telefon je lako, pa ćemo se pored toga baciti na objašnjavanje još nekih pojmova. U NetBeansu treba započeti novi projekat iz menija File : New Project. Ovime se otvara čarobnjak kojim možemo da odaberemo najstandardnije projekte. Treba izabrati JavaME pod kategorijom i Mobile Application pod projektom. Na sledećem ekranu već postoji nekoliko polja za popunjavanje, pa ćemo ovde obratiti malo više pažnje. Polje Project Name je ime pod kojim se aplikacija svrstava u samom okruženju. Iako je to ime same aplikacije, ono je usko povezano sa direktorijumom u kojem će se ceo projekat držati, pa je preporučljivo da se imenuje logički i deskriptivno radi lakšeg snalaženja. Drugo polje Project Location jeste glavni direktorijum u kome se drže svi projekti i treba pratiti istu preporuku kao i za prvo polje. Postavljanje novog projekta kao Main Project ima za posledicu to da NetBeans okruženje zna koji projekat treba da kompajlira i startuje. Poslednja opcija na ovoj strani za nas je trenutno najzanimljivija jer se time kreira Hello World MIDlet. Ovog puta ćemo iskoristiti ovu opciju, mada je za neki napredniji razvoj uvek bolje napraviti prazan projekat pa naknadno dodavati sve potrebne klase. Sledeći ekran nudi nam mogućnost izbora platforme za koju razvijamo. Ovde dolazi dobro poznavanje ciljnih telefona i platformi koje oni podržavaju. U našem slučaju nije bitno koju ćemo opciju postaviti, ali smo se odlučili za CLDC 1.1 i MIDP 2.0, jer tu spada većina telefona (ako ne i svi) koje trenutno možete kupiti a podržavaju Javu. Takođe, na ovom ekranu moguće je odabrati i tip telefona za emulator. Iako ovo deluje na prvi pogled kao estetska opcija, treba uzeti u obzir to da različiti tipovi telefona imaju različite mogućnosti. Na primer, postoji razlika u unosu kod telefona sa običnom tastaturom, qwerty tastaturom ili ekranom osetljivim na dodir. Takođe, telefoni na preklop ili sa slajderom šalju signal kada se otvori ili zatvori ekran odnosno tastatura. Na poslednjem ekranu čarobnjaka ne postoji ništa što bi bilo od značaja za nas trenutno, pa samim tim na njemu ne treba ništa ni menjati.Ovim smo napravili novi projekat sa MIDlet HelloMIDlet klasom koja sadrži jednostavan ekran sa tekstom i jednom komandom. Da ne bismo ostali samo na ovom prostom primeru aplikacije, promenićemo nekoliko stvari i dodati novi ekran kojem ćemo pristupati. Za početak, promenićemo tekst „Hello, World!” tako što ćemo dvaput kliknuti na njega i napisati nešto proizvoljno, na primer „Svet kompjutera”. Već sada možemo da pratimo kako izgleda naša aplikacija, pa je potrebno pokrenuti je pomoću Run : Run Main Project menija. Sada ćemo dodati novi ekran, nekoliko kontrola na njega i sve to povezati tako da radi. Potrebno je prvo prebaciti se u režim Flow. Zatim s desne strane pod kategorijom Displayables treba naći objekat Form i prevući ga na slobodan deo Flow plana aplikacije. Sada je potrebno dodati nekoliko akcija da bi se novi ekran povezao sa ostatkom aplikacije. U kategoriji Commands treba naći objekat Item Command i prevući ga na početnu formu. Takođe, treba uraditi slično sa komandom Back, ali nju treba prevući na našu novu formu. Sada se sve svodi na povezivanje ove dve komade sa ekranima: mišem treba kliknuti na samu komandu i zatim je, dok je levo dugme miša pritisnuto, prevući na drugu formu. Rezultat bi trebalo da bude kao na slici našeg primera. Kada smo povezali ove dve forme, trebalo bi dodati nešto na tu novu praznu formu. Desnim klikom na novu formu i izborom opcije Edit vraćamo se u Screen režim. Potrebno je dodati dva objekta: Text Field i Date Field iz kategorije Items iz palete sa desne strane prevlačenjem na formu, čisto da nešto postoji na njoj. Time smo završili našu demo aplikaciju kojom možemo da se igramo u emulatoru ili da je čak prenesemo na telefon. Trenutno je moguće jedino prebacivati se s jedne forme na drugu, dok su pridodati elementi na drugoj formi aktivni ali ništa ne rade. Svaki objekat može imati svoje akcije i time se postiže funkcionalnost, ali se nećemo baviti time, jer bi onda ovaj tekst postao suviše opširan.Šta dalje? Što se tiče pravljenja naprednijih aplikacija (čitaj: igara), u to je potrebno uložiti mnogo truda i vremena. Umesto predefinisanih formi i objekata potrebno je prošiti postojeće ili napraviti specifične forme i objekte. Samo tako se može osigurati potpuna fleksibilnost koju programiranje složenijih aplikacija i zahteva. Način pravljenja aplikacija koji smo prikazali namenjen je brzom pravljenju i jednostavnim aplikacijama kojima optimizacija nije previše bitna, ali je svakako dobar primer koji može da zagolica maštu. Dovoljno je samo pogledati raznovrsnost i količinu Java aplikacija za telefone. Vladimir ČABRILO | | 



|