Professional Documents
Culture Documents
Izrada Android Aplikacije
Izrada Android Aplikacije
UVOD U ANDROID
Vano je razumeti sledee osnovne koncepte u vezi sa Android app framework-om:
Aplikacije omoguavaju viestruke take pristupa (entry points)
Android aplikacije su napravljene kao kombinacija razliitih komponenti koje mogu
biti posebno pozivane. Na primer:
aktivnost (activity) obezbeuje jedan ekran za korisniki interferjs
service nezavisno radi u pozadini
Iz jedne komponente se moe pozivati druga koristei intent.
Svaka app ima vie ulaznih taaka, pa je bilo koja druga app moe pozvati na razne
naine.
Aplikacije se prilagoavaju razliitim ureajima
Na primer, mogu se kreirati razliiti XML layouti za razliite veliine ekrana
mogu se deklarisati osobine app tako da Google Play Store ne doputa
instalaciju na ureajima koji ne podravaju tu osobinu
APPLICATION FUNDAMENTALS
Android program je napisan u Javi. Android SDK ga kompajlira i dobija se APK (Android
Package). To je fajl sa ekstenzijom .apk, koji se koristi za instaliranje programa.
Kada se instalira, svaka Android app ivi u sopstvenom sandbox-u.
Android je multi korisniki OS u kome svaka aplikacija je poseban user.
Sistem dobeljuje svakoj aplikaciji jedinstveni Linux user ID, koji je poznat samo
sistemu, a ne i aplikaciji. Sistem postavlja dozvole za sve fajlove u aplikaciji
tako da samo user ID dodeljen aplikaciji ima pravo pristupa.
Svaki proces ima sopstvenu virtualnu mainu (VM), tako da aplikacijski kod radi
nezavisno od drugih aplikacija
Po defoltu, svaka app radi u svom Linux procesu. Android startuje proces kada
bilo koja komponenta programa treba da se izvri, a iskljuuje ga kada vie nije
potreban ili kada sistem mora da obezbedi memoriju za druge aplikacije
Dakle, po defoltu, aplikacija moe da pristupi samo onim komponentama koje su
zahtevane za njen rad i nijednoj vie. To stvara vrlo sigurno okruenje u kome aplikacija
ne moe pristupiti delu sistema za koje nema dozvolu.
Jo jednom, svaka Android aplikacija se izvrava u izolovanom (eng. sandbox)
okruenju. To znai da je svaka aplikacija izolovana od svih drugih aplikacija na ureaju i
da ne moe da pristupa resursima ureaja bez eksplicitne dozvole korisnika. To je
obezbeeno tako to svaka aplikacija dobija zaseban korisniki ID (eng. User ID, preuzet
iz Linuksa). Svaka aplikacija dobija zasebnu virtualnu mainu to obezbeuje jo jedan
nivo izolovanosti. Takoe, svaka aplikacija se izvrava u odvojenom Linuks procesu. Taj
proces se pokree svaki put kada bilo koji deo aplikacije mora da se izvri, nakon ega se
taj proces gasi kada vie nije neophodan, ili kada sistem zahteva memoriju za drugu
aplikaciju.
(Postoji nain da se app-e podese da rade sa istim Linux user ID-om i da dele resurse,
pa i istu VM. Takoe app moe da radi i da sistemskim dozvolama, a o tome se vie moe
proitati u jednom od treninga na ovom sajtu, u delu Working with System Permissions)
U nastavku priae se o
App komponentama
Manifest fajl-u
App resursima
activities - aktivnosti
services - servisi
content providers dobavljai sadraja
broadcast receivers prijemnici poruka
Activities
Jedna aktivnost predstavlja jedan ekran u korisnikom interfejsu. Na primer, neka
email aplikacija moe imati jednu aktivnost koja prikazuje listu novih mejlova, drugu
aktivnost koja kreira novi mejl i treu aktivnost za itanje mejlova. Iako aktivnosti
sarauju, svaka je nezavisna od drugih. Takoe, druga app moe startovati bilo koju od
ovih aktivnosti (ako email app to doputa). Na primer, camera app moe startovati
aktivnost (iz email app) koja sastavlja novi mejl, da bi njime poslao sliku.
Sktivnosti su implementirane kao podklasa od Activity klase. U ovom tjutorijalu ima
detaljnije o aktivnostima, pod stavkom Activities
Aktivnost (eng. Activity) - klasa koja predstavlja jedan ekran aplikacije. Nju je mogue
pokrenuti na vie naina priemu je jedan od njih i samo pokretanje aplikacije iz glavnog
menija. Svaki ekran koji postoji u aplikaciji mora naslediti klasu Aktivnosti.
Services
Servis je komponenta koja radi u pozadini da bi izvrila operacije koje dugako taju ili
da bi izvrila posao za udaljene procese. Servis ne obezbeuje korisniki interfejs. na
primer, servis moe putati muziku u pozadini dok je korisnik u drugoj app, ili moe
prikupljati podatke preko mree bez blokiranja trenutne interakcije izmeu korisnika i
tekue aktivnosti. Druga kompontenta, npr aktivnost, moe startovati servis i ostaviti ga
da radi ili se povezati sa njim da bi ostvarila neku saradnju sa njim.
Service je implementiran kao podklasa klase Service. U ovom tjutorijalu ima detaljnije
o servisima, pod stavkom Services
Servis (eng. Service) - je komponenta koja se izvrava u pozadini. Ona nema korisniki
interfejs i najee se koristi za neke procese koji se dugo izvravaju. Ti procesi mogu biti
na primer sluanje muzike dok je neka druga aplikacija u prvom planu, ili sinhronizacija
aplikacije sa serverom dok aplikacija nije pokrenuta. Servise je mogue pokrenuti na
nekoliko naina, a jedan je iz klase Aktivnosti sa kojom moe i da komunicira.
Content providers dobavljai sadraja
Ova vrsta komponente upravlja podacima apllkacije. Podaci mogu biti smeteni u fajlu,
u SQLite bazi, na vebu ili na nekoj drugoj memoriji kojoj app moe pristupiti. Kroz content
provider i druge apps mogu itati ili ak modifikovati podatke (ako content provider
dozvoljava modifikovanje) Npr. Android obezbeuje content provider koji upravlja
korisnikovim kontakt informacijama. Tako bilo koja aplikacija sa odgovarajuim dozvolama
moe koristiti deo content providera (npr. CoontactsContract.Data) za itanje i upis
podataka o pojedinanoj osobi.
Content provider-i su takoe korisni za prisup podacima koji su privatni za app i ne
dele se sa drugima. Npr. NotePad sample app koristi content provider za uvanje
napomena.
Pozivanje komponenti
Android sistem je dizajniran tako da se svaka app startuje sa svojim komponentama.
Npr, ako eli da korisnik napravi sliku kamerom, verovatno postoji druga app koja radi to
itvoja app moe to iskoristiti, umesto da se kod pie ponovo.ak ne mora ni da se pie, ni
kopira kod. Trega jednostavno startovati aktivnost koja pravi slike u camera app. Kada se
zavri slika se dostavlja tojoj app i moe je koristiti. Za korisnika, to je kao da je camera
sastavni do app.
Kada sistem startuje komponentu on inicira sve klase neophodne za komponentu i ona
radi u svom procesu, a ne u procesu aplikacije koja je zove.
Poto svaka app radi u svom procesu, app ne moe direktno aktivirati komponentu iz
druge app. Ali Android sistem moe. Tako, da bi se aktivirala komponenta u drugoj app,
morate proslediti poruku sistemu u kojoj se nalazi intent da se startuje odreena
komponenta. Sistem onda aktivira komponentu za tebe.
Manifest fajl
Pre nego to Android sistem pokrene komponentu, sistem mora znati da ta
komponenta postoji isitavanjem manifest fajla. Ovaj fajl AndroidManifest.xml mora biti u
rutu direktorijuma u kome je smeten projekat.U njemu se moraju deklarisati sve
komponente koje projekat koristi.
Osim toga, nakon deklarisanja komponenti u manifestu se radi i sledee:
Identifikovanje svih korisnikih privilegija koje aplikacija zahteva (npr. pristup
internetu ili itanje tj izmena korisnikovih kontakta)
deklarisanje minimum API Level koji zahteva aplikacija (miminalna verzija
operativnog sistema)
deklarisanje osobina hardvera i softvera koje su zahtevane od strane aplikacije
(npr. kamera, blutut servis, multita skrin...)
API biblioteke koje su potrebne aplikaciji (a nisu u Android framework API-ju),
npr Google Maps library
i tako dalje
Deklarisanje komponenti
Primarni zadatak manifesta je da informie sistem o aplikacijskim komponentama. Na
primer, manifest moe sadrati ovkvu deklaraciju aktivnosti
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:icon="@drawable/app_icon.png" ... >
<activity android:name="com.example.project.ExampleActivity"
android:label="@string/example_label" ... >
</activity>
...
</application>
</manifest>
Tako, ako druga aplikacija kreira intent sa ACTION_SEND akcijom i prosledi je preko
startActivity(), sistem moe startovati gore definisanu aktivnost tako da je korisnik moe
birati i poslati emanil.
Sada, ureaj koji nema camera, i koji ima Android verziju manju od 2.1 ne moe
instalirati aplikaciju sa Google Play-a.
Meutim, takoe je mogue deklarisati da app koristi camera, ali da je ne zahteva. U
tom sluaju aplikacija mora setovati atribute required na false i ispitivati u run time da li
ureaj ima camera i disejblovati oprikladnu camera osobinu (?)
App Resources
Android aplikacija osim koda sdri i resurse koji su odvojeni od koda, kao npr. slike,
audio fajlove, i sve povezano sa visualnom presentacijom aplikacije. Na primer, mogue
je definisti animacije, menije, stilove, boje i nivo aktivnosti korisnikih interfejsa preko
XML fajla. Upotreba aplikacijskih resursa olakava apdejtovanje razliitih karakteristika
aplikacije, bez modifikovanja koda i kroz obezbeivanje skupova alternativnih resursadoputa optimizovanje aplikacije za razliite konfiguracije ureaja (npr. razliiti jezik i
veliina ekrana).
Za svaki resurs koji je ukljuen u Android projekat, SDK build tools definie jedinstveni
celobrojni ID, koji se moe koristiti da se pristupi resursu iz koda ili iz drugih resursa
definisanih u XML-u. Na primer, ako aplikacija sadri fajl sa slikom koji se zove logo.png
(sauvan u folderu res/drawable/ ), SDK generie resurs ID sa nazivom R.drawable.logo,
koji se moe koristiti da se pristupi slici i da se ona ubaci u korsniki interfejs.
Jedna od najvanijih prednosti odvajanja resursa i koda je mogunost da se obezbede
alternativni resursi za razliite konfiguracije ureaja. Na primer, definisanjem UI stringova
u XML-u, mogue je prevesti stringove na drugi jezik i sauvati te stringove u posebnom
fajlu. Tada, preko upotrebe jezikih qualifier-a moe se dodati ime direktorijumu resura
( npr. res/value-fr za stringove na francuskom jeziku) i korisniko podeavanje jezika, i
Android sistem e primeniti odgovarajui jezik za UI.
Android podrava mnogo razliitih qualifiers za alternativne resurse. Qualifier jekratki
string koji se ukljuuje u ime resurs direktorijuma da bi se definisala konfiguracija ureaja
za koje se koriste ti resursi. Npr. mogue je kreirati razliit layous za aktivnosti, zavisno od
orjentacije i veliine ekrana na ureaju.Pa ako je ekran na ureaju uspravan (tall), moe
se koristiti layout sa vertikalnim dugmadima, a ako je ekran poloen (wide), moe se
koristiti layout sa horizontalnim dugmiima. Da bi se layout menjao sa promenom
orijentacije,, treba definisati dva razliita layout-a i primeniti odgovarajui qualifier za
svaki naziv foldera za layout. Tad e sistem automatski da primeni odgovarajui layout u
zavisnosti od orijentacije ureaja