subota, 21. lipnja 2014.

Android

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.
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

U Android SDK uključen je emulator pokretnog uređaja koji omogućava razvoj i testiranje aplikacija. Jedino ograničenje emulatora je nemogućnost uspostave dolaznih i odlaznih poziva. Korištenjem ADT-a kao programskog dodatka za Eclipse emulator se automatski poziva prilikom izvođenja i procesa pronalaženja i uklanjanja programskih pogrešaka.


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
attribute="@[packagename:]resourcetype/resourceidentifier ".


1.� p m ��W � X t-language:HR'>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
 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