Tražite izvor dodatne zarade bez ulaganja?? sve što morate je svakodnevno se ulogirati u svoj account i skupljati bodove kako biste zaradili i osvajali dodatne nagrade na dnevnim nagradnim igrama!!
Android je programsko okruženje za pokretne uređaje bazirano na otvorenom kodu (eng. Open Source) koje se sastoji od kompleta programske opreme: operacijskog sustava, programske međuopreme (eng. middleware) i ključnih aplikacija za pokretne uređaje. Također, sadrži mnoštvo sučelja za izradu aplikacija (API, eng. application programming interface) koja razvojnim inženjerima omogućuju samostalan razvoj i rad na aplikacijama.
Android je programsko okruženje za pokretne uređaje bazirano na otvorenom kodu (eng. Open Source) koje se sastoji od kompleta programske opreme: operacijskog sustava, programske međuopreme (eng. middleware) i ključnih aplikacija za pokretne uređaje. Također, sadrži mnoštvo sučelja za izradu aplikacija (API, eng. application programming interface) koja razvojnim inženjerima omogućuju samostalan razvoj i rad na aplikacijama.
Predstavljanje Androida i
njegove razvojne okoline za pisanje aplikacija (SDK, eng. software development kit) započelo je u studenom 2007. godine od strane Googlea i
grupacije Open Handset Alliance (OHA). Open Handset Alliance je konzorcij s
ciljem razvoja otvorenih standarda za pokretne uređaje, promocija inovacija i
prilagodba uređaja korisniku s poboljšanom izvedbom i pristupačnom cijenom.
Broji nekoliko desetaka članica među kojima se nalazi i Google.
Shodno
svojoj politici OHA ističe slijedeće karakteristike Android programskog
okruženja [1]:
•
otvorenost
- programeru omogućava potpunu slobodu u razvoju novih i već postojećih
aplikacija, a proizvođaču uređaja slobodno korištenje i prilagodbu platforme
bez plaćanja autorskih prava;
•
sve
aplikacije su ravnopravne - što znači da ne postoji razlika između osnovnih
jezgrenih aplikacija uređaja i dodatnih aplikacija. Svim aplikacijama omogućen
je ravnopravni pristup resursima pokretnog uređaja što daje mogućnost potpune
prilagodbe uređaja specifičnim potrebama individualnog korisnika;
•
automatsko
upravljanje ž ivotnim ciklusom aplikacije - omogućava nadzor pokretanja i
izvršavanja aplikacija na sistemskoj razini optimiziranim korištenjem memorije
i snage uređaja. Krajnji korisnik više ne brine o gašenju određenih aplikacija
prije pokretanja drugih;
•
rušenje
granica "klasičnih" aplikacija - mogućnost razvoja novih i
inovativnih aplikacija temeljenih na međusobnoj kolaboraciji tehnologija;
•
brz i
jednostavan razvoj aplikacija - omogućen je bogatom bazom korisnih programskih
biblioteka (eng. libraries) i alata za izradu aplikacija;
•
visokokvalitetni
grafički prikaz i zvuk - podržana 2D vektorska i 3D OpenGL (eng. Open Graphics Library) grafika, te ugrađeni kodeci svih često korištenih
audio i video formata;
•
kompatibilnost
s većinom sadašnjeg i budućeg hardvera - uključuje prenosivost Androidovih
aplikacija na ARM, x86 i ostale arhitekture, te prilagodljivost sustava ulaznim
i izlaznim komponentama.
2. Arhitektura sustava Android
Arhitektura
sustava Android [3] bazira se na Linux 2,6 jezgri (eng. kernel) koja se koristi kao sloj apstrakcije hardvera (HAL, eng. Hardware Abstraction Layer). Razlog za korištenje jezgre operacijskog sustava Linux
je dokazana pogonska podrška (eng. driver
model), mogućnost upravljanja memorijom i
procesima, sigurnosni model, mrežni sustav, te dokazana robusnost, konstantni
razvoj i unapređivanje sustava. Slika 2.1 prikazuje arhitekturu sustava
Android.
Najvažniji
elementi jezgre su:
• pogonski program za međuprocesnu komunikaciju između
aplikacija i usluga (eng. service) (eng. Binder
(IPC) Driver) - omogućava međuprocesnu
komunikaciju između aplikacija i usluga, te
• upravljanje napajanjem (eng. Power Management) - komponenta Androida temeljena na standardnom
Linuxovom sustavu upravljanja napajanjem.
Izvorne
programske biblioteke (eng. native
libraries) pisane su u programskim jezicima
C i C++ i čine
idući sloj u arhitekturi sustava. Neke od značajnijih su:
•
program
za upravljanje grafičkim sučeljem (eng. Surface
Manager) -biblioteka odgovorna za pravilno
iscrtavanje različitih aplikacijskih komponenti u vremenu i prostoru;
•
OpenGL ES
(eng. OpenGL for Embedded Systems) - biblioteke koje se koriste za hardversku 3D akceleraciju (ukoliko je
podržana) ili za 3D rasterizaciju;
•
SGL (eng. Scalable Graphics Library) - predstavlja 2D biblioteke na kojima je temeljena
većina aplikacija. Spomenimo još da se 2D i 3D elementi mogu kombinirano
prikazivati u jednom korisničkom sučelju;
•
Media
Framework - skupina kodeka za snimanje i
reprodukciju audio formata, video formata i nepomičnih slika. Omogućena je od
strane PacketVidea;
•
FreeType - biblioteka koja služi za vektorsku rasterizaciju
oblika pisma (eng.
font);
so-ans� ) n u pV W o-fareast-language:HR'>kompatibilnost
s većinom sadašnjeg i budućeg hardvera - uključuje prenosivost Androidovih
aplikacija na ARM, x86 i ostale arhitekture, te prilagodljivost sustava ulaznim
i izlaznim komponentama.
2. Arhitektura sustava Android
Arhitektura
sustava Android [3] bazira se na Linux 2,6 jezgri (eng. kernel) koja se koristi kao sloj apstrakcije hardvera (HAL, eng. Hardware Abstraction Layer). Razlog za korištenje jezgre operacijskog sustava Linux
je dokazana pogonska podrška (eng. driver
model), mogućnost upravljanja memorijom i
procesima, sigurnosni model, mrežni sustav, te dokazana robusnost, konstantni
razvoj i unapređivanje sustava. Slika 2.1 prikazuje arhitekturu sustava
Android.
•
SSL (eng.
Secure Socket Layer) - omogućuje sigurnosnu komunikaciju preko Interneta;
•
SQLite - programska biblioteka koja
implementira bazu podataka (eng.
database engine);
•
WebKit - jezgra preglednika koji podržava JavaScript i ostale standarde
na malom uređaju;
•
System C library - implementacija
standardne C-ove sistemske biblioteke (libc) izvedene iz operacijskog sustava
BSD.
Idući
sloj u arhitekturi Androida je radno okruženje (eng. Android runtime) kojeg čine virtualni stroj Dalvik (DVM, eng. Dalvik Virtual Machine) i jezgrene biblioteke (eng. core library).
DVM je registarski baziran
virtualni stroj, dok je klasični Javin virtualni stroj (JVM, eng. Java Virtual Machine) baziran na stogu. Više o Dalvik
virtualnom stroju u poglavlju 2.1. Jezgrene biblioteke pisane su u programskom jeziku
Java i predstavljaju sve esencijalne klase kao što su klase za manipulaciju
kolekcijama, klase za komunikaciju s okolinom i slično. Bitna novost je i to
što se Androidove jezgrene biblioteke razlikuju od biblioteka u Java Standard
Edition (J2SE) i Java 2 Micro Edition (J2ME).
Sloj
aplikacijskih okvira (eng. Application
Framework) napisan je u programskom jeziku
Java i sadrži proširiv skup programskih komponenti kojeg koriste sve aplikacije
uređaja. Neki od važnijih elemenata su:
•
upravljanje
aktivnostima (eng. Activity
Manager) - upravljanje životnim ciklusom aplikacije,
•
upravljanje
programskim paketima (eng. Package Manager) - sadrži
informaciju o aplikacijama instaliranim na sustavu,
•
upravljanje
prozorima (eng. Window Manager) - upravljanje aplikacijskim prozorima,
•
upravljanje
pozivima (eng. Telephony Manager) - sadrži API-je koji se koriste pri izradi aplikacija za upravljanje
pozivima,
•
pružatelji
sadržaja (eng. Content Providers) - omogućuju zajedničko korištenje podataka od strane
više aplikacija,
•
upravljanje
resursima (eng. Resource Manager) - služi za pohranu dijelova aplikacije koji nisu kod
(npr. slike),
•
sustav
grafičkog prikaza (eng. View System) - sadrži bazu gotovih grafičkih prikaza i alata (eng. widget),
•
upravljanje
lokacijski temeljenim uslugama (eng. Location
Manager) i
•
upravljanje obavijestima (eng.
Notification Manager)
- upravljanje obavijestima i događajima (npr.
dospijeće poruke, nadolazeći sastanak).
Aplikacijski
sloj je zadnji sloj u arhitekturi sustava Android i č ine ga korisničke
aplikacije uređaja. Predstavlja sloj vidljiv krajnjem korisniku. Uključuje neke
od standardnih sistemskih aplikacija kao što su Web preglednik, lista kontakata, telefon, itd.
2.1 Dalvik virtualni stroj
Umjesto
upotrebe standardnog Java 2 Micro Edition (J2ME) kao mehanizma za pokretanje
Javinih aplikacija na pokretnim uređajima, Google je razvio vlastiti virtualni
stroj za Android. DVM je najvjerojatnije razvijen kako bi se zaobišla
problematika s dozvolama korištenjem Sunovog J2ME. Svaki pokretni uređaj koji u
sebi sadrži J2ME mora kod Suna licencirati bilo kakvu promjenu izvornog koda
J2ME-a. Virtualni stroj Dalvik dobio je ime po istoimenom Islandskom gradu u
kojem su živjeli preci glavnog razvijatelja DVM-a Dan Bornsteina.
Osnovna razlika između Sun
Java virtualnih strojeva, te DVM-a je u tome što su prvo spomenuti stožno
bazirani virtualni strojevi, dok je DVM registarski baziran virtualni stroj.
Međukod (eng. bytecode) Dalvik virtualnog stroja transformira se pomoću alata dx (koji je
sastavni dio Android SDK-a) iz
Javinih klasnih datoteka (eng. Java class file) prevedenih Javinim prevoditeljem u novu klasu *.dex (eng. Dalvik Executable) formata. Međukod kojeg izvršava DVM nije Javin međukod, nego upravo
spomenuti .dex oblik. Transformacija formata omogućava
bolju prilagodbu za rad na manjim procesorima boljim iskorištavanjem
raspoložive memorije i procesorske snage. Rezultat svega je mogućnost
višestrukog instanciranja samog virtualnog stroja š to znači da se svaka
Androidova aplikacija pokreće kao zasebni proces, s vlastitom instancom virtualnog
stroja Dalvik.
, � ; a ��W � X :48.7pt;margin-bottom:.0001pt;text-align:left;
text-indent:-18.95pt;line-height:13.7pt;mso-line-height-rule:exactly;
mso-pagination:widow-orphan'>• upravljanje napajanjem (eng. Power Management) - komponenta Androida temeljena na standardnom
Linuxovom sustavu upravljanja napajanjem.
Izvorne
programske biblioteke (eng. native
libraries) pisane su u programskim jezicima
C i C++ i čine
idući sloj u arhitekturi sustava. Neke od značajnijih su:
•
program
za upravljanje grafičkim sučeljem (eng. Surface
Manager) -biblioteka odgovorna za pravilno
iscrtavanje različitih aplikacijskih komponenti u vremenu i prostoru;
•
OpenGL ES
(eng. OpenGL for Embedded Systems) - biblioteke koje se koriste za hardversku 3D akceleraciju (ukoliko je
podržana) ili za 3D rasterizaciju;
•
SGL (eng. Scalable Graphics Library) - predstavlja 2D biblioteke na kojima je temeljena
većina aplikacija. Spomenimo još da se 2D i 3D elementi mogu kombinirano
prikazivati u jednom korisničkom sučelju;
•
Media
Framework - skupina kodeka za snimanje i
reprodukciju audio formata, video formata i nepomičnih slika. Omogućena je od
strane PacketVidea;
•
FreeType - biblioteka koja služi za vektorsku rasterizaciju
oblika pisma (eng.
font);
Slika
2.2: Struktura datoteke .dex
|
Struktura datoteke .dex prikazana je slikom 2.2 [5]. Datoteka se sastoji od jednostavnog zaglavlja, identifikatora nizova, tipova, prototipova, polja i metoda, definicija klasa i podataka. Ovime se osigurava da se konstante koje se ponavljaju u klasnim datotekama pojavljuju samo jednom u datoteci .dex kako bi se sačuvala memorija.
3. Android SDK
Paket softverskih razvojnih alata Android SDK [6] pruža
podršku za razvoj, testiranje, pronalaženje
i uklanjanje pogrešaka
(eng. debugging) aplikacija. Uključuje
sljedeće komponente:
•
android API-je;
razvojne
alate - alati za prevođenje i debagiranje. Najznačajniji je
programski dodatak (eng. plugin) za Eclipse IDE naziva ADT
(eng. Android Development Tools Plugin) koji omogućuje jednostavni pristup LogCatu, uređivaču
•
datoteke AndroidManifest.xml, kontrolu
dolaznih poziva, SMS simulaciju i slično;
•
emulator
- služi za izvršavanje progama na računalu;
•
DDMS
(eng. Dalvik Debug Monitoring Service) - služi za kontrolu i nadzor pronalaženja i uklanjanja
pogrešaka u aplikacijama;
•
AAPT
(eng. Android Asset Packaging Tool) - koristi se za stvaranje i distribuciju Androidovog
programskog paketa u .apk formatu;
•
ADB (eng. Android Debug Bridge) - klijentsko-poslužiteljska aplikacija za instaliranje
i pokretanje datoteka .apk na emulatoru ili uređaju, te pristup komandnom retku
uređaja. Koristi se i za povezivanje standardnog programa za pronalaženje i
uklanjanje pogrešaka (eng. debugger)
s kodom na emulatoru ili uređaju;
•
detaljnu
dokumentaciju;
•
primjerke
koda - jednostavni primjerci koda za demonstraciju korištenja određenih API-ja,
te mogućnosti koje pruža Android.
3.1 Android emulator
Slika 3.1: Android emulator
|
Android emulator je aplikacija temeljena na QEMU (eng. Open source processor emulator) s virtualnim pokretnim uređajem temeljenom na procesoru ARM (eng. Advanced RISC Machine). QEMU je strojni emulator temeljen na otvorenom kodu. Uključuje cjeloviti Android sistemski stog (eng. system stack) sve do razine jezgre sustava, skup unaprijed instaliranih aplikacija (npr. birač brojeva) kojima se može pristupati korištenjem vlastitih aplikacija, korisničko grafičko sučelje, prilagodljivo dodjeljivanje vrijednosti tipkama, te mnoštvo naredbi i mogućnosti za kontrolu ponašanja emuliranog okruženja.
3.2 Dalvik Debug Monitoring Service (DDMS)
DDMS je
alat koji omogućava upravljanje procesima na emulatoru ili pokretnom uređaju,
te pomaže prilikom pronalaženja i uklanjanja pogrešaka u programskom kodu.
Pruža mogućnost preusmjeravanja vrata (eng. port redirection), informacije o stanju dretvi i gomila na uređaju,
upotrebu LogCata (naredba koja komprimirane datoteke evidencije
događaja ispisuje u oovjeku čitljivom obliku), praćenje informacija o
procesima, snimanje aktivnog zaslona uređaja, kontrolu lažiranih (eng. spoofing) poziva, SMS poruka i podataka o lokaciji, te mnoge
druge usluge.
Cijeli se
alat ponaša kao poveznica između IDE-a i aplikacija koje se izvršavaju na
uređaju. Kao što je već spomenuto, na sustavu Android svaka aplikacija pokreće se kao zasebni proces koji se
izvodi kao zasebna instanca virtualnog stroja Dalvik. Svaki od tih procesa
povezan je s programom za pronalaženje i uklanjanje programskih pogrešaka preko
jedinstvenih vrata počevši uzlazno od vrata 8600. DDMS se također spaja i na
pretpostavljena lokalna vrata 8700.
/spanv � p n �X ��W lass=FontStyle61>. Uključuje
sljedeće komponente:
•
android API-je;
razvojne
alate - alati za prevođenje i debagiranje. Najznačajniji je
programski dodatak (eng. plugin) za Eclipse IDE naziva ADT
(eng. Android Development Tools Plugin) koji omogućuje jednostavni pristup LogCatu, uređivaču
Prilikom pokretanja DDMS
se spaja na ADB koji mu prosljeđuje informaciju o tome da li je uređaj spojen
ili odspojen. Kada je uređaj spojen kreira se VM (eng. Virtual Machine) nadzorna usluga između ADB-a i DDMS-a čija je uloga obavještavanje
DDMS-a da li je virtualni stroj na uređaju pokrenut ili ugašen. Prilikom pokretanja virtualnog stroja DDMS posredstvom ADB-a dobavlja njegov jedinstveni ID i otvara vezu prema programu za pronalaženje i uklanjanje pogrešaka
preko ADBD-a (eng. ADB Deamon) na uređaju. Na taj način ostvarena je veza između DDMS-a
i virtualnog stroja korištenjem uobičajenog wire protokola.
3.3 Android Debug Bridge (ADB)
ADB je
klijentsko-poslužiteljski alat koji služi za povezivanje s Androidovim
emulatorom ili uređajem. Uključuje tri komponente:
•
klijent - aplikacije (npr. DDMS) koje
komuniciraju s pozadinskim procesom preko poslužitelja,
•
poslužitelj
- pozadinski proces koji se pokreće na računalu na kojem razvijamo aplikaciju i
upravlja komunikacijom između klijenta i pozadinskog procesa ADB-a koji se
izvršava na emulatoru, te
•
pozadinski
proces ADB-a na emulatoru.
Prilikom
pokretanja ADB-ovog klijenta prvo se provjerava postoji li već aktivni ADB-ov
poslužitelj. Ukoliko ne postoji, pokreće se i spaja na lokalna TCP vrata 5037 na kojima osluškuje naredbe
poslane od strane ADB klijenta. Svi ADB klijenti koriste vrata 5073 za
komunikaciju s ADB poslužiteljem.
Nakon toga se uspostavlja
komunikacija poslužitelja i svih instanci emulatora ili uređaja. To se
ostvaruje na način da poslužitelj pregledava sva neparna vrata u rasponu od
5555 do 5585. Ukoliko ADB poslužitelj prilikom pretraživanja na određenim
neparnim vratima naiđe na pozadinski proces ADB-a uspostavlja se veza na tim
vratima. Pretraživanje samo neparnih vrata vrši se iz razloga š to je za
uspostavu veze potreban jedan par vrata i to jedna vrata za vezu s konzolom i
jedna vrata za vezu emulatora ili uređaja s ADB-om. Tako se, na primjer,
konzoli emulatora povezanog s ADB poslužiteljem na vratima 5555 pristupa preko vrata 5554.
Nakon uspostave veze moguće je kontrolirati emulator
različitim ADB naredbama.
4. Koncept aplikacije
Sve
Androidove aplikacije pisane su u programskom jeziku Java. Aplikacijom se
smatra kompletni kod paketa upakiran pomoću AAPT alata koji kao rezultat stvara
datoteku sufiksa .apk. Upravo se u ovom formatu aplikacije distribuiraju na
pokretni uređaj.
Većina
stvorenih aplikacija pripada u jednu od slijedećih kategorija [4]:
•
aktivnost
koja se izvršava u prvom planu (eng. foreground
activity) - aplikacije bez korisne
pozadinske aktivnosti (npr. igre ili kartografija). Kada su izvan fokusa
aplikacije ove vrste se uglavnom privremeno zaustavljaju;
•
pozadinska
usluga (eng. background service) - aplikacije ograničene interakcije s korisnikom koje
se uglavnom izvršavaju u pozadini (npr. aplikacija za upravljanje dolaznim
pozivima);
•
aktivnost
s prekidima - aplikacije koje podrazumijevaju određeni stupanj interakcije s
korisnikom, ali se uglavnom odvijaju u pozadini (npr. mp3 svirač (eng. mp3 player)).
Za
razliku od većine aplikacija na drugim sustavima, Androidove aplikacije nemaju
samo jednu pokretnu točku (ovo konkretno znači da ne postoji samo jedna main() funkcija).
Razlog tome je karakteristika sustava koja zastupa ideju međusobne interakcije
dvije ili više različitih aplikacija, a da bi to bilo ostvarivo sustav mora
biti u mogućnosti pokrenuti proces pojedine aplikacije i kada se zatraži rad
samo nekog njenog određenog dijela, te instancirati Javin objekt za dotični
dio.
4.1 Osnovna struktura
Postoje
četiri osnovne komponente koje čine aplikaciju [2]:
•
aktivnost
(eng. Activity) - predstavlja komponentu aplikacije koja se uglavnom
može poistovjetiti s jednim konkretnim prozorom aplikacije u kojem je korisnik
u mogućnosti izvršiti određenu radnju. Aplikacija može sadržavati jednu ili
više definiranih aktivnosti, pri č emu je jedna od aktivnosti uvijek definirana
kao primarna aktivnost. Prijelaz između aktivnosti odvija se tako što aktualna
aktivnost invocira novu. Iako više aktivnosti tvori jedno kompaktno korisničko
sučelje treba imati na umu da su one međusobno nezavisne. Svaka aktivnost
implementira se kao zasebna klasa koja nasljeđuje klasu Activity, te je
sama odgovorna za čuvanje svog stanja u životnom ciklusu aplikacije;
•
namjera
(eng. Intent) - omogućava prijelaz između zaslona aplikacija.
Ustvari predstavlja namjeru za obavljanjem određene radnje. Ovdje ćemo još
spomenuti Broadcast Reciever koji predstavlja dio koda koji se pokreće isključivo
ukoliko je aktiviran nekim vanjskim faktorom i Intent Filter koji
opisuje koje namjere je aplikacija u stanju izvršiti;
•
usluga
(eng. Service) - predstavlja proces bez vidljive korisničke
interakcije. Uglavnom se izvršava u pozadini nedefinirani period vremena. Služi
za obnavljanje podatkovnih resursa, vidljivih aktivnosti i signalizacijskih
obavijesti. Svaka usluga nasljeđuje klasu Service;
•
pružatelj
sadržaja (eng. Content Provider) - omogućava uzajamno korištenje podataka između
različitih aplikacija i njihovih procesa. Pružatelj sadržaja nasljeđuje klasu ContentProvider.
Aplikacija
ne mora sadržavati sve spomenute komponente, a isto tako može sadržavati i neke
druge.
V
4.2 Životni ciklus aplikacije
Slika
4.1: Stog aktivnosti
|
Kod
klasične radne površine operacijskog sustava Windows ili Linux postoji jedan aktivni prozor i ravnopravni niz
ostalih aplikacija, a kontrolu ž ivotnog ciklusa vrši korisnik. Android sam
brine o ž ivotnom ciklusu aplikacija, prikaz se vrši na principu LIFO (eg. Last
In First Out) stoga na koji se spremaju aktivnosti pokrenutih
aplikacija.
Svaki
zaslon korisničkog sučelja prikazan je pomoću klase Activity. Aplikaciju
čine jedna ili više aktivnosti. Vrlo je važno napomenuti da aplikacija nije
isto što i proces što bitno utječe na ponašanje i životni ciklus aplikacije.
Kako bi
se očuvala efikasnost cijelog sustava, procesi i njihove aplikacije će, ukoliko
je potrebno, biti ugašeni bez upozorenja s ciljem oslobađanja memorijskih
resursa za aplikacije višeg prioriteta (uglavnom one koje korisnik koristi u
tom trenu).
-prik � y 9 ��W � X style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-ansi-language:EN-US;
mso-fareast-language:EN-US;}
Slika 3.1: Android emulator
|
Android emulator je aplikacija temeljena na QEMU (eng. Open source processor emulator) s virtualnim pokretnim uređajem temeljenom na procesoru ARM (eng. Advanced RISC Machine). QEMU je strojni emulator temeljen na otvorenom kodu. Uključuje cjeloviti Android sistemski stog (eng. system stack) sve do razine jezgre sustava, skup unaprijed instaliranih aplikacija (npr. birač brojeva) kojima se može pristupati korištenjem vlastitih aplikacija, korisničko grafičko sučelje, prilagodljivo dodjeljivanje vrijednosti tipkama, te mnoštvo naredbi i mogućnosti za kontrolu ponašanja emuliranog okruženja.
3.2 Dalvik Debug Monitoring Service (DDMS)
DDMS je
alat koji omogućava upravljanje procesima na emulatoru ili pokretnom uređaju,
te pomaže prilikom pronalaženja i uklanjanja pogrešaka u programskom kodu.
Pruža mogućnost preusmjeravanja vrata (eng. port redirection), informacije o stanju dretvi i gomila na uređaju,
upotrebu LogCata (naredba koja komprimirane datoteke evidencije
događaja ispisuje u oovjeku čitljivom obliku), praćenje informacija o
procesima, snimanje aktivnog zaslona uređaja, kontrolu lažiranih (eng. spoofing) poziva, SMS poruka i podataka o lokaciji, te mnoge
druge usluge.
Cijeli se
alat ponaša kao poveznica između IDE-a i aplikacija koje se izvršavaju na
uređaju. Kao što je već spomenuto, na sustavu Android svaka aplikacija pokreće se kao zasebni proces koji se
izvodi kao zasebna instanca virtualnog stroja Dalvik. Svaki od tih procesa
povezan je s programom za pronalaženje i uklanjanje programskih pogrešaka preko
jedinstvenih vrata počevši uzlazno od vrata 8600. DDMS se također spaja i na
pretpostavljena lokalna vrata 8700.
/spanv � p n �X ��W lass=FontStyle61>. Uključuje
sljedeće komponente:
•
android API-je;
razvojne
alate - alati za prevođenje i debagiranje. Najznačajniji je
programski dodatak (eng. plugin) za Eclipse IDE naziva ADT
(eng. Android Development Tools Plugin) koji omogućuje jednostavni pristup LogCatu, uređivaču.
Definiramo
slijedeće vrste prioriteta:
aktivni
procesi - ovakvih procesa je uglavnom malo i imaju vrlo visoki
prioritet iz razloga š to podržavaju aplikacije s kojima korisnik ostvaruje
aktivnu interakciju. Neki od ovih procesa uključuju vidljive aktivnosti,
Broadcast
Recievere koji izvršavaju onReceive() metodu,
te usluge koje izvršavaju onStart(),
onCreate() ili onDestroy() metodu;
vidljivi procesi - predstavljaju vidljive, ali neaktivne procese. Uglavnom ih
je vrlo malo, te se gase u krajnjoj nuždi;
pokrenuti uslužni procesi - procesi pokrenutih usluga
s kojima korisnik nema aktivnu interakciju, te iz tog razloga imaju nešto niži
prioritet. I dalje ih se smatra aktivnim procesima, te će biti ugašeni samo u
nuždi;
•
pozadinski
procesi - predstavljaju procese nevidljivih aktivnosti bez
pokrenutih usluga. U pravilu ih je veliki broj, te se gase po principu
"zadnji viđen prvi ubijen" (LSFK, eng. Last Seen First Killed);
•
prazni procesi - predstavljaju zapis pokrenutih
procesa u privremenoj memoriji s ciljem smanjenja vremena ponovnog pokretanja.
Na životni ciklus aplikacije utječe
isključivo sustav, a ne sama aplikacija. Stanje u kojem se nalazi
aplikacija određuje njezinu prioritetnu razinu. Aktivnost aplikacije može se
nalaziti u nekom od sljedećih stanja prikazanih slikom 4.3 [1]:
•
aktivno - vidljiva aktivnost u fokusu;
•
privremeno
zaustavljeno - vidljiva aktivnost izvan fokusa;
•
zaustavljeno
- nevidljiva aktivnost izvan aktivne upotrebe. U memoriji se čuva njezino
stanje i ostale informacije;
neaktivno
- stanje aktivnosti nakon gašenja, a prije pokretanja.
an;msoD � t l �X ��W lfo1;tab-stops:48.0pt'>•
android API-je;razvojne alate - alati za prevođenje i debagiranje. Najznačajniji je programski dodatak (eng. plugin) za Eclipse IDE naziva ADT (eng. Android Development Tools Plugin) koji omogućuje jednostavni pristup LogCatu, uređivaču
Prijelazi
između pojedinih stanja nevidljivi su krajnjem korisniku, ali kontrolirani na
razini sustava upotrebom odgovarajućih nadjačavajućih (eng. override) metoda:
onCreate(Bundle)
- poziva se prilikom pokretanja aplikacije, onStart() -
naznačuje početak prikaza aplikacije korisniku, onResume() - poziva
se prilikom početka ili nastavka interakcije s korisnikom, onPause() - poziva
se prilikom prebacivanja u pozadinski način rada, onStop() - poziva
se u slučaju dužeg perioda nekorištenja aplikacije, onRestart() -
naznačuje ponovo pozivanje aplikacije iz zaustavljenog stanja, onDestroy() - poziva
se trenutak prije gašenja aplikacije,
onSaveInstanceState(Bundle) - opcionalna metoda
koja se poziva u slučaju čuvanja stanja instance i
onRestoreInstanceState(Bundle)
- poziva se prilikom reinicijalizacije aktivnosti
iz stanja prethodno pohranjenog onSaveInstanceState()
metodom.
4.3 Korisničko sučelje
Postoje
dva načina dizajniranja korisničkog sučelja: proceduralno i deklarativno. Proceduralni
dizajn odnosi se na pisanje Java koda, a deklarativni na pisanje XML (eng. EXtensible Markup Language) koda. U praksi se za kreiranje grafičkog
korisničkog sučelja uglavnom koristi XML.
Kreiranjem sučelja aktivnosti dobivaju
svoju funkcionalnost, tj. vidljivost na zaslonu uređaja i
na taj se način omogućava interakcija s korisnikom. Osnovne jedinice
korisničkog sučelja su objekti pogled (eng. View) i grupe
pogleda (eng. ViewGroup) [2]:
•
Slika
4.4: Hijerarhija prikaza elemenata korisničkog sučelja
|
pogled - objekt čija podatkovna struktura u sebi nosi zapis izgleda i sadržaja određenog pravokutnog područja na zaslonu, te upravlja iscrtavanjem elemenata, pomicanjem sadržaja na zaslonu (eng. scrolling) i ostalim faktorima koji utječu na izgled definiranog dijela zaslona. U hijerarhijskom stablu objekti pogled su listovi stabla. Android raspolaže s već gotovim skupovima objekata ove vrste kao što su gumbi, kvadratići za odabir (eng. checkbox) i slično. Ovi objekti nasljeđuju klasu View;
•
grupe pogleda
- posebna vrsta objekta pogled koja sadrži i upravlja skupinom zavisnih
objekata pogleda i grupe pogleda čime je omogućena kompleksnost prikaza
korisničkog sučelja. Objekti ove vrste su inastance klase ViewGroup.
Iscrtavanje
elemenata stabla započinje od korijena stabla tako š to aktivnost prvo poziva
svoju setContentView() metodu i Android sustavu predaje referencu na
korijenski objekt. Svaki podčvor iscrtava se sam pozivanjem draw() metode i
to pod uvjetom da čvor sam postavlja zahtjev za lokacijom i veličinom, ali
roditeljski č vor (grupa pogleda) donosi konačnu odluku o veličini prostora za
iscrtavanje podčvora i njegovoj lokaciji na zaslonu. Svaka grupa pogleda je odgovorna
za renderiranje prikaza svojih podčvorova.
4.3.1 Izbornik
Za
pristup izborniku aplikacije najčešće se koristi tipka MENU koja se nalazi na samom uređaju (ukoliko je hardverski
podržano) ili se izbornik može prikazati ukoliko se odabere neka od komponenti
aplikacije. Strukturu izbornika, koja je hijerarhijska, nije potrebno ručno
konfigurirati nego se isto postiže definiranjem povratnih (eng. callback) metoda onCreateOptionsMenu() ili onCreateContextMenu()
s popisom stavki izbornika za određenu aktivnost.
Upravljanje događajima
također se odvija automatski pozivanjem metoda onOptionsItemSelected() ili onContextItemSelected()
od strane sustava.
4.3.2 Događaji unutar korisničkog sučelja
Kako bi
se znalo da je korisnik uopće odabrao neku od aktivnosti ili stavku u izborniku
sučelja potrebno je definirati način na koji korisnik vrši interakciju s
određenim komponentama sučelja. Postoje dva načina:
•
definiranje
slušača događaja (eng. Event
listener) - najčešći način osluškivanja
događaja. View klasa
sadrži kolekciju ugniježđenih sučelja On<event>Listener
od kojih svako sadrži povratnu metodu
On<event>() pri čemu događaj
može biti ili odabir određenog elementa ili dodir ekrana ili nešto treće;
•
nadjačavanje
(eng. override) postojeće povratne metode za View klasu -
koristi se u slučaju implementiranja vlastite View klase i
osluškivanja posebnih događaja koji se u njoj pojavljuju.
4.3.3 Dodatne mogućnosti
Osim
osnovnih komponenti aplikacija može sadržavati mnoštvo dodatnih elemenata i
njihovih varijacija. Spomenut ćemo adaptere, te stilove i teme.
Adapteri su vrsta podklase
ViewGroup koja se
koristi za prikaz gotovih pohranjenih podataka (za razliku od iscrtavajućih
grupa i nizova).
Kao dio aplikacijskog
sustava postoje već gotovi stilovi i teme, no također je moguće stvoriti i
vlastite. Stil je skup jednog ili više atributa za oblikovanje zasebnih
elemenata u prikazu (npr. definiranje određene veličine prikaza i boje slova).
Tema je skup jednog ili više atributa za oblikovanje koji se primjenjuju na
jednu ili sve aktivnosti u aplikaciji (npr. definiranje određenih pozadinskih
boja, izgleda teksta za određenu aktivnost).
4.4 Datoteka AndroidManifest.xml
Svaka
aplikacija obavezno mora sadržavati datoteku AndroidManifest.xml koja ju opisuje. Ova datoteka nalazi se u korijenskom
direktoriju paketa, te sadrži slijedeće informacije o aplikaciji:
naziv
paketa -služi kao jedinstveni identifikator aplikacije,
opis komponenti - aktivnosti, usluge, pružatelji sadržaja, filtere
namjera (eng.
Intent Filters), Broadcast Recievers itd.,
odredbe o tome koji će procesi sadržavati
programske
komponente, deklaracija dozvola za pristup aplikacijskim komponentama od strane
drugih aplikacija,
minimalna
razina Android API-ja koju zahtjeva aplikacija,
popis
biblioteka s kojima aplikacija treba biti povezana i
popis instrumentacijskih klasa koje osiguravaju
oblikovanje i ostale informacije
dok je aplikacija aktivna - ove deklaracije su
prisutne u AndroidManifest.xml
datoteci prilikom razvoja i testiranja, te se izbacuju
prije njenog objavljivanja.
Dozvole
se definiraju zbog hardverski ograničenog pristupa memoriji jednog procesa od
strane drugog, te zato što je svakoj aplikaciji dodijeljen specifični
korisnički ID. Neke od najčešće korištenih dozvola su:
•
INTERNET - pristup Internetu,
•
READCONTACTS
- dozvola
za čitanje podataka kontakata,
•
WRITECONTACTS - dozvola za pisanje podataka
kontakata,
•
RECEIVESMS
- nadzor
pristigle SMS poruke,
•
ACCESS_COARSE_LOCATOR
- grubo
bežično lociranje ili lociranje preko bazne stanice i
•
ACCESS_FINE_LOCATION
- finije
lociranje korištenjem npr. GPS-a.
Uređivanje
AndroidManifest.xml može biti ručno pisanjem XML koda ili korištenjem uređivača
koji dolazi kao dio ADT-a.
4.5 Podatkovni resursi
Pod
pojmom podatkovnih resursa podrazumijevaju se vanjski podaci (slike, video,
teme, XML kod i
slično) koji se koriste u aplikaciji, a nisu dio programskog koda. Podatkovni
resursi u aplikacijskom paketu smješteni su u vlastitom direktoriju pod nazivom
res/. Ovo
odjeljivanje se prvenstveno radi zbog lakšeg upravljanja, ažuriranja i
manipulacije podacima. Podatkovni resursi prevode se pomoću alata AAPT ovisno o
tipu i poddirektoriju u kojem se nalaze. Ovisnost tipa podatkovnog resursa i
lokacije u paketu prikazana je u tablici 4.2.
Važno je
napomenuti da se XML datoteke pretvaraju u binarni zapis kako bi se zbog veće
efikasnosti mogle brže učitati.
yle='f� s z �X ��W line-height:115%;
mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
mso-ansi-language:EN-US;mso-fareast-language:HR;mso-bidi-language:AR-SA'>- alati za prevođenje i debagiranje. Najznačajniji je
programski dodatak (eng. plugin) za Eclipse IDE naziva ADT
(eng. Android Development Tools Plugin) koji omogućuje jednostavni pristup LogCatu, uređivaču
Dozvoljeni
znakovi u zapisu podatkovnih resursa su mala slova, brojevi, točka i podvlaka.
Prilikom prevođenja stvara se posebna klasa naziva R koja
sadrži identifikatore podatkovnih resursa za razliku od standardnih Java
podatkovnih resursa koji su referencirani po ključevima tipa String. Ova klasa
sastoji se od niza podklasa, svaka za različitu vrstu podataka.
4.5.1 Upotreba resursa u
kodu
Podaci se
u kodu pozivaju preko identifikatora sintaksama R.resource_type.resource_name ili android.R.resource_type.resource_name
pri eemu nije potrebno navoditi ime paketa. Resource_type je
podklasa koja sadrži određenu vrstu podatkovnog resursa, a resource_name je ime
resursovog atributa definiranog u XML datoteci ili ime datoteke, bez sufiksa,
za podatkovne resurse definirane od strane nekog drugog podatkovnog tipa.
Razlika između ove dvije spomenute sintakse je u tome što se sintaksa android.R.resource_type.resource_name koristi za već postojeće podatkovne resurse u sustavu.
4.5.2 Upotreba resursa u drugim podatkovnim resursima
Podaci se mogu referencirati i iz drugih resursa (npr.
XML datoteke). Ovo se ponajviše
koristi prilikom izrade stilova i datoteka prikaza. Za referenciranje jednog resursa iz
drugog koristi se notacija @ u sintaksi
koristi prilikom izrade stilova i datoteka prikaza. Za referenciranje jednog resursa iz
drugog koristi se notacija @ u sintaksi
attribute="@[packagename:]resourcetype/resourceidentifier
".
4.5 Podatkovni resursi
Pod
pojmom podatkovnih resursa podrazumijevaju se vanjski podaci (slike, video,
teme, XML kod i
slično) koji se koriste u aplikaciji, a nisu dio programskog koda. Podatkovni
resursi u aplikacijskom paketu smješteni su u vlastitom direktoriju pod nazivom
res/. Ovo
odjeljivanje se prvenstveno radi zbog lakšeg upravljanja, ažuriranja i
manipulacije podacima. Podatkovni resursi prevode se pomoću alata AAPT ovisno o
tipu i poddirektoriju u kojem se nalaze. Ovisnost tipa podatkovnog resursa i
lokacije u paketu prikazana je u tablici 4.2.
Važno je
napomenuti da se XML datoteke pretvaraju u binarni zapis kako bi se zbog veće
efikasnosti mogle brže učitati.
yle='f� s z �X ��W line-height:115%;
mso-fareast-font-family:"Times New Roman";mso-fareast-theme-font:minor-fareast;
mso-ansi-language:EN-US;mso-fareast-language:HR;mso-bidi-language:AR-SA'>- alati za prevođenje i debagiranje. Najznačajniji je
programski dodatak (eng. plugin) za Eclipse IDE naziva ADT
(eng. Android Development Tools Plugin) koji omogućuje jednostavni pristup LogCatu, uređivaču
4.5.3 Upotreba sistemskih resursa
Odnosi se
na upotrebu resursa koje već koriste neke izvorne aplikacije. Korištenje ovih
podatkovnih resursa sli no je korištenju vlastitih resursa s razlikom da im se
pristupa u klasi android.R.
5. Povezivanje s poslužiteljem
Komunikacija
pokretnog uređaja i udaljenog poslužitelja odvija se na razini arhitekture
klijent - poslužitelj (eng. Client - Server).
Postoje razli iti na ini kojima se može ostvariti
komunikacija između klijenta i poslužitelja.
Izbor
određene kombinacije protokola i na ina povezivanja ovisi o
vrsti usluge.
Razmatranje na ina povezivanja zapo et ć emo na transportnom
sloju usporedbom protokola UDP (eng. User Datagram
Protocol) i TCP (eng. Transmission Control Protocol). Transportni
sloj rješava nedostatke IP (eng. Internet Protocol) sloja.
Sadrži rješenja za kontrolu pogrešaka i kontrolu toka. Izbor protokola
transportnog sloja određuje se ovisno o korisnikovim zahtjevima. Transportni
sloj omogućava više transportnih veza preko jedne mrežne veze tzv.
multipleksiranje. Takvu konekciju definiraju dvije priključnice (eng. socket) koje se
sastoje od tri parametara: vrste protokola (UDP ili TCP), IP adrese i broja
vrata (eng. port).
Nakon transportnog sloja
promatrat ć emo povezivanje korištenjem protokola aplikacijskog sloja,
konkretno HTTP (eng. Hyper Transfer Protocol) konekciju u sklopu čega ćemo obradit parsiranje
jednostavnog XML dokumenta koji se nalazi na udaljenom poslužitelju.
5.1 Protokol UDP
UDP je
standardni Internetski protokol opisan u specifikaciji RFC 768. To je jednostavni protokol koji
osigurava beskonekcijski orijentiranu uslugu s nepouzdanim prijenosom podataka,
bez kontrole toka i kontrole zagušenja. Paketi nisu numerirani, a zaštitna suma
u zaglavlju nije obavezna tako da se ne vrši provjera pogreške prilikom
prijenosa. O pouzdanosti prijenosa, ako je potrebno, brine sama aplikacija.
Ukoliko iz nekog razloga dođe do odbacivanja paketa, ne vrši se dojava o
grešci. UDP protokol zapravo služi kao omotač (eng. wrapper) između
aplikacije i IP protokola.
5.1.1
Aplikacija koja koristi UDP komunikaciju
U
nastavku je prikazan primjer jednostavne UDP komunikacije Android klijenta s
udaljenim poslužiteljem. Aplikaciju čine dvije klase: klasa aktivnosti UDPConnection i klasa
koja predstavlja klijent. Klijent je u mogućnosti poslati i primiti jedan UDP
paket. Za potrebe testiranja aplikacije UDP poslužitelj ostvaren je pomoću
programa netcat na udaljenom poslužitelju sintaksom nc -u -l -p 6666.
5.2 Protokol TCP
TCP je
standardni konekcijski orijentirani Internetski protokol opisan u osnovnoj
specifikaciji RFC 793. Osigurava uspostavu konekcije i dvosmjerni prijenos
kontinuiranog niza podataka pakiranjem okteta podataka u segmente koje prenosi
protokol mrežnog sloja. Svakom oktetu dodjeljuje se slijedni broj (eng. sequence number) č ime se osigurava retransmisija podataka u slučaju gubitka ili pogrešnog prijenosa na principu potvrde prijama
ispravnog okteta na prijamnoj strani. Također, omogućava simultano korištenje
od strane više procesa definiranjem dodatne adresne informacije tzv. broja
vrata (eng. port number) koji jednoznačno određuje IP korisnika.
5.2.1 Aplikacija koja koristi TCP komunikaciju
U
nastavku je prikazan kod jednostavne TCP komunikacije Android klijenta s udaljenim poslužiteljem. Klijent šalje i
prima po jedan paket podataka.
Za
potrebe testiranja aplikacije TCP poslužitelj ostvaren je pomoću programa netcat na udaljenom poslužitelju
sintaksom nc -l -p 6666.
Fo� y e ��W � X lang=EN-US style='font-size:11.0pt'>(eng. User Datagram
Protocol) i TCP (eng. Transmission Control Protocol). Transportni
sloj rješava nedostatke IP (eng. Internet Protocol) sloja.
Sadrži rješenja za kontrolu pogrešaka i kontrolu toka. Izbor protokola
transportnog sloja određuje se ovisno o korisnikovim zahtjevima. Transportni
sloj omogućava više transportnih veza preko jedne mrežne veze tzv.
multipleksiranje. Takvu konekciju definiraju dvije priključnice (eng. socket) koje se
sastoje od tri parametara: vrste protokola (UDP ili TCP), IP adrese i broja
vrata (eng. port).
Nakon transportnog sloja
promatrat ć emo povezivanje korištenjem protokola aplikacijskog sloja,
konkretno HTTP (eng. Hyper Transfer Protocol) konekciju u sklopu čega ćemo obradit parsiranje
jednostavnog XML dokumenta koji se nalazi na udaljenom poslužitelju.
5.2 Protokol TCP
TCP je
standardni konekcijski orijentirani Internetski protokol opisan u osnovnoj
specifikaciji RFC 793. Osigurava uspostavu konekcije i dvosmjerni prijenos
kontinuiranog niza podataka pakiranjem okteta podataka u segmente koje prenosi
protokol mrežnog sloja. Svakom oktetu dodjeljuje se slijedni broj (eng. sequence number) č ime se osigurava retransmisija podataka u slučaju gubitka ili pogrešnog prijenosa na principu potvrde prijama
ispravnog okteta na prijamnoj strani. Također, omogućava simultano korištenje
od strane više procesa definiranjem dodatne adresne informacije tzv. broja
vrata (eng. port number) koji jednoznačno određuje IP korisnika.
5.2.1 Aplikacija koja koristi TCP komunikaciju
U
nastavku je prikazan kod jednostavne TCP komunikacije Android klijenta s udaljenim poslužiteljem. Klijent šalje i
prima po jedan paket podataka.
Za
potrebe testiranja aplikacije TCP poslužitelj ostvaren je pomoću programa netcat na udaljenom poslužitelju
sintaksom nc -l -p 6666.
Fo� y e ��W � X lang=EN-US style='font-size:11.0pt'>(eng. User Datagram
Protocol) i TCP (eng. Transmission Control Protocol). Transportni
sloj rješava nedostatke IP (eng. Internet Protocol) sloja.
Sadrži rješenja za kontrolu pogrešaka i kontrolu toka. Izbor protokola
transportnog sloja određuje se ovisno o korisnikovim zahtjevima. Transportni
sloj omogućava više transportnih veza preko jedne mrežne veze tzv.
multipleksiranje. Takvu konekciju definiraju dvije priključnice (eng. socket) koje se
sastoje od tri parametara: vrste protokola (UDP ili TCP), IP adrese i broja
vrata (eng. port).
Nakon transportnog sloja
promatrat ć emo povezivanje korištenjem protokola aplikacijskog sloja,
konkretno HTTP (eng. Hyper Transfer Protocol) konekciju u sklopu čega ćemo obradit parsiranje
jednostavnog XML dokumenta koji se nalazi na udaljenom poslužitelju.
Nema komentara:
Objavi komentar