10/23/2012
Programiranje Android aplikacija -prvo predavanje-
Visoka škola elektrotehnike i računarstva strukovnih studija Beograd, 2012
Android • Softve Softversk rska a platfor platforma ma i operativ operativni ni sistem sistem za za mobilne mobilne uređaje • Bazi Bazira ran n na na Linu Linuxx kerne kernelu lu • Razvijen Razvijen od stran strane e Google-a Google-a a kasn kasnije ije od Open Open Handset Aliance (OHA) – OHA – organizacija čiji je glavni cilj razvoj otvorenih standarda za mobilne uređaje
• Moguć Mogućno nost st pisanja pisanja aplikacija aplikacija u upravljivo upravljivom m kodu kodu (managed code), tačnije u programskom jeziku Java
1
10/23/2012
Širenje Android sistema
http://metrics.admob.com/wp-content/uploads/2010/06/May-2010-AdMob-Mobile-Metrics-Highlights.pdf
Širenje Android sistema • 2012
2
10/23/2012
Android platforma • Kompletna end-to-end softverska platforma prilagodljiva velikom broju hardverskih konfiguracija • Sadrži sve: od bootloader-a pa sve do korisničkih aplikacija • Operativni sistem – Linux koji upravlja hardverskim resursima, procesima, memorijom i umrežavanjem
• Sledeći sloj su Android “native” biblioteke napisane u C/C++, a koje se pozivaju kroz Java interfejse. Ovde spadaju Surface Manager, 2D i 3D grafika, Media codecs, SQL baza (SQLite), i native web browser engine (WebKit).
Sigurnost • Prati standardne Linux smernice: – Svaka aplikacija je pokrenuta u posebnom procesu (u okviru kojeg je podržana višenitnost) – Dozvole koje ima proces se definišu za korisnika ili grupu (User ID ili Group ID) – Detaljnije dozvole se definišu prema operacijama • Korišćenje interneta, pozivi, slanje SMS-a, uvid u imenik, korišćenje GPS-a ...
O ovom XML-u biće reči kasnije...
3
10/23/2012
Android platforma
Kako se pokreće Java ? • Dalvik Virtual Machine • Deo Android platforme • Optimizovana za rad sa manjom memorijom i dizajnirana da omogući pokretanje više instanci u isto vreme, oslanjajući se na operativni sistem koji omogućava izolaciju procesa, upravljanje memorijom i podršku za niti. • Dalvik nije isto što i JVM: njen bytecode nije isti kao Java bytecode. Java klase kompajlirane regularnim Java kompajlerom se transformišu u drugi format: .dex • Dex datoteke se komprimuju u jedinstvenu .apk datoteku i smeštaju u memoriju uređaja.
4
10/23/2012
Razvoj aplikacija • Zahtevi – Java – SDK – Razvojno okruženje (opciono) – npr. Eclipse
• Programski jezici – Java – zvanično podržana – C/C++ - takođe moguće ali nije podržano
Razvojno okruženje (IDE) i SDK Android SDK
• Class Library • Developer Tools dx – Dalvik Cross-Assembler aapt – Android Asset Packaging Tool adb – Android Debug Bridge ddms – Dalvik Debug Monitor Service • Emulator i System Images • Dokumentacija i primeri
Eclipse IDE + ADT (Android Development Tools)
• Smanjuje vreme razvoja i testiranja • Olakšava kreiranje korisničkog interfejsa • Olakšava opisivanje aplikacija
5
10/23/2012
Gradivni blokovi aplikacije • Sve aplikacije su napisane u jeziku Java i dostupne su jedna drugoj • Svaka aplikacije može da “objavi” svoje mogućnosti koje druge aplikacije mogu da korsite Activity Manager upravlja
Notification Manager omogućava
životnim ciklusom aplikacije i omogućava navigaciju između njenih delova
aplikacijama da objave poruke u statusnoj liniji Resource Manager omogućava pristup
Views kao što su Button, Text
box, grid, liste pa čak i ugrađeni web pretraživač
resursima kao što su lokalizovani stringovi, grafika, dizajn kor. Interfejsa...
Content Providers omogućavaju
aplikacijama pristup podacima iz drugih ap., kao i da podele svoje podatke
Gradivni blokovi aplikacije - nastavak Broadcast receivers mogu da
pokrenu aplikaciju – reagovanje na neki događaj Data storage podaci za aplikaciju: datoteke u
lokalnom sistemu datoteka, baza (SQLite). Moguće je deljenje tih podataka između aplikacija
Sve aplikacije imaju istu strukturu
6
10/23/2012
Activity - aktivnost • Obično odgovara jednom UI ekranu • Ali može: – Biti bez korisničkog interfejsa (faceless) – Da bude u lebdećem prozoru (widget) – Da vrati neku vrednost (pri vraćanju na prethodnu aktivnost)
• Aktivnost može da prikaže neki UI i da mu da funkcionalnost: događaji, izmena prikaza UI, poziv za pokretanje druge aktivnosti...
Životni ciklus aktivnosti
7
10/23/2012
Životni ciklus aktivnosti • Kao što se vidi na dijagramu aktivnost može biti pauzirana, pa čak i prekinuta ukoliko je sistemu potrebna memorija. • Svi podaci koji su u tom trenutku bili u memoriji mogu biti izgubljeni • Postoji mehanizam da se oni sačuvaju i ponovo vrate “na svoje mesto” nakon ponovnog pokretanja aktivnosti
IntentReceivers • Komponente koje odgovaraju na “broadcast Intents” • Ovo je način na koji se odgovara na poruku ili alarm koji dolazi spolja (van aplikacije) • Aplikacija može da ima svoj Intent i da ga objavi
8
10/23/2012
Intents • Intent – namera da se nešto uradi – Npr: VIEW, CALL, PLAY ...
• Sistem upoređuje Intent sa aktivnošću koja najbolje odgovara zahtevu • Activities i IntentReceivers opisuju koje namere (Intents) mogu da opsluže
Intents - nastavak Home
Picasa Photo Gallery
Contacts
GMail
“Pick photo”
Klijentska komponenta zahteva određenu akciju Sistem bira najbolju komponentu za tu akciju
Chat
Nove komponente mogu da koriste postojeće funkcionalnosti
Blogger Blogger
Intents se između ostalog koriste da bismo iz jedne aktivnosti pokrenuli drugu aktivnost unutar jedne aplikacije. Pored toga moguće je proslediti podatke drugoj aktivnosti, koja na kraju može da vrati neki drugi podatak.
9
10/23/2012
Servisi • Komponente koje se izvršavaju u pozadini – Nemaju UI – Aplikacije poput muzičkog plejera, programa za skidanje sadržaja sa interneta, itd.
Android Emulator • • • • • • •
Dolazi sa instalacijom Android SDK SDK & AVD Manager Izvršava se isti “image“ koji je na uređajima Izbor verzije OS-a (1.6, 2.1...) Izbor veličine ekrana, memorije Internet, pozivi i SMS između dva emulatora Prima informacije od simulatora iz razvojnog okruženja (npr. GPS koordinate) • Ograničenje – nema kamere – postoji generisana slika, ali u novijim emulatorima postoji mogućnost povezivanja sa USB web kamerom
10
10/23/2012
Razvojno okruženje • Pogodno za brz razvoj aplikacija, organizaciju programskog koda, debug, interakciju sa emulatorom i pravim uređajem • Struktura Android projekta: code Autogenerated resource list
files images
UI layouts constants
Razvojno okruženje • Debug je moguć kada se koristi emulator, ali i pravi uređaj! • Uređaj treba postaviti u Debug mode – Settings->Applications->Development->USB Debugging
• Pri pokretanju aplikacije iz okruženja izabrati iz liste prethodno priključen uređaj i tada će se aplikacija pokrenuti na njemu nakon čega je spremna za korišćenje i prekidanje na breakpoint-ima
11
10/23/2012
AndroidManifest.xml
AndroidManifest.xml - nastavak • Ova datoteka opisuje aplikaciju – Moraju se definisati sve aktivnosti koje će se eventualno pozvati u aplikaciji – Moraju se definisati sve dozvole koje će se ponuditi korisniku za odobravanje
12
10/23/2012
Korisnički interfejs • Definiše se pomoću – XML-a – Java programskog koda
• Eclipse okruženje pruža mogućnost vizuelnog definisanja kor. interfejsa, a rezultat je XML koji se smešta u folder res/layout • Postoji određen broj vizuelnih komponenti koje su predefinisane, a moguće je kreirati i sopstvene, složene komponente koje su sastavljene od proizvoljnog broja predefinisanih. – Mogu se podeliti na • komponente koje određuju raspored na ekranu • komponente koje služe za interakciju sa korisnikom
Korisnički interfejs - nastavak • Osnovna komponenta je View koja je predstavljena Java klasom i iz koje se izvode sve komponente koje čine UI.
13
10/23/2012
Korisnički interfejs - View
Korisnički interfejs – raspored • Određuje se izborom odgovarajućeg Layout-a – – – – –
AbsoluteLayout LinearLayout RelativeLayout FrameLayout TableLayout...
• Svaki od navedenih ima svoje specifičnosti u pogledu raspoređivanja kontrola na ekranu • U XML-u mora da postoji bar jedan – root layout, u okviru koga se proizvoljno mogu ugnježdavati drugi layout-i ili postavljati kontrole
14
10/23/2012
Primer 1 UI
Primer 2 - UI
15
10/23/2012
Primer 2 - UI • U ovom primeru su korišćeni LinearLayout-i sa podešavanjima LayoutGravity i Gravity • Zadatak 1: – Napraviti jednostavan ekran za prijavu na sistem: • • • •
Tekst: Dobrodošli na ...prijavite se Dve tekstualne oznake Dva polja za unos Dugme “Prijava”
• Zadatak 2: – Ekran za ocenjivanje slike • • • •
Opis – tekstualna oznaka ImageView sa nekom slikom RatingBar Dugme za potvrdu
Zadatak 3 • Isprobati u Properties prozoru svojstva koja se mogu podešavati i videti efekat na ekranu • Visina i širina se mogu podešavati na nekoliko načina – brojčano • pixels – px • scaled pixels – sp – za tekst • density independent pixels – dp – za grafiku
– relativno • fill_parent • wrap_content
Biće još reči o dizajnu UI – sada možemo da pokrenemo aplikaiju i da vidimo rezultat... ili možda ne još?
16
10/23/2012
Prikaz UI • Aktivnost koja se pokreće kao početna mora da “zna” koji će UI da prikaže • Kada se to dešava? – u onCreate metodi koja će biti override • Na koji način se ukazuje baš na određeni XML? – Pogledati datoteku gen/ime_paketa/R.Java • R.Java je generisana klasa koja čuva reference na sve resurse koji postoje u projektu.
Prikaz UI - nastavak • Pozivajući metodu klase Activity setContentView i prosleđujući joj identifikator našeg ekrana prikazujemo UI. • Svaki View ima svoj ID koji ga jedinstveno identifikuje i omogućava pristup u kodu. • Novi zadatak: U metodi OnCreate programski promeniti tekst na nekom dugmetu – Kako pristupiti nekom dugmetu? • Ne postoji referenca na dugme sama po sebi, treba je dobiti od aktivnosti na sledeći način:
17
10/23/2012
Reagovanje na događaje • Slično kao u Java desktop programiranju – btn.SetOnClickListener(...neki Listener)
Zadatak • Napraviti jednostavan kalkulator koji ima displej, 2 polja za tekst (operandi), 4 osnovne računske operacije (dugmići) i dugme za izračunavanje i prikazivanje rezultata. – Voditi računa o • funkcionalnosti • izgledu UI
18