BAKALÁŘSKÁ PRÁCE Vývoj aplikací na platformě Android Application development for the Android platform Vojtěch Sázel
Un ico rn Co lle g e © 2 01 0 Un ico rn Co lle g e, V Ka pslo vně 2 76 7/ 2 , P ra ha 3, 13 0 0 0 Ná ze v p rá ce v ČJ: Ná ze v p rá ce v A J:
V ývo j ap lika cí n a p lat f o rmě A nd ro id A pp lica t ion d eve lop me n t f o r t he An d ro id p lat f o rm
A ut o r:
V o jtě ch S á ze l
A kad e mický ro k:
2 00 9/ 2 01 0
K on ta kt :
E -ma il: vo jte ch @ sa ze l. cz Te l. : (+4 2 0 ) 72 3 6 35 73 8
UCL Bachelor's Thesis Coordinator
UCL Zadání závěrečné bakalářské práce
Bachelor Thesis – Sázel Vojtěch
2009.10.14 - 17:56 - Sázel Vojtěch - Zadání BP - Vývoj aplikací na platformě Google Android (ZBP/20091014_003) Artefakt Zadavatel
DIT Zadání závěrečné bakalářské práce Student (Sázel Vojtěch)
ZADÁNÍ ZÁVĚREČNÉ BAKALÁŘSKÉ PRÁCE (ZBP) Název ZBP v češtině Název ZBP v angličtině Studijní obor Akademický rok Vedoucí závěrečné práce
Vývoj aplikací na platformě Google Android Application development for the Google Android platform ICT Project Management 2009/2010 Petr Maneth
Termín odevzdání Zadání ZBP
16.10.2009
Termín odevzdání práce ZBP
07.05.2010
Cíl závěrečné bakalářské práce CZ: Cílem práce je popsat mobilní platformu Android, její architekturu a API (Aplikační programové rozhraní) Posoudit výhody a nevýhody virtuálního stroje Dalvik pro jeho využití na mobilních zařízeních. Součástí práce je vzorová aplikace včetně zdrojových kódů. EN: The goal is to describe Android mobile platform, its architecture and API (Application programming interface). Consider advantages and disadvantages of virtual machine Dalvik and its usage on mobile devices. This work contains also example application with source codes. Klíčová slova: Google, Android, Java, Dalvik, Linux
Základní literatura Ableson, F.,Collins, C., Robi, S.: Unlocking Android: A Developer's Guide, , Manning Publications, 2009 Rogers R., Lombardo, J., Mednieks, Z., Blake, M.: Android Application Development: Programming with the Google SDK, 1st edition, O'Reilly Media, 2009 Burnette, E.: Hello, Android: Introducing Google's Mobile Development Platform, 2nd edition, Pragmatic Bookshelf, 2009 © 2010 Unicorn College s.r.o.
Prohlá²ení Prohla²uji, ºe svou bakalá°skou práci na téma
Vývoj aplikací na platform¥ Android
jsem vypracoval samostatn¥ pod vedením vedoucího bakalá°ské práce a s pouºitím odborné literatury a dal²ích informa£ních zdroj·, které jsou v práci citovány a jsou téº uvedeny v seznamu literatury a pouºitých zdroj·. Jako autor uvedené bakalá°ské práce dále prohla²uji, ºe v souvislosti s vytvo°ením této bakalá°ské práce jsem neporu²il autorská práva t°etích osob, zejména jsem nezasáhl nedovoleným zp·sobem do cizích autorských práv osobnostních a jsem si pln¥ v¥dom následk· poru²ení ustanovení 11 a následujících autorského zákona £. 121/2000 Sb.
V Praze dne
...................................................... Jméno
iv
P°íjmení
Abstrakt Cílem práce je popsat mobilní platformu Android, její architekturu a API (Aplika£ní programové rozhraní). Posoudit výhody a nevýhody virtuálního stroje Dalvik pro jeho vyuºití na mobilních za°ízeních. Významnou £ástí je popis vývojového prost°edí, základních princip· vývoje aplikací pro Android a tvorby grackého uºivatelského rozhraní. V poslední £ásti práce jsou popsány r·zné moºnosti aplika£ního frameworku. Díky virtuálnímu stroji Dalvik je zaru£ena nezávislost aplikací na platform¥. Se systémem intent· m·ºe vývojá° snadno nahradit dodávané aplikace svými vlastními alternativami. Spolu se zdrojovými kódy vypracovaných p°íklad· p°iná²í £tená°i práce základní znalosti nutné k tomu, aby za£al s vývojem na této mobilní platform¥.
Klí£ová slova Google, Android, Java, Dalvik, aktivita, intent, poskytovatel obsahu, Linux
Abstract The goal is to describe Android mobile platform, its architecture and API (Application programming interface). Consider advantages and disadvantages of virtual machine Dalvik and its usage on mobile devices. The important part is description of development environment, key principles of application develoment for Androd and design of graphical user interface. Many interetsting capabilities of the application framework are described in the last part of the work. Due to the use of Dalvik virtual machine hardware independence is assured. Developer can also easily replace any supplied application with his own with use of intent system. The work brings the basic know-how of software developent on this mobile platform.
Keywords Google, Android, Java, Dalvik, activity, intent, content provider, Linux
v
Pod¥kování D¥kuji vedoucímu bakalá°ské práce Petrovi Manethovi za ú£innou metodickou, pedagogickou a odbornou pomoc a dal²í cenné rady p°i zpracování mé bakalá°ské práce.
Týmu integrace a validace terminál· z útvaru Správy T-Mobile Czech Republic a.s. za zap·j£ení mobilního telefonu
Také d¥kuji koleg·m z
sluºeb
spole£nosti
HTC Desire s opera£ním systémem Android pro ú£ely této práce.
vi
Obsah Úvod
1
1 Platforma Android
2
1.1
Architektura platformy . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Virtuální stroj Dalvik a p°eklada£ bytecode
4
. . . . . . . . . . . . . .
2 Základ pro tvorbu aplikací
7
2.1
Android SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2
Vývojové prost°edí Eclipse
8
2.3
. . . . . . . . . . . . . . . . . . . . . .
2.2.1
Tvorba nového projektu
. . . . . . . . . . . . . . . . . . . .
8
2.2.2
Lad¥ní aplikace . . . . . . . . . . . . . . . . . . . . . . . . .
9
Základní prvky prost°edí . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3.1
Aplikace, aktivita, sluºba a p°ijíma£ (Application, Activity, Service and BroadcastReceiver) . . . . . . . . . . . . . . . . . .
12
2.3.2
Intenty a intentové ltry (Intent)
14
2.3.3
Poskytovatel obsahu (Content Provider)
. . . . . . . . . . .
18
2.3.4
Manifest a bezpe£nostní omezení aplikací . . . . . . . . . . .
21
2.4
Nasazení aplikace a Android Market . . . . . . . . . . . . . . . . . .
22
2.5
Specika vývoje mobilních aplikací . . . . . . . . . . . . . . . . . . .
23
. . . . . . . . . . . . . . .
3 Návrh grackého uºivatelského rozhraní (GUI)
25
3.1
Zdroje (Resources) a jejich pouºití v kódu . . . . . . . . . . . . . . .
25
3.2
Rozvrºení (Layout)
. . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3
Prvky GUI
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.3.1
Text (TextView) a textové pole (EditText)
. . . . . . . . . .
30
3.3.2
Tla£ítko (Button) a listenery
. . . . . . . . . . . . . . . . .
31
3.3.3
Adaptérové prvky a adaptéry
. . . . . . . . . . . . . . . . .
32
3.3.4
Toust (Toast)
. . . . . . . . . . . . . . . . . . . . . . . . .
33
3.3.5
Notikace
. . . . . . . . . . . . . . . . . . . . . . . . . . .
34
vii
3.3.6
Tvorba nabídek . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.3.7
Dialogy . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.3.8
Dal²í prvky . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
4 Moºnosti aplika£ního frameworku
38
4.1
Funkce telefonního p°ístroje
. . . . . . . . . . . . . . . . . . . . . .
38
4.2
Sí´ové sluºby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.3
Multimediální funkce . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.4
Loka£ní sluºby, senzory a roz²í°ená realita . . . . . . . . . . . . . . .
38
4.5
SQLite
40
4.6
OpenGL ES
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.7
Android Native Development Kit (Android NDK) . . . . . . . . . . .
40
4.8
WebKit, HTML5 a tvorba mobilních webových aplikací . . . . . . . .
41
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Záv¥r
42
Conclusion
43
Seznam literatury a zdroj·
44
Slovník pojm· a zkratek
47
Slovník pojm· a zkratek
47
Seznam obrázk·
52
Seznam tabulek
53
A P°íloha - CD
54
B P°íloha - P°íklad souboru manifestu
54
viii
1
Úvod Opera£ní systém Android je mladou platformou ur£enou zejména pro provoz na mobilních za°ízeních. Android není jen opera£ním systémem, ale celou platformou pro vývoj mobilních aplikací. Uºivateli nabízí velkou míru svobody ve tvorb¥ aplikací a p°ístupu k funkcím za°ízení p°es standardizované aplika£ní programové rozhraní (API). Tato práce je zam¥°ena na vývoj aplikací na této platform¥ a popis architektury systému. Proberu zde odli²nosti návrhu aplikací pro mobilní za°ízení od vývoje na klasickém osobním po£íta£i. Sou£ástí práce jsou i krátké p°íklady pro ilustraci r·zných vlastností systému. ást práce je zam¥°ena také na unikátní virtuální stroj Dalvik, který zaji²´uje b¥h aplikací na platform¥ Android. Práce je svým rozsahem a zam¥°ením ur£ena hlavn¥ k orientaci v platform¥ Android a v jednotlivých oblastech nezachází do velkých detail·. Od £tená°e se o£ekává základní orientace v problematice vývoje software, ov²em p°ípadné neznámé pojmy jsou vysv¥tleny ve slovníku pojm· a zkratek, který je sou£ástí práce.
1 PLATFORMA ANDROID
2
1 Platforma Android Systém Android vznikl ve spole£nosti Android, Inc., která byla v roce 2005 p°evzata spole£ností Google, Inc. Google se nadále podílel na vývoji a v roce 2007 byla zaloºena Open Handset Alliance (OHA), sdruºující Google, r·zné mobilní operátory, výrobce hardwaru a dal²í rmy, které nadále tento systém v sou£asnosti vyvíjí. Android jako takový je pod open-source licencemi, coº umoº¬uje jednotlivým spole£nostem i jednotlivc·m snadné úpravy v systému, bez nutnosti dokupování dal²ích licencí £i patent·. Jinak je také Android ozna£ován jako Android Open Source Project (AOSP) [1]. První komer£n¥ dostupný telefon pro tuto platformu byl v roce 2008 spole£ností T-Mobile uveden telefon T-Mobile G1
1
[2], vlastní telefon byl vyrobený spole£ností
HTC. Tento a dal²í podobné telefony uvedené v roce 2009 jsou ozna£ovány za první generaci za°ízení Android. Na t¥chto za°ízeních je moºné se setkat zejména s Androidem ve verzích 1.x. Po£et za°ízení na této platform¥ se za£al rychle roz²i°ovat a v roce 2010 nastoupila druhá generace za°ízení s verzemi Android 2.x a výkonnými ARMovými procesory Qualcomm architektury Snapdragon taktovanými minimáln¥ na 1GHz. Android lze nalézt nejen v mobilních telefonech, ale také v tabletech, netboocích, £te£kách elektronických knih a dal²ích za°ízeních [3].
1.1 Architektura platformy Základem Androidu je jádro Linuxu, které je dnes nej£ast¥ji pouºívaným open-source jádrem opera£ního systému. Obsahuje ovlada£e nutné ke komunikaci s hardwarem za°ízení. Jádro je navíc upraveno a obohaceno o specické v¥ci jako je mezi-procesová komunikace speciální sdílená pam¥´
ashmem, low-memory killer,
binder,
specický power management a
dal²í [4]. Tyto prvky jsou pro Android specické a pot°ebné pro provoz na za°ízeních s omezenou opera£ní pam¥tí a mén¥ výkonnými procesory (CPU). Na obrázku 1 je vyzna£ena tato £ást jako
Linux Kernel.
Druhou vrstvou jsou systémové knihovny. Mezi n¥ pat°í klasické dynamicky
2
linkované knihovny 1 téº
3
p°eloºené v nativním
kódu daného CPU, které implementují
znám jako HTC Dream se o známé soubory koncovkou .so 3 nativní = vlastní pro danou platformu, specický pro daný systém a procesor 2 jedná
1 PLATFORMA ANDROID
3
Obrázek 1: High-level pohled na architekturu Androidu [1]
aplika£ní rozhraní nad voláními linuxového jádra. Zejména sem pat°í standardní knihovny jazyka C (libc), gracké knihovny (SGL, OpenGL ES, Surface Manager), knihovny pro práci s multimédii (kodeky a Media Framework), knihovny pro práci s databází (SQLite), knihovna pro vykreslování TrueType font· (FreeType), jádro webového prohlíºe£e (WebKit) a knihovna pro ²ifrovanou sí´ovou komunikaci (SSL). Tato £ást je na obrázku 1 ozna£ena jako
Libraries.
Dal²í £ástí je vlastní b¥hové prost°edí Androidu a tím je virtuální stroj Dalvik. Virtualizace zaji²´uje nezávislost b¥ºících aplikací na hardwaru. Na obrázku 1 je ozna£eno jako
Android Runtime
a podrobn¥ji ho proberu v kapitole 1.2.
Nad Dalvikem a systémovými knihovnami je aplika£ní framework Androidu
Application Framework ).
(
Obsahuje pot°ebné t°ídy a rozhraní pro stavbu aplikací na
vy²²í úrovni, která je platformn¥ nezávislá. N¥které £ásti aplika£ního frameworku jsou p°ímo jen obalením volání systémových knihoven pomocí nativních volání
4
. Vlastní
aplika£ní framework je napsaný v programovacím jazyce Java, p°eloºený do kódu virtuálního stroje Dalvik a je uloºený p°ímo na daném za°ízení. Jednotlivé aplikace se pak jiº p°ímo pí²í v aplika£ním frameworku. Jsou v n¥m napsány i v²echny aplikace, které jsou standardn¥ se systémem dodávány. Na obrázku 1 se jedná o £ást
Applications.
Je d·leºité si uv¥domit, ºe Android nelze povaºovat za klasickou linuxovou dis4 JNI
- Java Native Interface
1 PLATFORMA ANDROID
4
tribuci, b¥ºným zp·sobem na n¥m nelze spou²t¥t linuxové programy a p°istupovat p°ímo k nízkoúrov¬ovým funkcím systému. Gracký systém není kompatibilní s linux-
user-space )
ovým X serverem. P°ístup do systému je omezen na uºivatelský p°ístup (
a to p°es aplika£ní framework, p°ípadn¥ JNI volání, která ov²em podléhají omezení v uºivatelském p°ístupu. Na v¥t²in¥ za°ízení je v²ak moºno získat superuºivatelské oprávn¥ní (tzv.
root )
a díky n¥mu je moºné pln¥ vyuºít moºností, které poskytuje
linuxový systém. Tato moºnost v²ak není v¥t²inou podporována výrobci hardware.
1.2 Virtuální stroj Dalvik a p°eklada£ bytecode Jedním ze základních princip· Androidu je nezávislost aplikací na hardware, zejména pak na instruk£ní sad¥ pouºitého procesoru. Díky tomu je moºné nap°íklad provozovat stejné aplikace pro Android na procesoru ARM, tak na architektu°e x86. Samoz°ejm¥ to platí pokud v aplikaci není pouºito nativních knihoven, které by se musely p°ekládat pro kaºdou architekturu zvlá²´. Toho je docíleno pomocí virtuálního stroje Dalvik, na
5
kterém b¥ºí v²echny aplikace .
6
Virtuální stroj je v podstat¥ softwarovou simulací procesoru
s vlastní instruk£ní
sadou. Tak jak jsou programy p°ekládány p°eklada£em ze zdrojového kódu ve vy²²ím
machine
programovacím jazyce do instrukcí strojového kódu fyzického procesoru (
code ,
nap°. ARM nebo x86), jsou p°ekládány programy do instrukcí kódu virtuál-
ního stroje, tyto instrukce jsou ozna£ovány jako
bytecode.
Bytecode je pak p°i b¥hu
programu interpretován virtuálním strojem. Pouºitím virtuálního stroje se Android zna£n¥ odli²uje od n¥kterých jiných mobilních opera£ních systém· jako Symbian nebo iPhone OS, které vyuºívají p°ímé kompilace aplikací do strojového kódu daného procesoru [5] [6]. Naopak se více podobá zab¥hlému Java ME , pouºívanému na velké £ásti jednoduchých mobilních telefon·, který také pouºívá virtuálního stroje. Oproti n¥mu je v²ak komplexn¥j²í a poskytuje daleko více moºností. V p°ípad¥ Androidu se pro vývoj aplikací pouºívá programovacího jazyka Java.
7
Aplika£ní framework není kompatibilní s Java ME , ale pokrývá £ást Java SE pouºívanou na b¥ºných po£íta£ích. Zdrojový kód se p°ekládá standardním p°eklada£em dodávaným s Java SE SDK, vzniklý bytecode je pro virtuální stroj Java VM, není v²ak kompatibilní s Dalvikem [9]. Dalvik vyuºívá vlastní sadu instrukcí a kód je uloºen 5 výjimkou
jsou pouze systémové a podp·rné procesy Linuxu, které b¥ºí mimo Dalvik ani neexistuje jeho skute£ná fyzická (hardwarová) implementace 7 portování (p°enos) Java ME aplikací nebo jejich spou²t¥ní v Androidu lze dosáhnout mnoha zp·soby, nap°. p°es Micro Emulator nebo Android J2ME Runner [7][8] 6 £asto
1 PLATFORMA ANDROID
5
ve specickém DEX formátu, do kterého je konvertován nástrojem
dx, který je sou£ástí
Android SDK (více v kapitole 2.1) [10]. Instruk£ní sada Dalviku je registrov¥ orientovaná, data jsou mapována do v¥t²ího mnoºství registr· a instrukce pak p°i svém vykonávání pracuje s obsahem t¥chto registr· [10]. Tím se li²í od zásobníkov¥ orientovaného principu pouºitého v Java VM [11], kde se data postupn¥ ukládají na zásobník, instrukce pak nemají ºádné operandy (parametry instrukcí). Registrov¥ orientovaný p°ístup je úsporn¥j²í na po£et
8
instrukcí , instrukce jsou v²ak del²í protoºe obsahují také specikace registr·. Pro dokreslení tohoto rozdílu jsem napsal krátkou t°ídu s jedinou metodou, která se£te £ísla od 1 do £ísla zadaného parametrem.
public static int sectiDo(int i) { int k=0; //line 10 for(int j=1;j<=i;j++) { //line 11 k+=j;
//line 12
} return k;
//line 14
} Za pomocí nástroje
ClassleAnalyzer
[12] pro Java VM a nástroje
dedexer
[13]
pro Dalvik je moºné bytecode p°evést do pro £lov¥ka £itelné podoby a dále ho analy-
9
zovat . Na obrázku 2 je vid¥t rozdíl v po£tu instrukcí a také zásobníkový a registrový model obou virtuálních stroj·. DEX formát zahrnuje také mnohé optimalizace. Ve²keré t°ídy jsou slou£eny do
10
jediného DEX souboru
. P°i nahrání do virtuálního stroje je bytecode optimalizovaný,
uloºený do cache a sdílený mezi v²emi procesy ve virtuálním stroji. Programy v DEX formátu jsou velice kompaktní a úsporné na pam¥´, aplikace v telefonu pak zabírají z°ídkakdy více neº jednotky megabajt·. Dal²ím zajímavým aspektem je
just-in-time
(JIT) kompilace instrukcí virtuál-
ního stroje do nativních instrukcí fyzického procesoru daného za°ízení, tato kompilace probíhá postupn¥ p°ímo za b¥hu programu, p°iná²í pak zna£né zrychlení provád¥ní programu. JIT je zabudovaný aº v Dalviku ve verzi Android 2.0, jen v²ak v experimentální podob¥ pro CPU ARMv7. První testy vypadají slibn¥ a p°iná²í aº trojnásobný nár·st výkonu [14]. 8 dle
[9] aº o 30% nástroje jsou ozna£ovány £asto jako disassemblery 10 na rozdíl od Java VM, kde jsou samostatn¥ pro kaºdou t°ídu 9 tyto
1 PLATFORMA ANDROID
Obrázek 2: P°íklad instrukcí Java VM vs. Dalvik VM
6
2 ZÁKLAD PRO TVORBU APLIKACÍ
7
2 Základ pro tvorbu aplikací Pro Android je dodávaný soubor vývojových nástroj· vývojové prost°edí
Eclipse
Android SDK
[15] a roz²í°ení pro
[16]. Tyto nástroje zna£n¥ zjednodu²ují a urychlují vývoj
aplikací.
2.1 Android SDK Sou£ástí SDK je emulátor pro v²echny aktuáln¥ dostupné verze aplika£ního frameworku, knihovny a dokumentace aplika£ního frameworku a nástroje pro kompilaci.
Obrázek 3: Emulátor Androidu Emulátor telefonu je kompletní prost°edí Androidu, je zaloºené na virtualiza£ní technologii
QEMU
[17] [15]. Pomocí emulátoru je moºné simulovat r·zné kongurace
prost°edí. Mezi n¥ pat°í r·zná rozli²ení obrazovky, r·zné velikosti opera£ní pam¥ti i hardwarová za°ízení jako je GPS. Emulátor je schopný vyvolávat i n¥které akce, které by vznikaly za b¥hu v normálním provozu, nap°íklad p°íchod SMS nebo p°íchozí volání. Díky emulátoru je moºné vyvíjet a ladit aplikace zcela bez nutnosti vlastnit fyzické za°ízení s Androidem (viz. obrázek 3). Pokud je k dispozici i fyzické za°ízení, lze aplikace ladit pomocí propojení s telefonem p°es USB kabel (více v kapitole 2.2.2).
2 ZÁKLAD PRO TVORBU APLIKACÍ
8
2.2 Vývojové prost°edí Eclipse Android SDK. V moºnostech projekt· nám p°ibude Android Project a Android Test Project. V této práci se budu zabývat pouze Android Project, druhý typ projektu slouºí k sestavování unit test· 11 pomocí testovacího frameworku zaloºeného na JUnit [15] [18].
Po instalaci roz²í°ení do
Eclipse
je nutné nejprve nastavit cestu k
Obrázek 4: Vývojové prost°edí Eclipse
Vlastní prost°edí
Eclipse je rozd¥leno do r·zných tzv. perspektiv (viz. obrázek 4),
jsou zvlá²´ pro r·zné programovací jazyky, zvlá²´ pro vývoj a lad¥ní. Pro vlastní vývoj se pouºívá standardní
Java Perspective
a pro lad¥ní
Debug Perspective
(kapitola 2.2.2).
Pokro£ilej²í lad¥ní na za°ízení nebo na emulátoru umoº¬uje speciální perspektiva
DDMS (Dalvik Debug Monitor Server).
2.2.1
Tvorba nového projektu
Nový projekt se vytvá°í jako
Android Project. To je velmi d·leºité a zajistí to správné
nastavení projektu a p°ed-generování adresá°ové struktury (viz. tabulka 1). Kaºdý 11 testy
jednotlivých t°íd (jednotek) p°ímo na úrovni programovacího jazyka
2 ZÁKLAD PRO TVORBU APLIKACÍ
9
nový projekt za£íná zadáním názvu projektu, verzí pouºitého aplika£ního frameworku,
12
názvem aplikace a balí£ku
.
Po vytvo°ení projektu je zaloºena základní adresá°ová struktura projektu [9]. Soubor / Adresá°
AndroidManifest.xml
Popis
Povinný
Popisný soubor celé aplikace.
Ano
Denuje aktivity, sluºby, poskytovatele a intenty. Obsahuje také nastavení práv aplikace k p°ístupu k zabezpe£eným £ástem frameworku. (kapitola 2.3.4)
src assets
Zdrojové kódy aplikace.
Ano
Dal²í p°ídavné soubory, které
Ne
mohou obsahovat data p°ibalená k aplikaci.
res
Soubory zdroj· (kapitola
bin
P°eloºené binární soubory
Ano
3.1) -
(není vid¥t v projektu)
gen
Automaticky generované
-
zdrojové kódy Tabulka 1: Adresá°ová struktura Android projektu
2.2.2
Lad¥ní aplikace
Hotová aplikace se ladí za pomocí perspektivy
Eclipse
automaticky po spu²t¥ní
Debug
Debug.
Do perspektivy se p°epne
reºimu.
Ladící reºim lze vytvo°it kliknutím na ²ipku u ikony
a výb¥rem
Debug
Congurations..., kongurace se vytvá°í jako Android Application (viz. obrázek 5). V záloºce Target lze nastavit za°ízení, na kterém se bude aplikace ladit. Výb¥r se provádí p°es aplikaci AVD Manager, která je sou£ástí Android SDK. V AVD je moºné vybrat vlastní fyzické za°ízení p°ipojené p°es USB nebo vytvo°it £i pouºít za°ízení emulované. Emulovaná za°ízení lze kongurovat na r·zné hardwarové parametry, mezi které pat°í zejména rozli²ení p°ístroje a p°ipojený obraz simulující pam¥´ovou kartu. P°i lad¥ní se aplikace automaticky nainstaluje na za°ízení a spojí se s ladícím programem. Stejn¥ jako p°i lad¥ní b¥ºné Javové aplikace je moºné krokovat program,
13
nastavit body p°eru²ení a sledovat prom¥nné 12 Java
package, nap°. cz.sazel.android anglické termíny pro tyto pojmy jsou step,
13 b¥ºné
.
breakpoints
a
watches
2 ZÁKLAD PRO TVORBU APLIKACÍ
10
Obrázek 5: Debug kongurace
Lad¥ní na fyzickém za°ízení vyºaduje instalaci USB ovlada£e za°ízení, které je sou£ástí Android SDK [15]. K tomu je nutné zapnout podporu lad¥ní v telefonu, kde v £eské verzi systému to je
Nastavení > Aplikace > Vývoj > Lad¥ní USB.
Dal²ím
nutným krokem, ale pouze pro lad¥ní na fyzickém za°ízení, je povolení lad¥ní v mani-
2.3.4) parametrem Application > Debuggable application atribut android:debuggable=true).
festu (podrobn¥ji v kapitole tagu
V p°ípad¥ lad¥ní na emulátoru sta£í vybrat v
AVD Manageru
na
true
(v
p°íslu²né za°ízení
emulátoru. Ve speciální perspektiv¥
DDMS
lze monitorovat za°ízení z hlediska b¥ºících
proces·, vláken a monitorování alokace pam¥ti. V okn¥
LogCat
se vypisují v²echny
d·leºité události, které v systému probíhají. U emulátoru lze p°es tuto perspektivu simulovat p°íchod SMS nebo volání, p°ípadn¥ nastavovat simulovanou pozici GPS. V neposlední °ad¥ lze k r·zným ladícím ú£el·m vyuºít nástroje
adb,
který je
.
sou£ástí Android SDK [15] Dovoluje p°ístup k souborovému systému za°ízení a obsahuje jednoduchý p°íkazový °ádek, který podporuje základní p°íkazy unixového p°íkazového °ádku. Vhodný je nap°íklad pro sledování systémových log· za°ízení. Do emulátoru m·ºeme pomocí p°íkazu
adb pull
adb push
kopírovat ze za°ízení.
kopírovat soubory nebo je naopak pomocí
2 ZÁKLAD PRO TVORBU APLIKACÍ
11
2.3 Základní prvky prost°edí Systém Android byl navrºen tak, aby umoºnil uºivateli v maximální mí°e upravovat prost°edí systému. Uºivatel m·ºe nahrazovat dodávané aplikace vlastními, které mu
14
vyhovují a tyto aplikace jsou dokonale propojeny se stávajícím systémem Vlastní aplikace jsou totiº rozd¥leny do odd¥lených £ástí tzv. kaºdé aktivit¥ je p°i°azen zpravidla jediný
pohled,
.
aktivit.
Ke
který je v podstat¥ samostatnou
obrazovkou grackého uºivatelského rozhraní. Mezi aktivitami se postupn¥ p°echází p°edáním informací jiné aktivit¥ ve form¥ zprávy - tzv.
intentu.
N¥které aktivity jsou
vyvolány na základ¥ typu intentu, voláním z jiné aplikace nebo p°ímo vznikem n¥jaké události v systému. Intent v podstat¥ °íká, co chceme ud¥lat a systém se nám sám p°izp·sobí volbou správné akce a spu²t¥ním správné aktivity. Není v²ak aplikací pokud není dat, které by zpracovávaly. Data nejsou v systému organizována svým umíst¥ním v adresá°ové struktu°e souborového systému
15
,
ale svým ú£elem. Mohou být r·zných typ· - obrázky, video, text, webová stránka. Soubory na souborovém systému mají zpravidla sv·j ú£el i formát ur£en £ástí svého názvu (p°íponou souboru). Jelikoº data nemusí být uloºena jen v souborech, ale mohou to být t°eba i zdroje z internetu, byly práv¥ z protokol· pouºívaných na internetu
MIME nebo také Conent typy . Jsou specise typ/podtyp. Typ ur£uje ú£el daných dat,
do v¥t²iny dne²ních systém· p°evzaty kovány typem a podtypem, zapisují
podtyp pak jejich konkrétní formát. Pro ilustraci máme nap°íklad MIME typy obrázk·
image/gif, image/jpeg,
zvuk·
audio/ogg, audio/vnd.wave,
textu
text
/html, text/javascript. Kaºdá aplikace m·ºe specikovat, které MIME typy dokáºe obsluhovat. Stejn¥ tak je tomu u Androidu. K dat·m a jiným prost°edk·m (zejména k poskytovatel·m obsahu) v systému je moºné p°istupovat pomocí URI (Uniform Resource Identier). URI m·ºe být ve tvaru URL nebo URN, p°ípadn¥ kombinací obou. URL (Uniform Resource Locator) je cesta ur£ující umíst¥ní prost°edku a URN (Uniform Resource Name) je jméno, které jednozna£n¥ identikuje prost°edek. S URL se nej£ast¥ji setkáme na webu a to ve form¥ webové adresy, nap°.
http://www.unicorncollege.cz.
V Androidu m·ºe být URL
poskytovatele prost°edku (viz. kapitola 2.3.3), nap°. specikace umíst¥ní obrázku na pam¥´ové kart¥
content://media/external/images/media/3.
na Androidu t°eba pro telefonní £íslo 14 záleºí
tel:603404367.
URN m·ºe být
ást URI p°ed dvojte£kou
samoz°ejm¥ na vývojá°i konkrétní aplikace, jak dokáºe t¥chto moºností vyuºít data jsou uloºena ve form¥ soubor· v souborovém systému, ale z hlediska uºivatele je tato struktura skrytá 15 pochopiteln¥
2 ZÁKLAD PRO TVORBU APLIKACÍ
12
se nazývá URI schéma a specikuje zp·sob p°ístupu k danému prost°edku nebo typ prost°edku.
2.3.1
Aplikace, aktivita, sluºba a p°ijíma£ (Application, Activity, Service and BroadcastReceiver)
Aplikace je soubor komponent - aktivit, sluºeb a p°ijíma£· a m·ºe být realizována jako vlastní t°ída zd¥d¥ná podle
android.app.Application.
Jednotlivé komponenty
aplikace jsou pak denovány v manifestu (kapitola 2.3.4). Aktivity jsou samostatné £ásti aplikace °e²ící vlastní funk£ní logiku aplikace. Aktivity jsou d¥d¥né z t°ídy
android.app.Activity.
Procesy b¥ºící ve virtuál-
ním stroji pak mají p°i°azené jednotlivé aktivity aplikace. Kaºdá aktivita v systému se ukládá na
zásobník aktivit
(Acitivity Stack). Aktuální aktivita na pop°edí je na vr-
cholu tohoto zásobníku, naopak stisknutí klávesy
Zp¥t
na telefonu odebere sou£asnou
aktivitu z vrcholu zásobníku. Systém si zcela sám °ídí b¥h proces·, ty jsou v rámci úspory pam¥ti v p°ípad¥ nejvy²²í nouze násiln¥ ukon£eny (zabity, pomocí
killer
low-memory
- viz. kapitola 1.1). Prioritizace zabíjení proces· je taková, ºe nejprve jsou zabity
procesy, které mají aktivity na pozadí (nejsou na vrcholu zásobníku), aº poté jdou na °adu dal²í procesy (pokud je dostatek pam¥ti, tak k tomu dochází jen minimáln¥). V Androidu není garantován b¥h ºádného procesu. Kaºdá aktivita má sv·j ºivotní cyklus (viz. obrázek 6), který prochází jednotlivými stavy a volá podle toho p°íslu²né události [19]:
onCreate(Bundle) -
Volá se jednou, kdyº je aktivita poprvé spu²t¥na.
Je vhodné zde inicializovat aktivitu, nastavit pohled a zaregistrovat obsluhy událostí
onStart()
- Volá se vºdy p°ed zobrazením aktivity uºivateli.
onResume()
- Volá se tehdy, kdy je aktivita p°ipravena reagovat na vstupy od
uºivatele.
onPause()
- Volá se kdyº je aktivita p°esunuta do pozadí. Je to vhodné a
také poslední místo k uloºení r·zných perzistentních dat. Po této události je jiº proces, jehoº je aktivita sou£ástí moºné zabít a v p°ípad¥, ºe nebudou tato data uloºena, tak budou ztracena. Pro uloºení dat do speciálního objektu je moºno pouºít událost obnovení
onSaveInstanceState(Bundle),
onRestoreInstance(Bundle)
Bundle
podobn¥ pak k
2 ZÁKLAD PRO TVORBU APLIKACÍ
Obrázek 6: ivotní cyklus aktivity [1]
13
2 ZÁKLAD PRO TVORBU APLIKACÍ onStop()
14
- Volá se v p°ípad¥, ºe aplikace není uº vid¥t v p°epína£i úloh.
onRestart() onDestroy()
- Volá se tehdy, kdyº se aktivita uºivateli má znovu zobrazit. - Volá se v p°ípad¥, ºe je aktivita zru²ena
Aktivity v²ak nejsou ur£eny k dlouhodobým operacím a výpo£t·m, protoºe jakékoli volání blokuje uºivatelské rozhraní. Pokud chceme vytvo°it aplikaci, která na pozadí vykonává n¥jakou £innost (nap°. pravidelné stahování po²ty) musíme sáhnout po pouºití vláken. Zp·sob je tém¥° stejný jako v klasické Jav¥, vyuºívá se t°ídy
java.lang.Thread
java.lang.Runnable.
a rozhraní
Jediný rozdíl je v tom,
ºe zevnit° jiného vlákna nesmíme p°ímo p°istupovat ke grackému rozhraní, které není vláknov¥ bezpe£né. K tomu lze pouºít t°ídy objekt s rozhraním spu²t¥ním metody
java.lang.Runnable run().
PrikladVlakna(viz.
android.os.Handler
a zaslat
do hlavního vlákna a tam se kód vykoná
Pro ilustraci pouºití vláken jsem vytvo°il vzorovou aktivitu
p°íloha
A).
Pokud chceme provád¥t na pozadí n¥jakou trvalej²í £innost (nap°. stahování souboru nebo p°ehrávání hudby), m·ºeme vyuºít sluºeb. Sluºby jsou d¥d¥ny z
android.app.Service.
Sluºba nemá p°i°azené gracké uºivatelské rozhraní, m·ºe
aktivovat pouze systém notikací. Pravd¥podobnost, ºe bude zabit proces obsahující sluºbu je podstatn¥ men²í neº v p°ípad¥ aktivity na pozadí. S okolím sluºby komunikují zpravidla pomocí mezi-procesové komunikace (IPC), která je v Androidu realizována speciálním ovlada£em
binder
V aplika£ním frameworku se vyuºívá rozhraní Speciální
komponentou
je
v linuxovém jádru (viz. kapitola 1.1).
android.os.IBinder.
p°ijíma£,
který
je
odvozený
od
t°ídy
android.app.BroadcastReceiver a slouºí k jednorázové reakci na n¥které události, které vznikají v systému. Pod takovými událostmi si m·ºeme p°edstavit p°íchozí SMS nebo telefonní hovor. Proces zpracovávající p°ijíma£ je platný jen po dobu vykonávání metody
onReceive(),
proto nesmíme v této metod¥ vytvá°et ºádné v¥ci týkající se
daného procesu, hlavn¥ ne vlákna, která b¥ºí na pozadí. Zpravidla se pouºívá pouze k vytvo°ení systémové notikace nebo spu²t¥ní sluºby.
2.3.2
Intenty a intentové ltry (Intent)
Jak uº je zmín¥no v úvodu kapitoly 2 jsou aplikace rozd¥leny na jednotlivé komponenty - aktivity, sluºby a p°ijíma£e, mezi kterými se p°echází pomocí p°edávání zprávy tzv.
intentu.
Uºivatelsky °e£eno z jedné aktivity vyvoláváme intent, ve kterém °íkáme co
2 ZÁKLAD PRO TVORBU APLIKACÍ
Obrázek 7: Vztahy aktivit a intent·
15
2 ZÁKLAD PRO TVORBU APLIKACÍ
16
chceme d¥lat a p°ípadn¥ jak to chceme ud¥lat. Vztahy intent· a komponent dob°e vystihuje obrázek 7. V²e nyní ukáºi pouze na aktivitách, v p°ípad¥ jiných komponent je situace jen mírn¥ odli²ná. V rámci jedné aplikace m·ºeme vyvolávat aktivity pomocí tzv.
itního intentu,
explic-
ten je specikován komponentou, která ho volá a t°ídou komponenty,
kterou chceme volat. íkáme p°esn¥, jak chceme danou £innost ud¥lat.
//explicitní intent Intent doDruheIntent=new Intent(PrikladIntenty.this, DruhaAktivita.class); startActivityForResult(doDruheIntent, REQUEST_ZE_DRUHE); V tomto p°ípad¥ je o£ekávaný návrat n¥jakého výsledku z dané aktivity (velmi £astý poºadavek). Pokud je poté pot°eba v aktivit¥ reagovat na návrat z volané aktivity pouºíváme události
onActivityResult():
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ZE_DRUHE && resultCode==RESULT_OK ) { //do something } } Mnohem zajímav¥j²í je pouºití
implicitních intent·,
kde nespecikujeme jak
danou £innost ud¥lat, ale necháváme to rozhodnout systém. Implicitní intenty nejsou specikovány t°ídou aktivity, ale dodate£nými parametry, mezi které pat°í [1]:
akce ( action) Intent
- Jednotlivé akce jsou denovány svými konstantami na t°íd¥
a ur£ují co má intent vyvolat za akci. Mezi £asto pouºívané akce pat°í:
ACTION_VIEW - ukaº uºivateli data specikovaná v URI ACTION_EDIT - umoºni upravit data specikovaná v URI ACTION_PICK - nabídni výb¥r z dat uloºených na dané URI ACTION_DIAL - chci vytá£et £íslo uloºené v URI MIME typ atd.
ur£uje typ poºadovaných dat, nap°.
image/png, text/plain,
2 ZÁKLAD PRO TVORBU APLIKACÍ URI schéma -
17
specikuje zp·sob p°ístupu k danému prost°edku nebo typ
prost°edku
kategorie (category) -
dodate£ná informace o tom, jak mají být data nebo
prost°edky zpracovány, má op¥t denované konstanty, nap°.:
CATEGORY_BROWSABLE
- aktivita m·ºe zpracovávat odkazy (nap°. na
webové adresy nebo mailové adresy)
CATEGORY_GADGET
- aktivita m·ºe být pouºita jako gadget (speciální
forma aktivity zobrazující se na pracovní plo²e)
CATEGORY_PREFERENCE
- aktivita slouºí k nastavení p°edvoleb pro-
gramu (preferencí) Parametry implicitních intent· lze denovat v aplikaci zcela vlastní, ale pro vzájemnou kompatibilitu aplikací je doporu£ené pouºít ty, co jsou uº v aplika£ním frameworku p°ipravené. Aby aktivita mohla reagovat na pomocí
intentových ltr·.
implicitní intenty
je pot°eba je zaregistrovat
Intentový ltr pro aktivitu specikujeme v manifestu (více
v kapitole 2.3.4). Pokud chceme zjistit, jak fungují jednotlivé aplikace z hlediska posílání intent·, dob°e nám k tomu poslouºí perspektiva V okn¥
LogC at
DDMS
v Eclipse (viz. kapitola
2.2.2).
se v²echny intenty p°ehledn¥ vypisují:
Starting activity: Intent { act=android.intent.action.MAIN cat =[android.intent.category.HOME] flg=0x10200000 cmp=com. android.launcher/.Launcher } Starting activity: Intent { act=android.intent.action.MAIN cat =[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com. android.contacts/.DialtactsContactsEntryActivity } Starting activity: Intent { act=android.intent.action.INSERT dat=content://contacts/people cmp=com.android.contacts/. EditContactActivity } Starting activity: Intent { act=android.intent.action.SENDTO dat=sms:255 cmp=com.android.mms/.ui.ComposeMessageActivity } V tomto p°íkladu jsem spustil aplikaci na správu kontakt·, vytvo°il nový kontakt a pak spustil odesílání SMS na tento kontakt. M·ºete si v²imnout pouºitého URI
content://contacts/people,
seznamu kontakt· a
sms:255,
které ur£uje umíst¥ní poskytovatele obsahu
které je pouºito k vyvolání aplikace na odeslání SMS.
2 ZÁKLAD PRO TVORBU APLIKACÍ
18
Pro názorn¥j²í vyuºití intentových ltr· jsem zpracoval v
PrikladIntenty
která naslouchá na intenty prohlíºení webových odkaz· p°es protokol
aktivitu,
http://.
Jde
o takový malý jednoduchý webový prohlíºe£. V manifestu je ltr popsán takto:
ili pokud v n¥jaké libovolné aplikaci volám p°íslu²ný implicitní intent, m·ºe být systémem vyhodnoceno, ºe více neº jedna z aplikací je schopna zpracovávat daný intent. V tomto p°ípad¥ b¥ºn¥ dodávaný webový prohlíºe£ a m·j mini-prohlíºe£ z
PrikladIntenty. Na obrázku 8 je vid¥t, ºe pokud systém sám neví jak dále pokra£ovat a jelikoº existuje více moºností vyhovujících intentu, zeptá se uºivatele dialogem. Uºivatel má moºnost zapamatovat si asociaci do budoucna. Poté se uº systém ptát nebude, dokud toto nastavení nezru²íme
Nastavení > Aplikace > Správa aplikací > /daná aplikace/ výchozí nastavení. v
a tla£ítkem
Vymazat
Pokud má v¥t²ina aplikací správn¥ denované intentové ltry a vyvolává implicitní intenty místo explicitních, je zp·sob nahrazení libovolné aplikace vlastní alternativou otázkou n¥kolika °ádek v manifestu. Pokud budete vyvíjet vlastní aplikace, je vhodné v dokumentaci uvád¥t jaké intentové ltry aplikace pouºívá.
2.3.3
Poskytovatel obsahu (Content Provider)
Poskytovatel obsahu je datové rozhraní pro získávání a zaznamenávání dat dostupné libovolným aplikacím v systému. Funguje podobným zp·sobem jako klasická databáze, jelikoº je to £asto jen mezivrstva, která propojuje poskytovatele obsahu s SQLite databází. P°ístup k tomuto problému se velmi podobá webovým sluºbám a RESTu [9]. K obsahu poskytovanému poskytovatelem obsahu se m·ºeme dostat p°es známé URI se schématem
content://,
které je zpravidla ve tvaru
poskytovatele>/
, 16 nesmíme
nap°.
content://<jméno
content://sms/inbox16 ,
zapomenout na moºná omezení p°ístupovými právy
pro
2 ZÁKLAD PRO TVORBU APLIKACÍ
19
Obrázek 8: Vyvolání implicitního intentu pro prohlíºení
celou tabulku (v²echny SMS ve sloºce Inbox) a
http://
odkazu
content://sms/inbox/1
uº
odkazuje na konkrétní SMS s id=1. URI lze stav¥t p°ímo p°es metody na t°íd¥
android.net.Uri: Uri smsInbox=Uri.parse("content://sms/inbox"); Uri smsMessage1=Uri.withAppendedId(smsInbox,1); V aktivit¥ m·ºeme p°istupovat k dat·m poskytovatele obsahu p°es objekt t°ídy
android.content.ContentResolver. metody
getContentResolver().
Na aktivit¥ ho získáme snadno zavoláním
Na n¥m uº m·ºeme spou²t¥t metody pro za-
loºení, £tení, aktualizaci a smazání (CRUD), jsou to
()
a
delete().
teme
android.content.Cursor. sloupc· -
getCount()
názv· sloupc·
a
p°es
objekty
insert(), query(), update zvané
kurzory
s
rozhraním
Ty mají denované metody pro zji²t¥ní po£tu °ádk· a
getColumnCount(),
getColumnNames().
pak také metody pro zji²t¥ní pole
A i samotné metody pro získání dat z ur£itého
2 ZÁKLAD PRO TVORBU APLIKACÍ sloupce ur£eného svým po°adím, nap°.
20
getString(int).
Uri smsURI=Uri.withAppendedPath(Uri.parse("content://sms"), " inbox"); Cursor c=activity.getContentResolver().query(smsURI, null, null, null, null); //nejprve se kurzor musí "pˇ revinout" if (c.moveToFirst()!=false) ( while(c.moveToNext()) String value=c.getString[1]; //.... } } Jako druhý parametr metody
query()
, lze omezit sloupce, které budou ve
výb¥ru. Pokud zadáme do n¥jakého parametru
null,
tak to znamená, ºe se daná
podmínka neuplat¬uje. Jako t°etí parametr lze zadat WHERE podmínku (SQL), jako £tvrtý pak pole parametr·, které se po popo°ad¥ mapují do této podmínky (místa kam se mapují jsou ozna£ena otazníkem). Jako poslední parametr se zadává ORDER. P°íklad, jak m·ºe takový dotaz vypadat:
Cursor c=getContentResolver().query(smsURI, null, "address LIKE ?", new String[]{"%mBank%"},"_id DESC"); Na aktivit¥ existuje p°ímo metoda jako
query()
na objektu typu
managedQuery()
ContentResolver,
se stejnými parametry
ale tato metoda zajistí auto-
matickou aktualizaci dat p°i obnovení aktivity z pozastavených stav· a tak zna£n¥ zjednodu²uje implementaci. Ukládání dat ukáºi jen na metod¥
insert(),
protoºe
update()
se chová
podobn¥ jen má navíc parametry pro WHERE podmínku. Nejprve je nutné vytvo°it objekt t°ídy
a do n¥j vloºit p°íslu²né dvojice
android.content.ContentValues
jméno sloupce a hodnota, pak je uº moºné zavolat
insert().
ContentValues vals=new ContentValues(); vals.put("address","Neznámá ctitelka"); vals.put("body","Miluji tˇ e!"); Uri newItem=activity.getContentResolver().insert(smsURI,vals); Vrácené URI pak bude ukazovat na novou poloºku, ve tvaru
content://<
jméno poskytovatele>//<nové id>. Na CD (p°íloha A) je k poskytovatel·m obsahu vytvo°en p°íklad
Provideru
s aktivitou, která zobrazí v²echny p°ijaté SMS v prvku
Priklad-
ListView.
2 ZÁKLAD PRO TVORBU APLIKACÍ
21
Obrázek 9: Povolení p°ístupových práv p°i instalaci
Systém poskytuje mnoºství vlastních poskytovatel· a ty jsou dostupné z balí£ku
android.providers.*.
Poskytovatele konkrétních aplikací m·ºeme op¥t najít v
manifestu, pro inspiraci op¥t doporu£uji nahlédnout do exportu manifest· uloºených na CD (p°íloha A). Konkrétn¥ v p°ípad¥ SMS a MMS úloºi²t¥ není denovaný ºádný p°esný zdroj, ale v¥t²ina aplikací spoléhá na úloºi²t¥ SMS aplikace dodávané v rámci AOSP, v p°ípad¥ ºe nebude tato aplikace v systému dostupná, nebude dostupný ani tento poskytovatel obsahu. V rámci vlastních aplikací m·ºete vytvo°it vlastního poskytovatele obsahu, roz²í°ením abstraktní t°ídy
android.content.ContentProvider
a implementací
p°íslu²ných metod. Vytvo°ený poskytovatel obsahu musí být op¥t zapsán do manifestu, aby o n¥m v¥d¥l celý systém.
2.3.4
Manifest a bezpe£nostní omezení aplikací
Manifest je popisný soubor aplikace ve formátu XML. Obsahuje základní informace o aplikaci jako název, verze nebo ikona. Je v n¥m také zaznamenáno ze kterých komponent se aplikace skládá, jaké jsou jejich intentové ltry. V p°íloze B se m·ºete seznámit s ukázkou manifestu aplikace
Mapy Google
dodávané v rámci AOSP.
Jelikoº má Android systém oprávn¥ní, která omezují p°ístup k n¥kterým funkcím telefonu pouze autorizovaným aplikacím, obsahuje manifest seznam pouºitých oprávn¥ní.
2 ZÁKLAD PRO TVORBU APLIKACÍ
22
P°i instalaci aplikace se p°e£tou tato oprávn¥ní a jsou zobrazena uºivateli (viz. obrázek 9), který je musí schválit, jinak se aplikace nenainstaluje. Tento systém chrání uºivatele p°ed potenciáln¥ nebezpe£nou aplikací. Lze si totiº p°edstavit aplikaci, která kaºdou sekundu odesílá SMSku a tak uºivateli p°ichystá nep°íjemné p°ekvapení v podob¥ obrovských £ástek na faktu°e. Systémem oprávn¥ní jsou chrán¥ny v²echny takto kritické £ásti telefonu jako odesílání zpráv, p°ístup k internetu, p°ístup ke kontakt·m, sledování polohy p°es GPS, apod. Pokud ve vlastní aplikaci zapomenete uvést oprávn¥ní v manifestu, tak v p°ípad¥ ºe se aplikace pokusí pouºít chrán¥ného p°ístupu, tak skon£í vyhozením výjimky
java.lang.SecurityException.
V man-
ifestu je také moºné denovat vlastní oprávn¥ní, která bude va²e aplikace pouºívat vzhledem k aplikacím ostatním. Sou£ástí vývojového prost°edí pro Android v Eclipse je p°ehledné gracké rozhraní pro editaci manifestu. Na p°iloºeném CD (p°íloha A) naleznete exporty v²ech XML pouºitých v AOSP aplikacích, tedy i manifest·. Pouºitý nástroj
Axml2xml [20]
je také sou£ástí CD.
Manifesty jsou zejména uºite£né pro zji²t¥ní intent ltr· pouºívaných v aplikacích a pro inspiraci tvorby vlastních.
2.4 Nasazení aplikace a Android Market Hotovou a odlad¥nou aplikaci je moºné p°eloºit do instalovatelného balí£ku s p°íponou
17
*.apk
. Ve vývojovém prost°edí pro Android v Eclipse, tak m·ºeme u£init z kontex-
tové nabídky na projektu volbou
age...
Android Tools > Export Signed Application Pack-
V prvním kroku vyplníme jen název balí£ku. Ve druhém kroku musíme zadat
úloºi²t¥ klí£·, kde bude vygenerován unikátní klí£ autora, který funguje podobn¥ jako elektronický podpis. Díky tomu v²echny dal²í vytvo°ené aplikace budou podepsány va²ím klí£em a bude jasn¥ deklarováno, kdo aplikaci vytvo°il. Proto je nezbytné bezpe£n¥ klí£ uchovat a opat°it ho silným heslem. Aplikace je moºné distribuovat p°ímo ve form¥ *.apk balí£ku. Android v²ak nabízí mnohem zajímav¥j²í zp·sob distribuce a to je distribuce p°es
Android Market.
Toto centralizované úloºi²t¥ aplikací provozuje spole£nost Google. Je moºno zde distribuovat aplikace zdarma nebo placené, nicmén¥ v dob¥ psaní této práce není moºno v eské republice placené aplikace prodávat, ba dokonce ani nakupovat. 17 jde
o ZIP soubor, který obsahuje strukturu zkompilované aplikace spolu s manifestem
2 ZÁKLAD PRO TVORBU APLIKACÍ
23
2.5 Specika vývoje mobilních aplikací A£koliv je mobilní platforma Android kompatibilní z hlediska vývoje s °e²ením Java SE na osobních po£íta£ích, je pot°ebné do vyvíjených aplikací promítnout omezení dané mobilním hardware. Proto n¥které best practices
18
z klasické Javy zde není vhodné
pouºívat a oproti tomu je doporu£ené pouºívat jiné, které zde popí²i [1]. V kapitole 2.3.1 jsem uº zmínil doporu£ení nepouºívat hlavní vlákno aktivity k £asov¥ náro£ným výpo£t·m. Nedodrºení tohoto pravidla povede k zablokování uºivatelského rozhraní a zobrazení dialogu s výstrahou, ºe daná aplikace neodpovídá. Pro aktivity je tato doba 5 sekund a pro p°ijíma£e je tato doba 10 sekund. Pro rozsáhlej²í výpo£ty tedy vºdy pouºívejte vlákna. Aplikaci vºdy rozd¥lujeme na aktivity, tak aby jeden pohled (obrazovka) odpovídal jedné aktivit¥. Není doporu£ené m¥nit pohledy v rámci jedné aktivity. V
aktivitách
nesmíme
zapomínat
onSaveInstanceState(Bundle).
na
ukládání
stavu
aktivity
pomocí
Pokud neuloºíme stav p°i p°esunu jiné aktiv-
ity na pop°edí, riskujeme zabití procesu dané aktivity a ztráty zadaných dat. Musíme si uv¥domit, ºe taková aktivace na pop°edí m·ºe prob¥hnout nap°íklad kdykoli p°i p°íchozím hovoru. Uºivatelské rozhraní je vhodné p°izp·sobit tak, aby mohlo být ovládané bez hardwarové klávesnice, ba dokonce bez dotykového displeje. V p°ípad¥ sí´ových aplikací je nutné po£ítat s velkým zpoºd¥ním v GSM síti p°i p°ipojení p°es GPRS (aº jednotky sekund) a EDGE (obvykle 150-500ms), ani v 3G sítích není situace výrazn¥ lep²í oproti klasickému pevnému p°ipojení realizovanému nap°. p°es wi-, p°ipojenou ke poskytovateli internetu p°es optické £i kabelové sít¥. Datová p°ipojení jsou také velmi náro£ná na spot°ebu, proto by jejich pouºití m¥la p°edcházet úvaha, zda a jak £asto je nutné je vyuºívat. Dal²í doporu£ení se týkají vlastní platformy z hlediska výkonu. Není dobré naduºívat vytvá°ení nových objekt·, je vhodné znovu-pouºívat objekt· stávajících uº jednou alokovaných, p°ípadn¥ ve velké mí°e pouºívat singleton·
19
. V maximální mí°e je
vhodné pouºívat jednoduchých datových typ·, nikoli t¥ch objektových (£ili více mén¥
Integer).
int,
Uvnit° t°ídy není vhodné pouºívat getter· a setter· (metod k nas-
tavení instan£ních prom¥nných), ale naopak pouºívat p°ímo p°ístupu k jednotlivým prom¥nným. Je vhodné maximáln¥ specikovat datové typy a minimáln¥ pouºívat rozhraní a t°íd p°edk·, pokud denujeme datový typ, výrazn¥ tak sniºujeme reºii spo18 doporu£ené 19 t°ída,
postupy ke které lze vytvo°it pouze jedinou instanci v celé aplikaci
2 ZÁKLAD PRO TVORBU APLIKACÍ
24
jenou s vyhodnocením virtuálních metod na objektu (to jde p°ímo proti princip·m, na které jsme zvyklí z klasického vývoje). Není vhodné pouºívat vý£tového typu, protoºe p°i jeho vytvo°ení alokujeme daleko více pam¥ti, místo n¥j je vhodné pouºít konstant. Konstanty vºdy deklarujeme jako
static
a
final,
op¥t tak dosáhneme
zvý²ení výkonu. Z hlediska výkonu je také problematický datový typ
float
a pokud
netvo°íme matematicky orientované aplikace, je vhodné se mu vyhnout a pouºívat pouze celá £ísla.
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
25
3 Návrh grackého uºivatelského rozhraní (GUI) Gracké uºivatelské rozhraní Androidu je od po£átku navrºené pro mobilní za°ízení. Umoº¬uje uºivateli efektivn¥ ovládat za°ízení pomocí dotykového displeje. V Androidu
20
není pouºita ºádná stávající Javová implementace uºivatelského rozhraní jako AWT
nebo Swing, framework nabízí zcela vlastní pojetí. Je jednoduché a snadno pochopitelné. GUI lze vytvo°it zcela ru£n¥ pomocí kódu nebo lze vyuºít XML soubor· rozvrºení (layout·). Ve²kerá nastavení a parametry grackého uºivatelského rozhraní bývají uloºeny ve
zdrojích (resources). Základním prvkem GUI je pohled (View), který je reprezentovaný t°ídou
android.view.View
a od n¥j jsou odvozeny ve²keré prvky grackého uºivatel-
ského rozhraní. Existuje jako v²echny gracké prvky v n¥jakém kontextu, kterým je ve v¥t²in¥ p°ípad· n¥jaká aktivita. Bu¤ jde uº o
vlastní prvky
nebo
skupiny prvk·,
které jsou charakteristické tím, ºe do nich lze vkládat dal²í prvky a díky tomu má celé uºivatelské rozhraní strukturovanou podobu.
3.1 Zdroje (Resources) a jejich pouºití v kódu Zdroje jsou data p°ibalená k aplikaci, ur£ená pouze pro £tení a jsou d·leºitá pro provoz aplikace. V projektu Eclipse jsou uloºena v adresá°i
res.
Typy zdroj· m·ºete vid¥t v
tabulce 2. Zdroje se p°eváºn¥ ukládají ve formátu XML. Tato XML se, kv·li zvý²ení výkonu a zmen²ení velikosti, p°ekládají p°ímo do binární podoby [9]. Op¥t zd·raz¬uji, ºe Android se snaºí být maximáln¥ p°ístupný a modikovatelný. Proto v Androidu existuje n¥co jako
alternativní zdroje [1]. Adresá°e lze opat°it p°ípon-
ami, které specikují pouºití jiných zdroj· neº t¥ch výchozích, v ur£itých situacích jako je zm¥na hardwarové kongurace p°ístroje nebo zm¥na jazyka. Typicky se toho vyuºívá u °et¥zc·, ale je moºné toho vyuºít u libovolných zdroj·. Gracké rozhraní v Eclipse umoº¬uje pom¥rn¥ rychle vytvá°et takové alternativní zdroje P°íklady ukazuje tabulka 3. V XML souborech lze odkazovat na hodnoty jiného zdroje pomocí formátu
@[balíˇ cek:]typ/jméno. V Javovém kódu je pro zdroje v daném balí£ku vytvo°ena automaticky vývojovým prost°edím t°ída jednotlivých 20 existuje
zdroj·.
K
R,
která obsahuje konstanty s identikátory
identikátor·m
lze
pak
nezávislá implementace AWT pro Android na http://code.google.com/p/awt-android-compat/
p°istupovat
p°es
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI) Typ zdroje
26
Popis zdroje
Umíst¥ní
Hierarchická reprezentace umíst¥ní grackých prvk· Rozvrºení (Layout)
/res/layout/*.xml
uvnit° jednotlivých rozvrºení a kontejner·, dostupné jako
R.layout.* Id
/res/values/*.xml
Nabídky (Menu)
/res/menu/*.xml
Barvy (Color)
/res/values/*.xml
Identikátory prvk· GUI, dostupná jako
R.id.*
Denice nabídek, dostupné pak z
R.menu.*
Reprezentace barev, dostupné jako
R.color.*
Texty a p°eklady GUI do et¥zce (String)
/res/values/*.xml
r·zných jazyk·, dostupné jako
Rozm¥ry (Dimension)
/res/values/*.xml
Obrázky
/res/drawable/*
Volitelné XML soubory
/res/xml/*.xml
R.string.*
Rozm¥ry prvk·, dostupné jako
R.dimen.*
Ikony a obrázky, dostupné jako
R.drawable.*
R·zné vlastní XML soubory, dostupné jako
R.xml.*
R·zné vlastní libovolné Volitelné jiné soubory
soubory, dostupné jako
/res/raw/*
R.raw.* Dal²í soubory, lze je £íst p°es Dal²í soubory
/assets/*
android.content.res. AssetManager
Tabulka 2: Typy zdroj·
balíˇ cek.R.typ.jméno.
K
získání
vlastního
zdroje
slouºí
metody
na
t°íd¥
android.content.res.Resources, jejíº instance se na aktivit¥ získá p°es metodu getResources(). Zdroje rozvrºení a zdroje id proberu detailn¥ v kapitole 3.2. et¥zcové zdroje reprezentují v·bec ve²keré texty, které v aplikaci pouºíváme. Je pravda, ºe m·ºeme zapsat text p°ímo natvrdo v rozvrºení nebo v kódu, ale p°i²li bychom o moºnost pouºít alternativních zdroj· pro jiné jazyky. Proto by v²echny texty m¥ly být zapsány v °et¥zcových zdrojích:
<string name="hello">Ahoj svˇ ete!
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI) Cesta
values-fr
27
Alternativní zdroj Hodnoty pro systém kde je nastavený francouzský jazyk Rozvrºení pro telefon
layout-land
oto£ený v reºimu krajina (del²í hranou dol·) Obrázky pro systém s nastaveným jazykem
drawable-zh-rTW
taiwanská £ín²tina Nabídky pro telefony s
menu-mcc231-keysexposed
vysunutou klávesnicí a p°ihlá²ené do sít¥ operátora na Slovensku
Tabulka 3: P°íklady alternativních zdroj·
et¥zec ze zdroje pak získáme takto:
String textik = (String)activity.getString(R.string.hello); S dal²ími zdroji se v kódu pracuje velice podobn¥, pro ilustraci n¥kolik p°íklad·:
//Barvy int cervena=activity.getResources().getColor(R.color.red); //Rozmˇ ery float delka=activity.getResources().getDimension(R.dimen. my_width). //Obrázky BitmapDrawable d=activity.getResources().getDrawable(R. drawable.my_image);
3.2 Rozvrºení (Layout) Rozvrºení (layout) specikuje vlastní umíst¥ní grackých prvk· na obrazovce, v XML souboru jsou specikovány jednotlivými tagy jednotlivé pohledy (View), £ili gracké prvky odvozené od t°ídy
android.view.View.
Pro návrh rozvrºení je ve vývojovém
prost°edí Androidu pro Eclipse k dispozici gracký návrhá°. Rozvrºení lze ve form¥ zdroje specikovat XML souborem:
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
28
android:layout_height="fill_parent"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ butOk" android:text="@string/tlacitkoOk"> V rozvrºení m·ºe být libovolný prvek GUI identikován jednozna£ným identikátorem a to je jeho
android:id.
Pokud není denováno p°edem ve zdroji, tak je
moºné ho nechat automaticky generovat referencí ve tvaru
@+id/jméno.
K prvku
lze pak p°istupovat v aktivit¥ jednoduchým zp·sobem, nap°íklad takto pro tla£ítko:
Button myButton = (Button)activity.findViewById(R.id.butOk); Dále mají pochopiteln¥ gracké prvky spoustu r·zných vlastností, které ur£ují jak se bude prvek chovat. V dal²ím textu jim budu °íkat pouze V²echna
rozvrºení
jsou
odvozena
od
vlastnosti.
t°ídy
skupiny
prvk·
android.view.ViewGroup, která umoº¬uje do sebe rozvrºení a dal²í prvky zano°ovat. Pro prvky do n¥j vloºené a chování jejich rozm¥r· a umíst¥ní se °e²í p°es tzv.
vlastnosti rozvrºení,
ty jsou typické svojí p°edponou
layout_
a kaºdý prvek uloºený
v rozvrºení má svou sadu t¥chto vlastností. Mezi klí£ové vlastnosti rozvrºení ur£ující rozm¥ry
prvku
pat°í
android:layout_width
android:layout_height wrap_content,
pro
vý²ku
prvku.
Ty
pro mohou
²í°ku
prvku
nabývat
a
hodnot
kdy se prvek chová tak, ºe se snaºí svými rozm¥ry maximáln¥ obe-
mknout sv·j obsah nebo
fill_parent, který naopak roztahuje prvek na velikost své
nad°azené skupiny prvk·. Pokud bychom cht¥li pevnou ²í°ku, £i vý²ku, tak je moºné toto nastavit p°es vlastnosti
android:width a android:height, ale doporu£uji se
tomu pokud moºno vyhnout, protoºe to sniºuje pouºitelnost na za°ízeních s rozdílnými rozli²eními displeje. Pro správné nastavení velikosti jednotlivých prvk· je d·leºité se je²t¥ seznámit s jednotkami pouºitými k specikování rozm¥r· [1]:
px (pixely)
- odpovídají p°esn¥ bod·m na obrazovce, jejich maximální po£et je
dán rozli²ením, nezávisí na fyzické velikosti obrazovky
in (palce) -
anglosaská jednotka délky, odpovídá 2,54cm, rozm¥ry se po£ítají
vzhledem k fyzické velikosti obrazovky
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI) mm (milimetry) pt (body)
29
- rozm¥ry se po£ítají vzhledem k fyzické velikosti obrazovky
- typogracká jednotka, 1/72 palce, vzhledem k fyzické velikosti
obrazovky
dp (pixely nezávislé na hustot¥ bod·)
- abstraktní jednotka zaloºená na hustot¥
bod· na obrazovce, relativn¥ k 160dpi (body na palec) obrazovce
sp (pom¥rov¥ nezávislé pixely)
- podobné jako
dp,
ale m¥ní se s velikostí font·
nastavených uºivatelem, vhodné ke specikaci velikosti písma
Rozm¥ry prvk· je vhodné denovat ve zdrojích typu rozm¥ry.
1px 2dp 16sp Existuje celkem p¥t r·zných typ· rozvrºení, popí²u postupn¥ kaºdé z nich (uvádím v²echny plným názvem Javové t°ídy, ve zdroji sta£í zápis jednoduchý).
android.widget.LinearLayout
- Prvky vloºené do tohoto rozvrºení se
skládají vedle sebe vertikáln¥ nebo horizontáln¥ na základ¥ hodnoty vlastnosti
android:orientation.
Pro prvky je moºné pouºít vlastnosti rozvrºení
android:layout_gravity, které ur£uje zarovnání prvku v rozvrºení, vhodné je ho pouºít nap°íklad k vycentrování prvku. Není radno zam¥¬ovat tuto vlastnost rozvrºení s vlastností
android:gravity,
ta se týká samotného obsahu
prvku a naopak zarovnává nap°íklad text v tla£ítku. Dal²í vlastností rozvrºení je
android:layout_weight,
která m·ºe nabývat 0 nebo 1. Pokud je u n¥k-
terého prvku v rozvrºení 1 a u ostatních 0, tak má tento prvek rozhodující právo se roztáhnout na zbytek rozvrºení, zatímco ty s 0 z·stanou stejn¥ velké.
android.widget.TableLayout - Je roz²í°enou variantou p°edchozího rozvrºení a
chová
se
jako
tabulka,
android.widget.TableRow
m·ºeme
do
n¥j
vkládat
°ádky
pomocí
a tak rozd¥lovat prostor vertikáln¥ a do °ádk·
pak umis´ujeme jednotlivé prvky, které tvo°í sloupce. Mezi °ádky je vazba na rozm¥ry jednotlivých sloupc·, takºe prvky ve stejném sloupci mají stejnou ²í°ku ve v²ech °ádcích. Prvky nereagují na hodnotu tavenou na tahovat
wrap_content. v
p°ípad¥
android:layout_width
nas-
Aby rozvrºení v¥d¥lo, které sloupce je moºno roz-
pot°eby,
m·ºeme
tak
specikovat
pomocí
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
30
android:stretchColumns £ísla sloupc· odd¥lená £árkou (za£ínající 0), naopak pomocí
android:shrinkColumns
ty které je moºné zmen²ovat.
android.widget.RelativeLayout
- Prvky se zde umís´ují tak, aby byly
umíst¥ny na ur£itém míst¥ vzhledem k jinému prvku k rozvrºení nebo vzhledem k rozvrºení samotnému.
android.widget.AbsoluteLayout s ohledem na pozice
- Prvky se umis´ují na p°esné pozice
android:layout_x
a
android:layout_y
relativn¥
vzhledem k umíst¥ní rozvrºení. Toto rozvrºení je doporu£uji pouºívat jen ve specických p°ípadech, jako v t¥ch, kdy pozice a rozm¥ry prvk· po£ítáme sami ru£n¥, jinak se vystavujete riziku toho, ºe vám rozvrºení bude vystupovat mimo obrazovku nebo se budou prvky nep°irozen¥ p°ekrývat.
android.widget.FrameLayout
- Je optimalizován na aktuální zobrazení
jediného prvku. V²echny vloºené prvky se umís´ují vzhledem k rozloºení, takºe se budou p°ekrývat. Vhodným pouºitím tohoto layoutu je p°ípad, kdy máme n¥kolik prvk· v tomto jednom rozli²ení a chceme aby byl vid¥t jen jeden z prvk·.
3.3 Prvky GUI V této kapitole proberu v²echny základní prvky grackého uºivatelského rozhraní, které jsou v Androidu k dispozici. U t¥ch nejd·leºit¥j²ích i v p°íkladech p°iblíºím r·zné zp·soby pouºití.
3.3.1
Text (TextView) a textové pole (EditText)
Text je jednoduchý prvek, který je t°ídy
android.widget.TextView
textový popisek. Tento popisek je uloºen ve vlastnosti
a slouºí jako
android:text
a lze mu
hodnot,
t°ída
nastavit mj. barvu, velikost a font. Textové
pole
slouºí
ke
vstupu
textových
jeho
je
android.widget.EditText. D·leºitou vlastností je android:intputType, který specikuje jaké znaky je moºné do polí£ka psát, p°ípadn¥ zda má být pouºito automatické dopl¬ování a dal²í. Oba prvky je moºné vid¥t na obrázku 10. Zadaný text z pole dostaneme takto:
String text=editText.getText().toString();
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
31
Obrázek 10: Text a textové pole
3.3.2
Tla£ítko (Button) a listenery
Tla£ítko
je
základní
prvek,
android.widget.Button.
který
vykonává
n¥jakou
akci,
jeho
t°ída
je
Hlavní reakce na tla£ítku je klik (zpravidla dotyk na
dotykové obrazovce nebo stisknutí trackballu/p°íslu²ného potvrzovacího tla£ítka). Podobn¥ jako v jiných GUI Javových frameworcích se zde pouºívá listener·. Zaregistrujeme p°íslu²ný listener, který pouºívá dané rozhraní:
Button tlacitko = (Button)activity.findViewById(R.id.tlacitko) ; tlacitko.setOnClickListener(new View.OnClickListener() {
//
tady vzniká anonymní vnitˇ rní tˇ rída public void onClick(View v) { //tady nˇ eco udˇ elej } }); Tento listener lze zaregistrovat na v¥t²in¥ prvk·. Není v²ak jediným svého druhu, máme dal²í typy listener·, které pouºíváme v následujících p°ípadech:
View.OnLongClickListener
- pokud stiskneme dotykovou obrazovku a
drºíme jí del²í dobu, nebo na del²í stisk trackballu
View.OnFocusChangeListener tuální zam¥°ení
21
- pokud se zm¥ní (získá nebo ztratí) ak-
polí£ka
View.OnKeyListener
- pokud stiskneme klávesu
View.OnTouchListener
- pokud je proveden dotyk nebo se naopak dotýkat
p°estaneme
View.OnContextMenuListener více k nabídkám v kapitole 3.3.6
- pokud se má otev°ít kontextová nabídka,
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
32
Obrázek 11: Varianty tla£ítek
Dal²ími variantami tla£ítek jsou tla£ítka ukázána na obrázku 11.:
android.widget.ImageButton
- obrázková tla£ítka
android.widget.ToggleButton android.widget.CheckBox
- zatrhávátka
android.widget.RadioButton
3.3.3
- p°epínací tla£ítka za²krtávátka
- radiobuttony
Adaptérové prvky a adaptéry
Mnoho prvk· v Androidu zobrazuje n¥jaká data, £asto p°ímo z n¥kterého poskytovatele obsahu (viz. kapitola 2.3.3). Zobrazují tak seznamy t¥chto dat. Propojení mezi daty a prvkem GUI zaji²´uje objekt, který se nazývá
adaptér. Je n¥kolik druh· adaptér·
a m·ºeme od nich odvozovat své vlastní adaptéry:
android.widget.ArrayAdapter
- tento adaptér mapuje jeden datový
sloupe£ek uloºený v poli na jeden prvek v rozvrºení
android.widget.CursorAdapter
- tento adaptér mapuje jeden datový
sloupe£ek uloºený v kurzoru na jeden prvek v rozvrºení
android.widget.SimpleAdapter ArrayListu
- tento adaptér mapuje data uloºená v
na p°íslu²né prvky v rozloºení, m·ºe mapovat na více prvk·
android.widget.ResourceCursorAdapter
- tento adaptér mapuje jeden
datový sloupe£ek uloºený v kurzoru na jeden prvek v rozvrºení
android.widget.SimpleCursorAdapter kurzoru na prvky v rozvrºení
- tento adaptér mapuje data z
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
Obrázek 12: ListView v
Jedním z prvk· vyuºívající adaptéry je
33
PrikladProvideru
android.widget.ListView,
slouºí k zobrazení posuvného seznamu (viz. obrázek 12 a p°íklad
který
PrikladProvideru na
CD v p°íloze A). Dal²í £asto pouºívané prvky, které pouºívají adaptéry jsou:
android.widget.GridView - který prvky zarovnává na rozdíl od ListView do m°íºky
android.widget.Spinner
- prvek, který je z klasických GUI znám pod po-
jmem combobox (vyskakovací roletové menu)
3.3.4
Toust (Toast)
Tousty jsou krátké texty, které se zobrazí na obrazovce po dobu zpravidla n¥kolika sekund:
Toast.makeText(getApplicationContext(), "Ahoj svˇ ete!", 1).show (); Slouºí k okamºitému upozorn¥ní uºivatele. Pouºity jsou také v
PrikladIntenty
(viz. CD - p°íloha A). 21 k
zam¥°ení polí£ka dochází pokud na n¥j klikneme, pokud klikneme jinam zam¥°ení se ztrácí
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
3.3.5
34
Notikace
Android disponuje systémem notikací, které upozor¬ují uºivatele na v²echny d·leºité události, ke kterým do²lo nebo které probíhají. Notikace jsou v grackém rozhraní na dotykovém displeji dostupné tahem za horní li²tu sm¥rem dol· (viz. obrázek 13). Obsahují typicky informace o do²lých SMS, zme²kaných hovorech, apod. Také zp·sobují blikání signaliza£ní diody, spu²t¥ní zvuku a vibraci telefonu.
Obrázek 13: Systém notikací v Androidu
K systému notikací m·ºeme p°istupovat metodou
Context.NOTIFICATION_SERVICE),
která
android.app.NotificationManager. denovány objektem typu
.PendingIntent,
vrátí
objekt
typu
Na n¥m lze spou²t¥t notikace, které jsou
android.app.Notification,
notikace - ikonu a textový popis a tzv.
getSystemService(
odloºený intent,
kde lze denovat vzhled
ten je typu
android.app
vytvá°í se za pomocí b¥ºného intentu a zp·sobí pak vyvolání
p°íslu²ného intentu p°i klepnutí na notikaci. P°íklad na notikaci je
3.3.6
v PrikladVlakna
(viz. CD - p°íloha A).
Tvorba nabídek
Jako v kaºdém grackém uºivatelském rozhraní, tak ani na Androidu, nesmí chyb¥t nabídky (menu). V p°ípad¥ Androidu jsou omezeny na t°i typy nabídek:
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
35
nabídka voleb (options menu) - nabídka, která se na aktivit¥ zobrazí po stisknutí
Menu, obsahuje aº ²est poloºek, které mají ikony, pokud máme více neº poloºek, je moºné dal²í roz²í°enou nabídku zobrazit pomocí volby Více
tla£ítka ²est
kontextová nabídka (context menu)
- textová nabídka zobrazující se na dlouhý
stisk (podrºení) na p°íslu²ném prvku GUI, se kterým je svázána
podnabídka (submenu) - podnabídku denujeme, jako sou£ást p°edchozích dvou typ· nabídek, je textová a není moºné do ní zano°ovat dal²í podnabídky
Nabídky je moºné denovat v XML zdrojích typu nabídky (viz. kapitola 3.1) nebo p°ímo v kódu. Ve vývojovém prost°edí Eclipse je op¥t dostupný p°ehledný gracký editor t¥chto soubor·. Nabídky generujeme pomocí metod na aktivit¥ pro nabídky voleb a
onCreateContextMenu()
onCreateOptionsMenu()
pro kontextové nabídky. Kontextové
nabídky je nutné je²t¥ registrovat na prvek a to je moºné provád¥t p°ímo v metod¥
onCreate()
na aktivit¥ pomocí metody
registerForContextMenu():
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); registerForContextMenu(findViewById(R.id.EditText01)); } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu1, menu); return true; } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); if (v.getId()==R.id.EditText01) menu.add("Testovací položka"); } P°íklad na nabídky je nazvaný
3.3.7
PrikladMenu
(viz. CD - p°íloha A).
Dialogy
V kapitole 3.3.4 jsem vám p°edstavil tousty jako zp·sob okamºitého upozorn¥ní uºivatele. Pokud chceme po uºivateli potvrdit n¥jakou akci nebo informovat o probíhající £innosti na aktivit¥, je vhodné pouºít komplexn¥j²í systém dialog· (viz. obrázek 15). Dialogy je moºné rozd¥lit na tyto typy:
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
36
Obrázek 14: Nabídka voleb a podnabídka
dialogy upozorn¥ní (android.app.AlertDialog) - slouºí k zobrazení zprávy, která obsahuje maximáln¥ t°i tla£ítka
dialogy pr·b¥hu (android.app.ProgressDialog) - slouºí k zobrazení pr·b¥hu n¥jaké £innosti, £innost je pak provád¥na v separátním vlákn¥ a aktualizaci dialogu provádí zprávami do hlavního vlákna p°es
android.os.Handler.
dialogy výb¥ru data a £asu (android.app.DatePickerDialog a
android.app.TimePickerDialog)
uºivatelské dialogy
- dialogy, které mají asociované rozvrºení (kapitola 3.2) a
díky tomu mohou obsahovat libovolné prvky
P°íklad na dialogy je sou£ástí
3.3.8
PrikladMenu
(viz. CD - p°íloha A).
Dal²í prvky
Android obsahuje mnoho dal²ích prvk· GUI. D¥d¥ním od p°íslu²ných t°íd t¥chto prvk· m·ºeme vytvá°et dal²í vlastní prvky. D·leºité je zmínit n¥kolik dal²ích prvk·, které se £asto v aplikacích pouºívají:
android.widget.ImageView
- prvek zobrazující obrázek
3 NÁVRH GRAFICKÉHO UIVATELSKÉHO ROZHRANÍ (GUI)
37
Obrázek 15: R·zné typy dialog·
android.widget.TabWidget,android.widget.TabHost - zobrazení rozvrºení po p°epínatelných panelech
android.webkit.WebView
- prvek slouºící k zobrazení webové stránky,
vykresluje stránku pomocí jádra prohlíºe£e WebKit, m·ºeme ho vyuºít pro integraci aplikací Androidu z webem
com.google.android.maps.MapView
- prvek Google Mapy, pro zobrazení
mapových podklad·, £asto je pouºíván v aplikacích, které vyuºívají zji²´ování polohy p°ístroje
Mnoho p°íklad· na pouºití t¥chto prvk· najdeme na stránkách Android Developers [1].
4 MONOSTI APLIKANÍHO FRAMEWORKU
38
4 Moºnosti aplika£ního frameworku V p°edchozích kapitolách jsem popsal st¥ºejní principy, které je nutné v¥d¥t pro vývoj aplikací pro Android. V této kapitole vám p°iblíºím moºnosti, které Android nabízí pro tvorbu ²iroké ²kály aplikací.
4.1 Funkce telefonního p°ístroje Mezi základní funkce mobilního telefonního p°ístroje (mobilu), na kterém se dnes Android nej£ast¥ji pouºívá, jsou hlasové sluºby a MMS/SMS. Pomocí t°íd v balí£ku
android.telephony
m·ºeme zejména odesílat SMS zprávy a zji²´ovat stav sít¥.
tení zpráv probíhá p°es content providery pro oba typy zvlá²´
content://sms
a
content://mms-sms,
content://mms.
p°ípadn¥
Toto rozhraní zatím není
standardizované a je dostupné jen díky p°ítomnosti aplikace pro SMS/MMS zprávy (com.android.mms) dodávané s AOSP. tení zpráv je zpracováno v
Provideru
Priklad-
(viz. CD - p°íloha A).
4.2 Sí´ové sluºby P°ístroje s Androidem jsou zam¥°ené na komunikaci p°es internet, je nutné aby aplika£ní framework obsahoval podporu pro sí´ové sluºby. Android obsahuje podporu
22
pro protokoly IPv4 a i nastupujícího IPv6
. Sí´ové funkce jsou pln¥ kompatibilní s
Java SE a v²echny známé t°ídy naleznete v balí£ku v
android.net.
java.net.
Dal²í t°ídy naleznete
D·leºitou sou£ástí je HTTP knihovna, kterou m·ºete pouºít ke ko-
munikaci s r·znými zdroji p°es HTTP, od Apache v balí£cích
org.apache.http.*.
4.3 Multimediální funkce V balí£ku
android.media
nalezneme t°ídy, které je moºné pouºít k p°ehrávání a
záznam multimediálního obsahu ve form¥ zvuku a videa. Android podporuje celou °adu audio a video formát· (viz. tabulka .4).
4.4 Loka£ní sluºby, senzory a roz²í°ená realita Moderní mobilní telefon je vybaven celou °adou hardwarových senzor·, které umoº¬ují zjistit stav telefonu vzhledem k prost°edí. Telefony vy²²í t°ídy osazované Androidem 22 ve
verzi Android 2.1 není je²t¥ pln¥ podporován v uºivatelském rozhraní
4 MONOSTI APLIKANÍHO FRAMEWORKU
39
Médium
Formát
P°ehrávání / záznam
Typ souboru
Zvuk
AAC LC/LTP
p°ehrávání
HE-AACv1 (AAC+)
p°ehrávání
HE-AACv2
p°ehrávání
AMR-NB
p°ehrávání i záznam
*.3gp
AMR-WB
p°ehrávání
*.3gp
MP3
p°ehrávání
*.3gp, *.mp4, *.mp4a *.3gp, *.mp4, *.mp4a *.3gp, *.mp4, *.mp4a
*.mp3 *.mid, *.xmf,
MIDI
*.mxmf, *.rtttl,
p°ehrávání
*.rtx, *.ota, *.imy
Obrázek
Video
Ogg Vorbis
p°ehrávání
*.ogg
PCM/WAVE
p°ehrávání
*.wav
JPEG
p°ehrávání i záznam
*.jpg
GIF
p°ehrávání
*.gif
PNG
p°ehrávání
*.png
BMP
p°ehrávání
*.bmp
H.263
p°ehrávání i záznam
*.3gp, *.mp4
H.264 AVC
p°ehrávání
*.3gp, *.mp4
MPEG-4 SP
p°ehrávání
*.3gp, *.mp4
Tabulka 4: Multimediální formáty podporované Androidem [1]
23
obsahují ve své výbav¥ GPS, k ur£ení velmi p°esné polohy
telefonu kdekoli na plan-
et¥. V p°ípad¥, ºe není GPS dostupné, zapnuté nebo nemá signál je poloha ur£ována z
24
poloh vysíla£· mobilní sít¥
, p°ípadn¥ z registrovaných bod· wi- sít¥ nebo na základ¥
IP adresy. Dal²ím senzorem je elektronický kompas, díky kterému je moºné ur£it nato£ení telefonu vzhledem k magnetickým pól·m planety a v neposlední °ad¥ obsahují akcelerometr (m¥°í zrychlení p°i pohybu p°ístroje a jeho nato£ení v prostoru). Android podporuje i dal²í senzory jako m¥°i£e tlaku, teploty a vzdálenosti od p°ekáºky, ale jsou mén¥ vyuºívané a nejsou £asto v za°ízeních dostupné. API senzor· je moºné najít v balí£ku
android.hardware,
loka£ní sluºby pak v balí£ku
android.location.
Jelikoº dokáºeme ur£it polohu telefonu a jeho nato£ení v prostoru, tak ve spolupráci s kamerou na telefonu je moºné ur£it, kterým sm¥rem je nato£ená kamera. Pokud máme zapnutý displej s obrazem kamery, je moºné ur£it, kterým sm¥rem se p°es telefon díváme. Spolu s tím, ºe z internetových sluºeb víme, kde jsou umíst¥né v okolí r·zné objekty (restaurace, hotely, obchody, turistické atrakce, apod.), m·ºeme 23 typicky
5-20m, viz. nap°. test p°esnosti GPS v [21] z GSM lze získat aº 100m v závislosti na hustot¥ pokrytí vysíla£i [22]
24 p°esnost
4 MONOSTI APLIKANÍHO FRAMEWORKU
40
tak p°esn¥ ur£it i sm¥r k takovému objektu a jeho pozici p°ímo promítnout na displej telefonu sou£asn¥ s obrazem kamery a díky tomu vidíme skute£né objekty spolu s t¥mi virtuálními. Tento princip se nazývá
roz²í°enou realitou (augmented reality ).
4.5 SQLite SQLite [23] je v poslední dob¥ stále populárn¥j²í open-source souborová databáze. V Androidu ji pouºívá v¥t²ina aplikací a pouºívá se také k realizaci poskytovatel· obsahu (viz. kapitola 2.3.3). Na databázi se pouºívá dotazovací jazyk SQL, který je z velké £ásti kompatibilní se standardem SQL92. K databázi p°istupujeme p°es t°ídy balí£ku
android.database.sqlite. Nástroje pro práci s touto databází jsou sou£ástí Android SDK dostupné p°es
adb, m¥ samotnému se v²ak osv¥d£il nástroj SQLite Spy [24], který má uºivatelské rozhraní.
ladící nástroj p°ív¥tivé
4.6 OpenGL ES Hardware mobilních telefon· dne²ka je dostate£n¥ výkonný pro provozování náro£ných multimediálních a grackých systém·. ipy v telefonech jsou dnes b¥ºn¥ schopné akcelerovat 3D graku. Na mobilní za°ízení byla vytvo°ena vlastní verze grackého standardu OpenGL, nazvaná OpenGL ES (for Embedded Systems). Ve verzích od Androidu 1.6 po 2.1 je nyní podporována verze OpenGL ES 1.0, která se p°ekrývá s moºnostmi klasické OpenGL 1.3 [1]. Tato vlastnost je zajímavá zejména pro herní vývojá°e a s ním spojený rozvíjející se trh mobilních her. Na Androidu nalezneme OpenGL ES v balí£ku
android.opengl.
4.7 Android Native Development Kit (Android NDK) Výkon virtuálního stroje Dalvik m·ºe být v mnoha ohledech omezující. V p°ípad¥, ºe pot°ebujeme vytvá°et aplikace, které jsou kritické na výkon, tak je moºné p°evedení £ásti výpo£etní logiky aplikace do nativního kódu, který je psán v jazyce C nebo C++ a p°eloºen p°ímo do kódu p°íslu²ného procesoru. Ztrácíme výhodu snadné p°enositelnosti aplikace, ale získáme podstatn¥ vy²²í výkon. Prost°edí Android NDK získáme op¥t ze stránek Android Developers [1]. V dob¥ psaní této práce jsou v Android NDK podporovány pouze procesory ARM. Prost°edí obsahuje hlavi£ky základních knihoven pro jazyk C/C++, hlavi£ky dal²ích knihoven, hlavi£ky OpenGL ES 1.x a 2.0 a sadu p°eklada£·. Sou£ástí je i n¥kolik vzorových aplikací.
4 MONOSTI APLIKANÍHO FRAMEWORKU
41
4.8 WebKit, HTML5 a tvorba mobilních webových aplikací Jádro Webkit integrované v Androidu je velmi moderní s podporou nejnov¥j²ích webových technologií. Stejné jádro se pouºívá nap°íklad v prohlíºe£ích Chrome a Safari na osobních po£íta£ích a v prohlíºe£i Safari v za°ízeních s opera£ním systémem iPhone OS a nelezneme jej i v za°ízeních se systémem Symbian. Podporuje v²echny podstatné d·leºité funk£nosti jako je JavaScript a CSS. Je v nasnad¥, ºe díky tomu m·ºeme vytvo°it webovou aplikaci, která bude kompatibilní se za°ízeními se zcela odli²nými opera£ními systémy, jak s mobily tak s osobním po£íta£em. Velký rozvoj aplikací zaloºených na JavaScriptu a AJAXu v dne²ní dob¥ zvy²uje ²ance, ºe by webové prohlíºe£e jednoho dne mohly zcela nahradit opera£ní systém. Bohuºel zde do stále existuje omezení na nutné a trvalé p°ipojení do internetu, provoz lokálních webových aplikací zatím závisí na pokra£ující implementaci nového webového standardu HTML5 [25]. Ve kterém jsou nov¥ specikány d·leºité funkce jako je rozhraní pro ur£ování polohy za°ízení, práce s lokální databází a podpora pro lokální oine aplikace. N¥které funk£nosti jsou jiº prohlíºe£em v Androidu podporovány, jiné lze realizovat p°es rozhraní Google Gears [26], které by m¥lo být do budoucna zcela nahrazeno HTML5. V dob¥ psaní této práce není standard HTML5 stále dokon£en a r·zné prohlíºe£e implementují jen £ásti z tohoto standardu. Pokud budeme chtít vyvíjet webové aplikace orientované p°ímo pro prost°edí Android, je pro programátora dostupný webový pohled t°ídy (viz. také
PrikladIntenty
android.webkit.WebView
na CD - p°íloha A). Díky n¥mu je moºné webové aplikace
integrovat p°ímo do Androidích aplikací. Zajímavý zp·sob se pak nabízí s vyuºitím metody
addJavascriptInterface(),
kde je moºné Javový objekt v aplikaci ex-
portovat do JavaScriptu a volat na n¥m p°íslu²né metody p°ímo z JavaScriptu. Moºnosti tohoto zp·sobu jsou velmi zajímavé a je tak moºné vyuºívat funk£ností Androidu p°ímo z JavaScriptu.
42
Záv¥r Android je bezpochyby zajímavým po£inem na poli mobilních opera£ních systém·. Je systémem s otev°eným zdrojovým kódem, díky tomu p°iná²í výrobc·m mobilního hardware a software vysokou exibilitu p°i vývoji svých produkt·. V první kapitole jsem p°iblíºil výhody a nevýhody prost°edí pro b¥h aplikací zaloºeném na virtuálním stroji Dalvik, jeho souvislosti a rozdíly s prost°edím a virtuálním strojem Javy pouºívaným na osobních po£íta£ích. Tento rozdíl spo£ívá v odli²né instruk£ní sad¥ virtuálního stroje a jeho optimalizaci pro provoz na mobilních za°ízeních. Zárove¬ v²ak není tak výrazn¥ omezený jako virtuální stroje Javy ME. V druhé kapitole jsem shrnul základní principy pouºité p°i vývoji aplikací. Zejména pak rozd¥lení aplikace na aktivity, sluºby a p°ijíma£e vysílání. Dal²í významnou £ástí této kapitoly je popis systému intent·, univerzálních zpráv p°edávaných mezi aktivitami, které ur£ují, jaká data a jak je má aktivita zpracovávat. Systém intent· p°iná²í moºnost nahradit jednotlivé aplikace systému aplikacemi zcela vlastními, vlastnost v jiných systémech zcela nevídaná nebo dokonce neºádoucí. P°ehledný popis grackého uºivatelského rozhraní s ohledem na pouºití jednotlivých prvk· GUI byl obsahem t°etí kapitoly. V poslední kapitole jsem popsal moºnosti aplika£ního frameworku, jeho vyuºití ke tvorb¥ interaktivních aplikací roz²í°ené reality, aplikací s 3D grakou a webových aplikací. Nastínil jsem zde d·leºité moºnosti platformy jako takové, tato £ást je ur£ena zejména pro orientaci v této problematice, protoºe není popsána do detail· implementace jako ostatní kapitoly. Sada p°íklad· dodaných na CD v p°íloze A obsahuje zdrojové kódy, které názorn¥ ukazují pouºití základních princip· Androidu, které jsou obsahem prvních t°í kapitol.
43
Conclusion Android is doubtless very interesting mobile operating system. Its open-source nature brings great exibility to the software and hardware manufacturers. In the rst chapter I described advantages and disadvantages of Dalvik virtual machine and its simmilarities and dissimilarities with Java virtual machine that is commonly used on desktop computers. This dierence lies in dierent instruction set of the Dalvik virtual machine and its optimization for mobile devices. However Dalvik is not so limited as Java ME virtual machines. In the second chapter I brought together basic principles that are used in application development on Android, especially activities, services and broadcast receivers. Another important part of this chapter is description of the system of intents, messages passed on between activities that specied what data and how the data is processed. The intent system brings capability of replacing any system application with your own. This capability is very uncommon or unwanted in other mobile operating systems. The third chapter contained transparent overview of graphical user interface on Android and usage of each one of the GUI components. In the last chapter I described capabilities of application framework and its usage to developing of interactive applications with augmented reality, 3D applications and web applications. This part was intended to be a guideline for orientation in this issue. The set of exapmples in Appendix A contains source codes that illustrate use of key Android principles.
SEZNAM LITERATURY A ZDROJ
44
Seznam literatury a zdroj· Android Open Source Project.
[1] Open Handset Alliance: URL
Kv¥ten 2010.
HTC Dream.
[2] Wikipedia: URL
List of Android devices.
[3] Wikipedia: URL [4]
[5]
[6]
[7]
[8]
Embedded Linux Wiki. Leden 2010. URL iPhone OS Overview. 2009. URL S60 5th Edition C++ Developer's Library v2.1. 2009. URL MicroEmulator 2.0.4 [software]. Leden 2010. URL J2ME Runner [Android aplikace]. URL
[9] Sayed Y. Hashimi, S. K.: [10]
Pro Android.
Apress, 2009.
Dalvik Virtual Machine. 2007. URL
[11] Tim Lindholm, F. Y.:
The Java Virtual Machine Specication.
Druhé vydání,
1999. URL
ClassFileAnalyzer 0.7.0 [software]. Kv¥ten 2010.
[12] Roeder, H.: URL
SEZNAM LITERATURY A ZDROJ [13]
[14]
45
Dedexer 1.11 [software]. URL Android's Dalvik to be JIT boosted. Listopad 2009. URL Android SDK [software].
[15] Open Handset Alliance: URL
Eclipse [software].
[16] The Eclipse Foundation: URL [17]
[18]
2010.
QEMU [software]. URL JUnit [testovací framework]. URL
[19] Burnette, E.:
form.
Hello, Android: Introducing Google's Mobile Development Plat-
Pragmatic Bookshelf, 2009.
[20] Guilfoyle, J.:
Axml2xml, Tool to read Android binary XML les [software].
B°ezen 2008.
URL
GPS accuracy and Layar usability testing. Únor 2010. URL
[21] MediaLAB Amsterdam:
[22] Christopher Drane, M. M.; Scott, C.: Positioning GSM Telephones.
munications Magazine, [23]
[24]
IEEE Com-
Duben 1998.
SQLite 3.x [software]. 2010. URL SQLite Spy [software]. Prosinec 2009. URL HTML5 W3C Working Draft. Kv¥ten 2010.
[25] World Wide Web Consortium (W3C): URL
SEZNAM LITERATURY A ZDROJ
46
Google Gears [API]. 2010.
[26] Google, Inc.: URL
N¥které obrázky v této práci jsou p°evzaty z práce vytvo°ené a sdílené v Android Open Source Project [1] a uºité ve smyslu podmínek Creative Commons 2.5 Attribution License.
SLOVNÍK POJM A ZKRATEK
47
Slovník pojm· a zkratek 3G
- sít¥ t°etí generace, jinak také International Mobile Telecommunications-2000, nové mobilní telekomunika£ní standardy °e²ící zvy²ující se poºadavky na rychlosti datových sluºeb
AJAX -
asynchronous JavaScript and XML, v podstat¥ se jedná o asynchroní komu-
nikaci z JavaScriptu se serverem p°es HTTP protokol
aktivita API -
samostatná £ást aplikace °e²ící vlastní funk£ní logiku aplikace
Application Programming Interface (Aplika£ní programové rozhraní)
aplika£ní framework -
soubor knihoven ur£ených k vývoji aplikací, s p°esn¥ deno-
vanými rozhraním a t°ídami, které zna£n¥ urychlují vývoj
ARM -
Advanced RISC Machine, architektura procesor· pouºívaná zejména v mo-
bilních za°ízeních. Stejnojmenná spole£nost pak vlastní práva na návrhy t¥chto procesor·.
AVD -
Android Virtual Device, emulované za°ízení s Androidem, lze nastavit na r·zné parametry, zejména r·zná rozli²ení displeje
bytecode CPU -
soubor instrukcí vykonávaných virtuáním strojem (nap°. Java VM, Dalvik,...)
Central Processing Unit, základní jednotka po£íta£e, vykonává vlastní instrukce programu
CRUD -
create, read, update,delete - základní operace pro práci s daty v databázi
nebo jiném úloºi²ti
Dalvik DDMS -
virtuální stroj, ve kterém b¥ºí na Androidu ve²keré aplikace Dalvik Debug Monitor Server, ladící nástroj v prost°edí Eclipse, slouºící k
monitorování Androidu a jeho virtuálního stroje Dalvik
distribuce opera£ního systému -
opera£ní systém (jeho jádro) v£etn¥ dodávaných
aplikací, zejména se s tímto pojmem setkáváme u Linuxu
EDGE -
Enhanced Data rates for GSM Evolution, vylep²ená forma datové sluºby
nad GSM sítí
FreeType -
otev°ená knihovna pro vykreslování TrueType font·
SLOVNÍK POJM A ZKRATEK
gadget -
48
speciální v¥t²inou jednoú£elové aplikace, zobraující se na pracovní plo²e, je
moºné je r·zn¥ po plo²e posouvat
getter, setter
- sady metod na t°íd¥ slouºících ke £tení a zápisu prom¥nných
svázaných s objektem
Google -
americká spole£nost stojící zejména za stejnojmeným internetovým vyh-
ledáva£em, v poslední dob¥ se orientuje na mnohé jiné produkty, zejména pak vývoj opera£ního systému Android, £len OHA
GPRS GPS -
General Packet Radio Service , datová sluºba postavená nad sítí GSM
Global Positioning System, americký satelitní naviga£ní systém, dokáºe ur£it polohu za°ízení s p°esností aº 5m
GUI -
Graphical User Interface, gracké uºivatelské rozhraní
HTC -
£ínský výrobce mobilních telefon·, £len OHA, specializující se na platformy
Windows Mobile a Android
instruk£ní sada -
soubor p°íkaz· (instrukcí) zpracovávaných procesorem, zejména
se jedná o aritmetické instrukce, instrukce pro práci s pam¥tí a komunikaci s okolím procesoru
intent -
zpráva p°edávaná v Androidu mezi aktivitami, v podstat¥ °íká, co chceme
ud¥lat a systém se nám sám p°izp·sobí volbou správné akce a spu²t¥ním správné aktivity.
iPhone OS Java -
mobilní opera£ní systém pouºívaný rmou Apple
objektov¥ orientovaný programovací jazyk, se silným statickým typováním
Java ME -
Java Microedition, platforma pro b¥h aplikací na n¥kterých mobilních
telefonech
Java package -
logické seskupení t°íd a rozhraní v jazyce Java do jednoho celku,
slouºí primárn¥ k zp°ehledn¥ní a organizaci kódu
JavaScript -
programovací jazyk pouºívaný zejména ve webovém prohlíºe£i pro
funkcionalitu webových aplikací na stran¥ klienta
JIT kompilace -
Just-in-time kompilace p°ekládá p°ímo za b¥hu programu instrukce
virtuálního stroje na instrukce fyzického procesoru daného za°ízení
SLOVNÍK POJM A ZKRATEK
JNI
49
- Java Native Interface, rozhraní, které umoº¬uje p°ímé volání funkcí napsaných v nativním kódu z kódu b¥ºícího ve virtuálním stroji
jádro opera£ního systému (kernel) -
základní £ást OS starající se mj. o alokaci
pam¥ti, p°ístup k hardware, °ízení proces· a práci se souborovým systémem
libc
- GNU C knihovna, obsahuje v²echny pot°ebné základní funkce pro aplikace
Linux -
open-source unix-like opera£ní systém, snaºí se být kompatibilní s unixovými
systémy
listener
- na n¥jakou událost, nap°íklad kliknutí my²i zaregistruji na grackém prvku
t°ídu, která má metody, které obslouºí danou událost
machine code -
strojový kód, soubor instrukcí vykonávaných fyzickým procesorem
(nap°. ARM, x86,...)
manifest -
XML soubor popisující konguraci aplikace vzhledem k za°ízení
Media Framework -
knihovny pro práci se zvukem, obrázky a videem + kodeky
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
MIME a Content typy OHA -
- specikují ú£el a typ p°ená²ených dat
Open Handset Alliance
open-source -
Pod open-source se ozna£ují zpravidla softwarové produkty, které
jsou ²í°eny spolu se zdrojovým kódem (£asto zdarma), podmínky modikace kódu a tvorba dal²ího software zaloºených na otev°eném kódu pak ur£uje opensource licence. Zpravidla je to dovoleno, n¥kdy pod podmínkou, ºe musí být zachována stejná licence, tedy nutnost stejn¥ otev°ít i kód va²eho software.
OpenGL ES proces -
knihovna pro nízkoúrov¬ovou 2D a 3D graku
proces je instance po£íta£ového programu v pam¥ti, b¥ºn¥ v opera£ním sys-
tému b¥ºí více proces· sou£asn¥ (multiprocessing) a m·ºe mezi nimi p°epínat (multitasking)
QEMU -
virtualiza£ní nástroj simulující kompletní po£íta£
Qualcomm -
americký výrobce £ip· a procesor·, £len OHA, vyrábí ARM procesory
architektury Snapdragon
RESTu -
Representational State Transfer, architektura p°ístupu k webovým zdroj·m
s plným vyuºitím HTTP metod a specikací prost°edku pomocí URL
SLOVNÍK POJM A ZKRATEK
SDK -
50
Software development kit, sada nástroj· slouºících k vývoji software
SGL -
knihovna pro 2D graku
singleton SMS -
t°ída ke které m·ºe být vytvo°ená pouze jedinná instance objektu
Short Message Service, komunika£ní sluºba postavená nad sítí GSM, pouºívá
se k p°enosu krátkých textových zpráv mezi mobilními za°ízeními
souborová databáze -
databáze, kde jsou data uloºena v jedinném souboru, výhodou
je tak moºnost rychle celou databázi p°enést z jednoho místa na druhé pouhým kopírováním souboru
SQL -
Structured Query Language, dotazovací jazyk pouºívaný k získávání dat z databáze a také k jejich úprav¥
SQLite -
knihovna pro práci s databází ve form¥ souboru, p°ístup k ní je zaji²t¥n
p°es jazyk SQL
SSL -
Secure Sockets Layer, forma zabezpe£ené ²ifrované komunikace po síti
Surface Manager
- knihovna starající se o správné zobrazení 2D a 3D vrstev z
r·zných aplikací
Symbian -
mobilní opera£ní systém pouºívaný zejména rmou Nokia
T-Mobile -
mobilní operátor p·sobící v mnoha zemích, majoritním vlastníkem je
Deutsche Telekom AG, jeden z £len· OHA, pod jeho zna£kou byl vydán první komer£ní telefon s Androidem, T-Mobile G1
tag
- je jednotka struktury v textové reprezentaci XML, nap°. test
unit testy
- druh automatických test· na úrovni kódu programu, který testuje jed-
notlivé t°ídy nebo knihovny (jednotky - units), které jsou v programu pouºívány
UNIX, unix-like -
UNIX je registrovaná obchodní známka pro n¥které opera£ní sys-
témy vycházející z p·vodního UNICS systému vyvinutého v Bellových laborato°ích v roce 1969, unix-like systémy jako je Linux se snaºí být maximáln¥ kompatibilní s ostatními UNIXy a unix-like systémy
URI -
Uniform resource identier, textový °et¥zec identikující n¥jaký prost°edek, jak v internetu, tak v n¥jakém lokálním umíst¥ní, nap°. http://www.seznam.cz
URL -
Uniform Resource Locator, je URI, která ur£uje umíst¥ní prost°edku, nej£ast¥ji se s ní setkáme na webu ve form¥ webové adresy
SLOVNÍK POJM A ZKRATEK
URN -
51
Uniform Resource Name, je forma URI, která jednozna£n¥ identikuje pomocí
jména n¥jaký prost°edek
USB -
Universal Serial Bus, sériové rozhraní pro p°ipojování periferií k po£íta£i
userspace access -
uºivatelský p°ístup, prostor pro b¥h aplikací v unixových sys-
témech, kde je aplikace zna£né omezena ve svém p°ístupu k systému
virtuální metoda -
metoda, jejíº chování je ur£eno na základ¥ typu objektu aº p°i
b¥hu programu
virtuální stroj (virtual machine, VM) -
softwarová simulace jiného procesoru s
vlastní instruk£ní sadou
vlákno -
£ást programu ur£ená pro soub¥ºný (paralelní) b¥h, sdílí s programem
pam¥´, proto je t°eba dbát o kontrolu p°ístupu ke sdíleným zdroj·m
WebKit -
jádro webového prohlºe£e, které je standardní sou£ástí Androidu
webová sluºba -
aplika£ní programové rozhraní (API) zp°ístupn¥né p°es webový
protokol HTTP
X server
- protokol pro vykreslování grackého uºivatelského systému pouºívaný na
UNIXech a unixových systémech
x86
- architektura procesor· vycházející z p·vodního návrhu procesoru Intel 8086, pouºívaného v po£íta£ích IBM PC
XML ZIP -
Extensible Markup Language, jazyk pro strukturovanou reprezentaci dat
známý kompresní formát, pouºívá se jak pro JAR balí£ky, tak pro APK balí£ky
SEZNAM OBRÁZK
52
Seznam obrázk· 1
High-level pohled na architekturu Androidu [1]
. . . . . . . . . . . .
3
2
P°íklad instrukcí Java VM vs. Dalvik VM
. . . . . . . . . . . . . . .
6
3
Emulátor Androidu . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
4
Vývojové prost°edí Eclipse . . . . . . . . . . . . . . . . . . . . . . .
8
5
Debug kongurace . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
6
ivotní cyklus aktivity [1]
. . . . . . . . . . . . . . . . . . . . . . .
13
7
Vztahy aktivit a intent·
. . . . . . . . . . . . . . . . . . . . . . . .
15
8
Vyvolání implicitního intentu pro prohlíºení
odkazu . . . .
19
9
Povolení p°ístupových práv p°i instalaci . . . . . . . . . . . . . . . .
21
10
Text a textové pole
. . . . . . . . . . . . . . . . . . . . . . . . . .
31
11
Varianty tla£ítek
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
12
ListView v
13
Systém notikací v Androidu
PrikladProvideru
http://
. . . . . . . . . . . . . . . . . . . . . .
33
. . . . . . . . . . . . . . . . . . . . .
34
14
Nabídka voleb a podnabídka . . . . . . . . . . . . . . . . . . . . . .
36
15
R·zné typy dialog· . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
SEZNAM TABULEK
53
Seznam tabulek 1
Adresá°ová struktura Android projektu
. . . . . . . . . . . . . . . .
9
2
Typy zdroj·
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3
P°íklady alternativních zdroj·
. . . . . . . . . . . . . . . . . . . . .
27
4
Multimediální formáty podporované Androidem [1] . . . . . . . . . .
39
A PÍLOHA - CD
54
A P°íloha - CD Sou£ástí práce je CD s následujícím obsahem:
/android-1.6-src
- adresá° obsahující zdrojové kódy AOSP verze 1.6,
vhodné pro studijní ú£ely
/android-xmldump
- adresá° obsahující XML zdroj· a manifesty AOSP +
skript Axml2xml [20], vhodné pro studijní ú£ely
/bakalarka-src - zdrojové kódy této práce v LYXu, soubory BibTex a obrázky pouºité v této práci
/bakalarka-ucla111.pdf /priklady /tools
- bakalá°ská práce v PDF formátu
- *.apk zkompilované verze p°íklad·
- Android SDK a Eclipse
/workspace/PrikladIntenty /workspace/PrikladMenu
- p°íklad na intenty
- p°íklad na nabídky a dialogy
/workspace/PrikladProvideru /workspace/PrikladVlakna
- p°íklad na £tení poskytovatele obsahu
- p°íklad na vlákna a notikace
B P°íloha - P°íklad souboru manifestu <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="com.google.android.core" android:signature ="com.google" package="com.google.android.maps"> <uses-permission android:name="android.permission.READ_CONTACTS" / > <uses-permission android:name="com.google.android.maps.permission. READ_MY_MAPS" />
B PÍLOHA - PÍKLAD SOUBORU MANIFESTU
55
<uses-permission android:name="com.google.android.maps.permission. WRITE_MY_MAPS" /> <uses-permission android:name="android.permission.ACCESS_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission. ACCESS_ASSISTED_GPS" /> <uses-permission android:name="android.permission.ACCESS_CELL_ID" />
B PÍLOHA - PÍKLAD SOUBORU MANIFESTU
56
<meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> <provider android:name=".provider.MapsProvider" android:readPermission="com.google.android.maps.permission. READ_MY_MAPS" android:writePermission="com.google.android. maps.permission.WRITE_MY_MAPS" android:process="com.google. process.content" android:authorities="maps" android:syncable= "false" />