Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií
Studijní program: Aplikovaná informatika Obor: Informatika
Vývoj a publikace aplikace pro platformu Android BAKALÁŘSKÁ PRÁCE
Student
:
Ondřej Plevka
Vedoucí
:
Ing. Jarmila Pavlíčková
Oponent :
Mgr. Zbyněk Šlajchrt
2013
Prohlášení: Prohlašuji, že jsem bakalářskou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze které jsem čerpal.
V Praze dne 13. května 2013
.................................. Jméno a příjmení studenta
Poděkování Tímto bych chtěl poděkovat paní Ing. Jarmile Pavlíčkové za možnost volby vlastního téma a cenné připomínky během vedení mé práce. Dále bych chtěl poděkovat svým rodičům za skvělé zázemí pro vypracování této práce.
Abstrakt Cílem této práce je přiblížit čtenáři postupně průběh procesu vývoje a publikace aplikace na mobilní platformu Android, která je praktickou částí této práce. Tato aplikace se zabývá dynamickou správou sbírek na základě čárových či QR kódů. Mimo jiné umí komunikovat se vzdálenou databází na internetovém serveru. Postupné části procesu vývoje jako analýza, návrh a následná veřejná publikace jsou popsány v teoretické části této práce. Poslední část pojednává o možnostech propagace aplikace na internetu.
Klíčová slova Vývoj pro Android, Android aplikace, Google Play, čárový kód, QR kód
Abstract The aim of this bachelor’s thesis is to gradually familiarize the reader with the development process and publication of an application on the Android mobile platform. This is the practical part of this thesis. The application deals with the dynamic collections management based on barcodes or QR codes. Among other things, the application can communicate with a remote database on the web server. The gradual process of development as analysis, design and subsequent publication are described in the theoretical part of this thesis. The last part discusses the possibilities of promotion applications on the Internet.
Keywords Android development, Android application, Google Play, barcode, QR code
Obsah 1
Úvod 1 1.1 1.2 1.3 1.4
2
Vymezení tématu..............................................................................................................1 Důvodu výběru tématu ....................................................................................................1 Struktura práce ................................................................................................................1 Cíle práce ..........................................................................................................................2
Platforma Android ............................................................................................... 3 2.1 Historie Androidu.............................................................................................................3 2.2 Vývoj platformy Android [4] .............................................................................................4 2.3 Čárový a QR kód ..............................................................................................................8 2.3.1 Čárový kód ..........................................................................................................8 2.3.2 QR kód .................................................................................................................8 2.4 Komentovaná rešerše prací ............................................................................................9 2.4.1 Podobné aplikace..............................................................................................10
3
Analýza a návrh aplikace .................................................................................. 11 3.1 Základní analýza ............................................................................................................11 3.1.1 Základní scénáře ...............................................................................................12 3.2 Analýza realizace ...........................................................................................................13 3.2.1 Struktura projektu .............................................................................................14 3.2.2 Databázový model.............................................................................................15 3.2.3 Diagram tříd .......................................................................................................17 3.2.4 Uživatel ..............................................................................................................17 3.2.5 Sbírka .................................................................................................................18 3.2.6 Položka ..............................................................................................................20 3.2.7 Asynchronní vlákna ..........................................................................................21 3.2.8 Serverová část ..................................................................................................22 3.3 Návrh aplikace................................................................................................................22 3.3.1 Asynchronní vlákna – detail kódu24,29 .............................................................22 3.3.2 Serverová část – PHP .......................................................................................24 3.4 Uživatelská příručka ......................................................................................................26 3.4.1 Stažení a instalace aplikace .............................................................................26 3.4.2 Přihlášení a registrace ......................................................................................27 3.4.3 Sbírka .................................................................................................................28 3.4.4 Položka sbírky ...................................................................................................30 3.4.5 Nahrání a stažení sbírek nebo položek ...........................................................33 3.4.6 Vyhledávání skenováním kódu ........................................................................34
4
Publikace a propagace aplikací pro Android .................................................. 37
4.1 Publikace aplikací pro Android .....................................................................................37 4.1.1 Příprava publikace ............................................................................................37 4.1.2 Proces publikace...............................................................................................38 4.2 Možnosti propagace ......................................................................................................40 4.2.1 Použité možnosti propagace............................................................................40 4.3 Použitelné možnosti propagace ...................................................................................41 4.3.1 Internetové reklamní kampaně.........................................................................41
5
Závěr 43
Terminologický slovník ........................................................................................... 44 Seznam literatury ..................................................................................................... 46 Seznam obrázků a tabulek ...................................................................................... 47 Seznam obrázků ..........................................................................................................47
1 Úvod
1
1 Úvod V dnešním světě se čím dál více rozmáhají tzv. „chytré“ mobilní telefony a mobilní technologie, které tyto telefony propojují buď mezi sebou, nebo je připojují na internet. Vývoj aplikací na mobilní platformy zažil během posledních pár let obrovský růst a sám o sobě se stále velmi rychle vyvíjí. Tento vývoj je zapříčiněn enormním zájmem lidí o tyto výdobytky dnešní doby, ale také neustálým vývojem nových možností rozšíření a technologií, které se k tomu dají použít. Platforma Android zabírá velkou část trhu mobilních technologií 1 a podporuje nezávislé vývojáře tím, že je tento systém volně dostupný.
1.1
Vymezení tématu
Práce se zabývá vývojem aplikace na platformu Android, její publikací a možnostmi propagace. Je zaměřena na analýzu a vývoj aplikace CollectDroid. Dále se práce věnuje představení operačního systému Android na základě jeho verzí. U čtenáře této práce se předpokládá alespoň základní znalost jazyka Java, SQL a XML.
1.2
Důvodu výběru tématu
Toto téma jsem si vybral z důvodu mého nadšení do mobilních technologií, do platformy Android obecně a díky nově nabytým znalostem objektově orientovaného programování v Javě na Vysoké škole ekonomické v předmětech 4IT101 - Základy programování, 4IT115 - Základy softwarového inženýrství a 4IT353 - Klient/server aplikace v Javě, které jsem chtěl užít v praxi. Když jsem zjistil, že se pro Android dá psát právě v Javě, tak jsem si ve svém volném čase zkusil napsat několik aplikací a začalo mě to bavit. Poté jsem se rozhodl jednu z mých aplikací značně rozvinout do takové podoby, která by odpovídala svým rozsahem bakalářské práci.
1.3
Struktura práce
Nejprve popisuji platformu Android z pohledu vývoje jejích verzí, na které se pak v práci dále odkazuji. Poté následuje rešerše prací na toto či podobné téma a zdůvodnění, proč
1
Android Solidifies Smartphone Market Share. Forbes [online]. 2013 [cit. 2013-05-10]. Dostupné z: http://www.forbes.com/sites/chuckjones/2013/02/13/android-solidifies-smartphone-marketshare/
1 Úvod
2
byla vyvíjena nová aplikace. V další kapitole se věnuji základní analýze ještě před započetím vývoje aplikace, dále analýze vývoje aplikace a návrhu aplikace, kde se věnuji nejzajímavějším částem kódu aplikace. Následuje detailní uživatelská příručka k aplikaci. Poslední velkou kapitolou je kapitola o publikaci a propagaci aplikace. V části publikace se detailně věnuji procesu publikace na největším internetovém obchodě s Android aplikacemi a v části propagace se věnuji vybraným možnostem propagace aplikace na internetu.
1.4
Cíle práce
Hlavním cílem celé mé bakalářské práce je vyvinout funkční verzi aplikace pro dynamickou správu sbírek, která bude umožňovat zálohu dat na internetový server. Dílčím cílem práce bylo realizovat veřejnou publikaci aplikace na jednom internetovém obchodě zaměřeném na aplikace pro Android. Cílem v teoretické části této práce je analýza, popis, návrh a popis publikace této aplikace.
2 Platforma Android
3
2 Platforma Android Android je operační systém založený na Linuxu a je primárně určený pro mobilní zařízení s dotykovým displejem – tedy především telefony a tablety. Android je distribuovaný firmou Google jako open source software2 a zdrojový kód je pod licencí Apache Licence3. To umožňuje jeho rozvoj a modifikaci mnoha dalším firmám. Během krátké doby vznikla velmi početná komunita vývojářů, kteří píší aplikace určené pro tento systém. Proto se stal Android nejrozšířenějším operačním systémem po celém světě. Ve třetím čtvrtletí roku 2012 mělo OS Android 75% smartphonů4, to je 750 milionů aktivovaných přístrojů.
2.1
Historie Androidu
Firma Android Incorporation byla založena v říjnu roku 2003 v Kalifornii v USA. Jejími zakladateli byli Andy Rubin, Nick Sears, Chris White a Rich Miner. Během prvního roku fungování koupil podíl ve firmě Steve Perlman. Ze začátku firma pracovala na projektu Android tajně – bylo pouze známo, že pracuje na vývoji software pro mobilní telefony. V roce 2005 se firma Android Incorporation stala vlastnictvím Google včetně jejích zaměstnanců5. O Androidu dál nebyly žádné konkrétní informace, jen se proslýchalo, že Google se chystá vstoupit na trh se softwarem pro mobilní telefony. První verze operačního systému Android byla pak dokončena v roce 2007 a vedoucím projektu byl Andy Rubin6.
2
The Open Source Definition. Open Source Initiative [online]. 2007 [cit. 2013-04-26]. Dostupné z: http://opensource.org/docs/osd
3
Apache License, Version 2.0. The Apache Software Foundation [online]. 2004 [cit. 2013-04-26]. Dostupné z: http://www.apache.org/licenses/LICENSE-2.0
4
Android Marks Fourth Anniversary Since Launch with 75.0% Market Share in Third Quarter, According to IDC. IDC: Analyze the future [online]. 2012 [cit. 2013-04-26]. Dostupné z: http://www.idc.com/getdoc.jsp?containerId=prUS23771812
5
Google Buys Android for Its Mobile Arsenal. WebCite [online]. 2005 [cit. 2013-04-26]. Dostupné z: http://www.webcitation.org/5wk7sIvVb
6
I, Robot: The Man Behind the Google Phone. The New York Times [online]. 2007 [cit. 2013-0426]. Dostupné z: http://www.nytimes.com/2007/11/04/technology/04google.html
2 Platforma Android
4
Beta verze systému Android byla vydána v listopadu 2007 a první mobilní telefon s operačním systémem Android 1.0 byl uveden na trh v roce 2008. Byl to HTC Dream G1 a byl prodáván společností T-Mobile7 v USA. Android soupeřil od začátku s operačním systémem iOS8 a operačním systémem Windows Phone9. Co přinesl Android oproti těmto systémům nového? Jedním z nových nápadů byla notifikační lišta10 na horním okraji displeje. Jsou na ní zobrazeny aktuální události a lze ji pro podrobné zobrazení těchto událostí stáhnout dolů přes celý displej. Další novinkou Androidu byly widgety11 – tj. možnost použít pro aplikaci část displeje a možnost umístit více takových ploch na jednom displeji vedle sebe. Android má v sobě velmi silnou podporu pro používání widgetů. Google měl s widgety od začátku velké plány. Problémem ale bylo, že vývojáři je nejprve neuměli správně vytvářet a používat pro své aplikace. Další silnou zbraní Androidu je propojení se e-mailovou službou Gmail12. Android samozřejmě podporuje e-mailové protokoly pro propojení s poštovními klienty, ale od začátku nabízel integraci Gmail účtu se všemi jeho možnostmi přímo do zařízení.
2.2
Vývoj platformy Android [4]
Pro odlišné, kreativní a pro čtenáře lépe pochopitelné popsání platformy Android jsem zvolil popsání jeho jednotlivých verzí. Tento způsob nejen popisuje možnosti Androidu, ale i jejich postupné přidávání v čase, které čtenáři názorně předvede jednotlivé funkce a tím lépe ucelí celkový obrázek o Androidu. Obrázkem bych chtěl ilustrovat, jak se platforma Android časem stále zlepšuje (viz Obrázek 1). 7
8
T-Mobile G1. GSM Arena [online]. 2008 http://www.gsmarena.com/t_mobile_g1-2533.php
[cit.
2013-04-26].
Dostupné
z:
iOS. Apple CZ [online]. 2013 [cit. 2013-04-26]. Dostupné z: http://www.apple.com/cz/ios/
9
Windows Phone. Microsoft [online]. http://www.windowsphone.com/cs-cz
10
Notifications. Android Developers [online]. 2012 [cit. http://developer.android.com/design/patterns/notifications.html
11
Widgets. Android Developers [online]. 2013 [cit. http://developer.android.com/design/patterns/widgets.html
12
GMail. Google [online]. 2013 [cit. https://mail.google.com/mail/help/intl/en/about.html
2013
[cit.
2013-04-26].
Dostupné
2013-04-26].
2013-04-26].
2013-04-26].
z:
Dostupné
z:
Dostupné
z:
Dostupné
z:
2 Platforma Android
5
Obrázek 1: Vývoj platforem Android (Zdroj: [5])
Jak již bylo uvedeno výše, první verze Androidu 1.0 byla uvedena na trh v roce 2008. Následovala ji pak v únoru 2009 verze 1.1, která obsahovala opravy chyb. Především ale přinesla novou možnost update pro všechny další verze. Tento způsob byl nazván “overthe-air”13. Uživateli přijde upozornění, že pro jeho zařízení byla vydána nová verze systému Android a tuto verzi si může rovnou stáhnout přes datovou síť bez toho, že by bylo nutné zařízení připojovat k počítači. Stažení nové verze a její instalace se tak stalo pro uživatele pohodlné a jednoduché. Všechny další verze pak měly kromě čísla ještě název. Tyto názvy jsou všechny zvoleny podle různých druhů především amerických sladkostí. Zde je jejich stručný přehled:
Verze 1.5 “Cupcake” (viz Obrázek 2) – v této verzi se vývojáři zaměřili na zvýšení komfortu ovládání. Součástí systému se stala klávesnice na obrazovce, došlo na rozšíření možností pro widgety. Zlepšila se možnost práce s clipboardem – tedy možnost kopírovat libovolný text do schránky a pak jej kdekoliv opět umístit. Další inovací byla podpora pro natáčení videa, bez které si dnes Obrázek 2: 1.5 Cupcake (Zdroj: [6])
smartphony už ani nedokážeme představit. Tato verze byla vydána v dubnu 2009.
Verze 1.6 “Donut” (viz Obrázek 3) tato verze jako první přinesla možnost různých velikostí a rozlišení displeje. Byl zde nově představený Quick Search Box – tedy možnost použít vyhledávač přímo z obrazovky bez nutnosti spouštět aplikaci nebo prohlížeč.
Obrázek 3: 1.6 Donut (Zdroj: [6]) 13
What is OTA?. Mobile Burn [online]. 2009 http://www.mobileburn.com/definition.jsp?term=OTA
[cit.
2013-04-26].
Dostupné
z:
2 Platforma Android
6
Verze 2.0 / 2.1 “Eclair” (viz Obrázek 4) byla vydána v listopadu 2009, rok po vydání první verze Androidu. Přinesl podporu telefonům s vyšším rozlišením displeje (854 x 480). Přibyla podpora pro správu více účtů Google v jednom zařízení. Poprvé zde byla součástí systému dodnes velmi úspěšná Google Maps Navigation. Navigace propojená s mapami od společnosti Google. Obsahuje možnost 3D zobrazení Obrázek 4: 2.0/2.1 Eclair (Zdroj: [6]) fotomapy, hlasovou navigaci a aktuální informace o dopravě. Zlepšil se přístup k uloženým kontaktům a přišla také další vylepšení klávesnice na obrazovce. Jako novinka se zde objevila možnost zvětšit přiblížení pomocí doteku a oddálení dvou prstů (multi-touch zooming). Přicházejí také “Live wallpapers” – animovaná pozadí pro obrazovku a převod mluvené řeči na text. Verze 2.1 nepřinesla žádné velké změny, pro Google byla ale důležitá tím, že přinesla podporu pro jeho první vlastní smartphone – Nexus One.
Verze 2.2 “Froyo” (viz Obrázek 5) přichází v polovině roku 2010. Přinesla zvýšení počtu panelů z původních tří na pět včetně vizuální orientace, který panel je právě vybrán. Kompletně zde byla přepracována galerie fotografií. Je zde již podpora pro 3D zobrazení a zajímavé nástroje pro úpravu obrázků a animace. Přicházejí také další možnosti zamčení displeje a celkové zvýšení bezpečnosti. Obrázek 5: 2.2 Froyo (Zdroj: [6])
Verze 2.3 “Gingerbread” (viz Obrázek 6) byla vydána cca za půl roku po verzi Froyo. Přináší podporu pro další Nexus – tentokrát Nexus S od firmy Samsung. Zaměřila se především na vylepšení navigace. Tato verze nepřinesla mnoho nových funkcí ale dochází zde k zlepšení celkového vzhledu. Nově je použito vyznačení textu ke kopírování pomocí vymezovacích značek, které lze během výběru ještě posunovat. Nové funkce dostala také klávesnice, například multidotekové klávesové zkratky, které urychlují přístup k dalším znakům. Vývojáři se také zaměřili na lepší využití Obrázek 6: 2.3 Gingerbread (Zdroj: [7]) baterie a management aplikací. Aplikace nyní mohou také “běžet na pozadí”. Další inovace byly důležité především pro vývojáře, kteří dostali lepší možnosti pro práci s grafikou, lepší přístup k úložišti a
2 Platforma Android
7
lepší možnosti ovládání celého zařízení. Otevřela se tím možnost psát především lepší hry s 3D grafikou. Verze 3.x “Honeycomb” (viz Obrázek 7) – tato verze přináší především podporu pro tablety. Dochází zde k výraznějším změnám celého designu, ve kterém do té doby převládala zelená barva. Od této verze již nejsou potřeba žádná fyzická tlačítka, jako Home nebo Back. Jsou nahrazena virtuálními tlačítky ve spodní části obrazovky. Zlepšuje se multitasking a vývojářům je Obrázek 7: 3.x Honeycomb (Zdroj: [8])
nabídnuta podpora pro kontextová menu a “action bar” – řádku nabídky, který je společný pro více aplikací. Rozšiřuje se také podpora pro použití vzhledů od třetích stran.
Verze 4.0 “Ice cream sandwich” (viz Obrázek 8) přináší další nové designové prvky a vylepšuje podporu widgetů. Další novinkou je scrolovatelný seznam náhledů dříve spuštěných aplikací, ze kterého je možné přímo aplikaci spustit. Co se týká klávesnice, nejsou zde až tak výrazné změny vzhledu, ale je zde podstatně zlepšena “inteligence” – tedy podpora práce se slovníkem používaných slov. Přibyla analýza využití datového připojení jednotlivými aplikacemi, nové možnosti kalendáře a rozšíření práce s elektronickou poštou od Gmailu.
Obrázek 8: 4.0 Ice cream sandwich (Zdroj: [9])
Verze 4.1 “Jelly Bean” (viz Obrázek 9) přichází v roce 2012 je dalším krokem v podpoře tabletů. Pokračuje také v inovacích předešlé verze Ice cream sandwich. Graficky zde není velký rozdíl, je ale zlepšeno dotykové ovládání, grafika (tzv. triple-buffering), obnovovací frekvence je zkrácena na 16 milisekund apod. Obrázek 9: 4.1 Jelly Bean (Zdroj: [10])
Poslední připravovaná verze Androidu bude nazvána Key Lime Pie, a zatím není oficiálně vydána v čase psaní této práce.
2 Platforma Android
2.3
8
Čárový a QR kód
V práci se zabývám skenováním čárových či QR kódů a proto považuji za důležité jejich krátké přiblížení.
2.3.1 Čárový kód Čárový kód (viz Obrázek 10) je malý obrázek čar oddělených mezerami, který byl vyvinut pro jednoduchou identifikaci zboží ve společnosti IBM v roce 197214. Kód používá posloupnost různě tlustých vertikálních čar a mezer, který představuje čísla či jiné symboly. Symbol čárového kódu se obvykle skládá z pěti částí: Klidová zóna, znak start, datových znaků (včetně volitelného kontrolního znaku), koncový znak, a další klidové zóny.
Obrázek 10: Čárový kód (Zdroj [11])
2.3.2 QR kód QR je zkratka pro anglické spojení Quick Response - rychlá odezva. QR kód (viz Obrázek 11) je typ dvojrozměrného (2D) čárového kódu, který lze číst pomocí QR čtečky čárových kódů nebo právě mobilním zařízením s fotoaparátem a s aplikací na skenování QR kódů. QR kód je schopen přenášet informace ve vertikálním i horizontálním směru, což je důvod, proč se mu říká 2D čárový kód. QR kód je registrovaná ochranná známka společnosti Denso Wave Inc.15 v Ja- Obrázek 11: QR kód ponsku a v dalších zemích. (Zdroj: [12])
14
UPC: The Transformation of Retail. IBM: 100 icons of progress [online]. 2012 [cit. 2013-05-06]. Dostupné z: http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/upc/
15
Denso wave incorporated [online]. 2007 [cit. 2013-05-06]. Dostupné z: http://www.densowave.com/en/
2 Platforma Android
2.4
9
Komentovaná rešerše prací
V této kapitole se věnuji rešerši prací obecně k tématu Androidu, podobných aplikací a čím se moje aplikace odlišuje od ostatních. Základem této bakalářské práce je kniha o vývoji aplikací na Android [1] a webový portál pro vývojáře na Android od firmy Google, kde jsou aktuální informace o Androidu [2]. Kniha je kvalitně a čtivě zpracována a velmi mi pomohla s mnoha úskalími ohledně teorie i praxe vývoje. Pojednává v 39 krátkých kapitolách o základních stavebních prvcích, které systém Android nabízí, dále učí čtenáře jak skládat tyto prvky do funkčního celku, stejně jako vytvářet a připojit programovou logiku, která běží na pozadí aplikace. Webový portál obsahuje většinu potřebných návodů a dokumentací potřebných pro vývoj, je pravidelně upravován a obnovován firmou Google. Obsahuje v každé dokumentaci i příklad použití té dané třídy a díky tomu je velkou pomocí všem Android vývojářům. Částečně jsem také čerpal z aktuálnější knihy v angličtině pro vývoj na Android 4 [3], která se daleko více zaměřuje na verzi Androidu 4 a oproti prve zmiňované knize se v ní lze dočíst o vývoji na novější technologie používané novějšími telefony. Neuvádím na ní reference nikde jinde v textu, více mi byla pomocí při vlastním vývoji aplikace než při psaní této bakalářské práce. Na téma o vývoji na platformě Android byla napsaná a obhájená práce16 v roce 2010. Autor se zde věnuje obecně celé platformě Android, možnostem a specifikům, které platforma nabízí a nástrojům pro vývoj. Je to více teoreticky zaměřená práce, nicméně také obsahuje vývoj své vlastní ukázkové aplikace. Považuji tuto práci za kvalitní a její přečtení mi pomohlo platformu pochopit ještě z bližšího pohledu. Další zajímavá bakalářská práce17, která byla obhájena v roce 2011, se hlavně věnuje práci s uživatelským rozhraním Android aplikací. Zabývá se vývojem aplikací a věnuje se popisu samotné platformy Android. Bakalářská práce18 obhájená v roce 2012 je práce zaměřená na téma vývoje aplikací pro platformu Android 3.0, která je primárně určená pro tablety. Tato práce je již více zaměřená na vývoj aplikací a jako praktickou část obsahuje části vývoje aplikace na platformu Android 3.0, o které je více teoretická část. V té autor ukazuje novinky této nové verze.
16
KOLÍN, Tomáš. Operační systém Android. Praha, 2010. Bakalářská práce. Vysoká škola ekonomická v Praze. Vedoucí práce Ing. Jarmila Pavlíčková.
17
VACULA, Josef. Vývoj aplikací pro Google Android. Praha, 2011. Bakalářská práce. Vysoká škola ekonomická v Praze. Vedoucí práce doc. Ing. Alena Buchalcevová, Ph.D.
18
ŠVIMBERSKÝ, Jan. Vývoj aplikací pro platformu Android 3.0. Praha, 2012. Bakalářská práce. Vysoká škola ekonomická v Praze. Vedoucí práce doc. Ing. Alena Buchalcevová, Ph.D.
2 Platforma Android
10
Jako poslední bych rád uvedl úspěšně obhájenou bakalářskou práci19 v roce 2012 na téma platforma Android verze 4. Tato práce pojednává, podobně jako výše uvedená práce na téma platformy Android verze 3, o novinkách, které tato verze přináší a možnosti jejich zapojení do vývoje aplikací. Praktická část této práce je dotazník o názoru respondentů na tuto verzi platformy Android.
2.4.1 Podobné aplikace Ve světě mobilních aplikací je ve většině případů pravdivé rčení, že pro všechno již existuje nějaká aplikace. Ano, i v případě aplikace na správu sbírky existuje několik aplikací. Nicméně se mi povedlo najít volné místo v tomto světě pro unikátnost své aplikace, která se od ostatních odlišuje možností vyhledávání na základě naskenování kódu a možností zálohy svých dat na internetový server. Aplikace Collectionista manager20 se zabývá správou sbírek, je profilována na správu knih či hudebních CD. Aplikace funguje bez větších problémů a má hezké zobrazení položek sbírky. Nepracuje ale se skenováním kódů a nemá možnost zálohy dat na internetový server. Tato aplikace je ke stažení zdarma a je v angličtině. Další aplikací je Barcode & Invertory Pro21. Tato aplikace na správu sbírky, která vznikla při vývoji mojí aplikace, již umí pracovat se skenováním čárových a dalších podobných kódů. Nicméně, tato aplikace je placená a její demo je velmi ořezané o funkcionalitu. Aplikace neobsahuje možnost zálohy dat na internetový server, stojí 47 Kč a je v angličtině.
19
PETROVIČ, Marko. Platforma Android v. 4. Praha, 2012. Bakalářská práce. Vysoká škola ekonomická v Praze. Vedoucí práce doc. Ing. Alena Buchalcevová, Ph.D.
20
Collectionista manager. Aplikace pro Android ve službě Google Play [online]. 2012 [cit. 2013-0505]. Dostupné z: https://play.google.com/store/apps/details?id=net.lp.collectionista
21
Barcode & Inventory Pro. Aplikace pro Android ve službě Google Play [online]. 2013 [cit. 201305-05]. Dostupné z: https://play.google.com/store/apps/details?id=com.acj0.barcodeexpproa
3 Analýza a návrh aplikace
11
3 Analýza a návrh aplikace 3.1
Základní analýza
Program CollectDroid je určen pro správu sbírky, respektive sbírek. Když míním sbírku, mám na mysli sbírku čehokoliv, co člověka může napadnout sbírat - např. známky, motýli, mince atd. Pro tyto sbírky by moje aplikace byla také vhodná, nicméně je primárně určená pro správu sbírky, která je označená buď čárovými nebo QR kódy (viz kapitola 2.3). Pro načtení těchto kódů aplikace využívá vestavěného fotoaparátu v mobilním zařízení. Celá aplikace je postavená na interní databázi uložené v zařízení a umožňuje její spojení s databází uloženou na internetovém serveru. S touto databází na internetovém serveru se zmiňovaná interní databáze manuálně synchronizuje. Dále aplikace obsahuje systém uživatelů a jejich autentifikaci, který plně zvládne možnosti přihlášení uživatele, který má účet ve webové databázi, ale v mobilním zařízení ještě ne. Aplikace samozřejmě nabízí také možnost registrace nového uživatele. Po registraci a přihlášení je zde možnost založit sbírku a následně ji také editovat. Pro každou sbírku lze vytvořit jednotlivé položky sbírky. Při jejich vytváření je možné použít externí aplikaci na snímání čárových či QR kódů pro načtení kódu. Výše zmiňovaného skenování kódu je také možné použít k vyhledávání mezi položkami sbírek aktuálně přihlášeného uživatele hned na úvodní obrazovce aplikace po přihlášení. Původní verze této aplikace vznikla na základě naší společné sbírky mě a mého bratra. Je obecně známo, že si náš český národ již velmi dlouho drží světové prvenství v pití piva na osobu za rok (nejnovější data jsou v ČR 145 litrů piva na osobu za rok 22). Nám pivo také zachutnalo, a proto jsme se rozhodli založit si sbírku pivních lahví. V momentu, když jsme nevěděli, zda tu či onu láhev doma už máme nebo nikoliv, rozhodl jsem se pro vytvoření aplikace pro správu této sbírky na platformě Android pro vlastní použití. Pak už jen stačilo sejmout kód z etikety láhve a porovnáním s databází v aplikaci jsem se dozvěděl, jestli už danou láhev máme ve sbírce či nikoliv. Velmi mne zaujal potenciál platformy Android jako takové a rozhodl jsem se pro rozšíření této velmi specifické aplikace na universální aplikaci pro sbírku čehokoliv, co se jen sbírat dá, s možností použití technologie čárových a QR kódů a vestavěného fotoaparátu v mobilním telefonu. Tato technologie velmi zjednodušuje manipulaci se sbírkou a přitom není vůbec složitá na založení a správu sbírky a v neposlední řadě je rychlá při vyhledávání ve sbírce. 22
Beer statistics 2012 edition. The Brewers of Europe [online]. 2012 [cit. 2013-03-12]. Dostupné z: http://www.brewersofeurope.org/docs/publications/2012/stats_2012_web.pdf
3 Analýza a návrh aplikace
12
Další funkcionalitou aplikace je možnost zálohování vytvořených sbírek a jejich položek na internetový server. Většina mobilních aplikací v dnešní době se připojuje na internet a tímto jsem využil velikého potenciálu této konektivity s ostatními systémy. Nahráním na internet je také umožněna synchronizace jedné či více sbírek na více zařízeních. Pro každého nového uživatele je vytvořena ukázková sbírka, kterou je možné si stáhnout z internetového serveru. Tím se dostávám další části aplikace. Sbírky a jejich položky lze nejen nahrát na internetový server, ale také si je lze stáhnout. Pro zobrazení výše popisovaných případů užití jsem zvolil diagram případů užití, viz Obrázek 12.
Obrázek 12: Případy užití
3.1.1 Základní scénáře Základním scénářem použití této aplikace je správa vlastní sbírky či sbírek, kterou má uživatel již označenou čárovými či QR kódy nebo si ji plánuje těmito kódy označit. Toto označení není nutné, ale je to to, co tuto aplikaci odlišuje od ostatních. Další možností je použití jako prodejní pomocník v obchodě s předměty označenými výše zmiňovanými kódy. Připojení do dalších podnikových systémů aplikace neobsahuje, ale plánuji ji právě tímto směrem rozvíjet.
3 Analýza a návrh aplikace
13
Podobný scénář jako pro prodejního pomocníka je možnost použití správy skladu v podniku. Také by jistě byly dobré nějaké úpravy, ale i ve stavu, v jakém je aplikace CollectDroid ve vztahu k této práci, by byla jistě dobře použitelná.
3.2
Analýza realizace
Abych mohl vytvořit aplikaci pro Android, bylo nejprve nutné vytvořit odpovídající Android projekt. Jelikož používám pro vývoj těchto aplikací vývojové prostředí Eclipse, jedná se o Eclipse projekt. Tento projekt obsahuje veškerý zdrojový kód aplikace, všechny potřebné zdroje, Java archivy (JAR) třetích stran a další potřebné materiály. Překládací nástroje pro systém Android, které jsou zabudované do prostředí Eclipse, zabalí projekt do souboru APK (Android package), což je soubor aplikace pro Android. Tyto nástroje mi také pomohly načíst můj APK soubor do emulátoru nebo do skutečného zařízení s operačním systémem Android pro testovací účely. Jednou z klíčových součástí projektu je tzv. manifest (AndroidManifest.xml). Tento soubor obsahuje v XML struktuře seznam součástí aplikace, kde jsou zaznamenány všechny nejdůležitější komponenty, práva atd. Tento manifest se používá k propojení za chodu aplikace s operačním systémem Android. Používá ho také obchod Google Play (a i jiné další obchody s aplikacemi) pro různé účely. Například pro určení cílové skupiny verzí systému, takže aplikace, které požadují verzi systému 2.3, se nezobrazí uživatelům s verzí systému 2.2. Obsahuje práva na použití různých systémových prostředků (např. použití fotoaparátu zařízení, přístup na internet apod.), která jsou uživateli zobrazena ke schválení při procesu stahování aplikace z obchodu Google Play. Dále tu jsou uvedena práva pro jiné aplikace, aby tyto aplikace mohly používat logiku či data mojí aplikace. Je tu uvedena instrumentace, což je kód, který by se měl volat při výskytu klíčových systémových událostí jako je například spouštění aktivit za účelem logování či monitorování. Pro testování aplikace v emulátoru jsem v něm vytvořil virtuální zařízení s operačním systémem Android (AVD - Android Virtual Device). Těchto zařízení jsem si vytvořil několik pro několik různých verzí Androidu, abych na nich mohl otestovat funkčnost aplikace ve více možných prostředích a zařízeních, ve kterých by aplikace mohla být spouštěna uživateli. Je možné vytvořit virtuální zařízení s konkrétní sadou hardwaru, s různými rozměry displeje, zmiňovanými verzemi operačního systému apod. Při vytváření projektu a virtuálních zařízení jsem pomocí manifestu předal operačnímu systému API úroveň, na které pracuji. Tato API úroveň je reprezentována jednoduchou číslicí, která je spojená s danou verzí operačního systému; API úrovně 8 označuje například verzi Android 2.2. Při tvorbě projektu jsem tímto operačnímu systému sdělil minimální a základní API úroveň, které moje aplikace podporuje. To samé je u vytváření AVD, kde se určuje, kterou API úroveň má AVD emulovat.
3 Analýza a návrh aplikace
14
Stavebními kameny pro tvorbu grafického uživatelského rozhraní jsou tzv. „aktivity“, které lze chápat jako analogii oken či dialogů aplikace pro stolní počítač. Aktivity jsou rozšířením Java třídy a pro definování grafického uživatelského rozhraní používají XML soubory s jeho definicí. Většinu informací o programování mobilních aplikací na platformu Android jsem čerpal z knihy Android 2: Průvodce programováním mobilních aplikací [1].
3.2.1 Struktura projektu [1] Překladový systém operačního systému Android je uspořádaný okolo své vlastní specifické stromové struktury adresářů projektu. Tato struktura je velmi podobná jakémukoliv jinému Java projektu. Systém Android projektu je však v několika směrech odlišný. Následující část by měla čtenáři přiblížit strukturu projektu, což by mělo poskytnout potřebný nadhled na věc a pomoci porozumět částem zdrojového kódu uvedeného v této práci. Obsah kořenového adresáře projektu: AndroidManifest.xml: XML soubor, který popisuje komponenty vyvíjené aplikace, je hlavním zdrojem informací o projektu. project.properties: automaticky generovaný soubor, obsahuje cílovou verzi operačního systému Android. src/: Složka, ve které je souborový systém balíčků obsahující zdrojové soubory v jazyce Java. gen/: Složka, do které umístí překladové nástroje systému Android vygenerovaný zdrojový kód. assets/: Složka, která obsahuje ostatní statické soubory, které bych chtěl použít při běhu aplikace bin/: Složka se soubory aplikace po jejím zkompilování libs/: Zde je místo v této složce pro jakékoliv Java archivy třetích stran, které bych chtěl použít v aplikaci res/: Složka, ve které se uchovávají prostředky aplikace, jako jsou například XML návrhy grafického uživatelského rozhraní (GUI), ikony, obrázky použité v aplikaci apod. Tyto soubory jsou pak také zabaleny do souboru APK. o res/drawable/: Složka pro obrázky (JPG, PNG atd.) o res/layout/: Složka s XML návrhy grafického uživatelského rozhraní (GUI).
3 Analýza a návrh aplikace
15
o res/menu/: Složka s XML specifikacemi menu aplikace. o res/raw/:Složka pro jakékoliv obecné soubory např. textové soubory, CSV soubory atd. o res/values/: Složka pro textové řetězce, rozměry apod. Tímto jsem popsal prostředí, ve kterém jsem aplikaci napsal, dále na těchto základech mohu popsat architekturu samotné aplikace.
3.2.2 Databázový model Celá aplikace CollectDroid stojí na databázi, jakožto persistentní vrstvě. Databáze obsahuje tři propojené tabulky (viz Obrázek 13). Nejprve jsem si programu SAP Sybase PowerDesigner23 vytvořil konceptuální model databáze s pojmenovanými relacemi mezi tabulkami. Z tohoto modelu jsem nechal vygenerovat fyzický model databáze, ve kterém se vytvořily relace pomocí tzv. cizích klíčů. Cizí klíče jsou identifikátory z jiných tabulek, kde jsou tyto identifikátory primárními klíči, které jsou v té dané tabulce unikátní. Pro synchronizaci databází je důležité, že i když se jedná o použití databází různých typů, tak obsahují stejnou strukturu polí. V Android zařízení je databáze SQLite24, na internetovém serveru běží databáze MySQL25. Díky vytvoření fyzického modelu databáze už nebyl problém vygenerovat SQL kód pro vytvoření databáze i s jejími relacemi pro obě výše uvedené databáze. Při práci s databázemi jsem čerpal ze znalostí z kurzu 4IT218 - Databáze26, který mi velmi pomohl jim porozumět. Tabulka UZIVATEL je jednoduchá tabulka, která obsahuje potřebná data o uživateli, která jsou použita pro přihlášení do aplikace. Důležité je zde ID_UZIVATEL, které má vazbu 1 ku N na tabulku SBIRKY. Dále má vazbu 0 ku N na tabulku POLOZKY. 0 ku N je zde vybráno, protože je zde povinné ID_SBIRKY, takže je zajištěna unikátnost položky pomocí dvojice ID_SBIRKY a ID_POLOZKA. V obrázku Obrázek 13 je vidět, že uživatel za23
SAP Sybase PowerDesigner. Sybase: An SAP company [online]. 2013 [cit. 2013-04-26]. Dostupné z: http://www.sybase.com/products/modelingdevelopment/powerdesigner
24
Kapitola 22: Správa lokálních databází a přístup k jejich datům. MURPHY, Mark L. Android 2: průvodce programováním mobilních aplikací. Vyd. 1. Brno: Computer Press, 2011, s. 230-239. ISBN 978-80-251-3194-7.
25
MySQL. The world's most popular open source database [online]. 2013 [cit. 2013-04-26]. Dostupné z: http://www.mysql.com/
26
4IT218 - Databáze. VŠE: Integrovaný studijní informační systém [online]. 2011 [cit. 2013-04-26]. Dostupné z: https://isis.vse.cz/auth/katalog/syllabus.pl?predmet=82103
3 Analýza a návrh aplikace
16
kládá sbírky a poté přidává položky sbírky. Ve verzi CollectDroid Plus je zde přidán sloupec AUTOLOGIN, ve kterém je uložena hodnota pro ten uživatelský profil, u kterého si uživatel přeje možnost automatického přihlášení. Tabulka SBIRKY je už trochu složitější. Obsahuje unikátní ID sbírky, její název a 8 parametrů, které slouží jako nadpisy sbírky. Cizím klíčem je zde výše zmiňované ID_UZIVATEL, podle kterého se zde identifikují sbírky toho daného uživatele. Jednoduchým použitím SQL příkazu SELECT (více v kapitole 3.3.2) pak lze získat všechny sbírky toho daného uživatele. Tabulka POLOZKY obsahuje také své vlastní unikátní ID_POLOZKA, dále jsou zde dva cizí klíče ID_SBIRKY a ID_UZIVATEL, kterými jsou tabulky relačně propojené. NAZEV je pojmenování položky, které musí být vždy vyplněno. Do pole KOD se ukládá kód položky, podle kterého se pak při skenování vyhledává. Použil jsem zde datový typ Variable Charactes pro libovolné znaky, protože jako kódy lze použít i QR kód a ne jen Integer pro čísla, který by byl lepší, pokud by byly použity pouze čárové kódy. OBRAZEK je příprava na rozšíření funkcionality aplikace o obrázky. Ukládaly by se zde pouze názvy obrázků, na které by bylo potřeba vytvořit další tabulku v zájmu rychlosti reakcí aplikace při stahování či nahrávání. A nakonec v této tabulce jsou parametry položky sbírky P1 až P8, které se pak na aplikační vrstvě propojují s nadpisy sbírky v tabulce N1 až N8. Tímto jsem dosáhl možnosti univerzálního vytvoření a definování jakékoliv vlastní sbírky.
Obrázek 13: Konceptuální model databáze
3 Analýza a návrh aplikace
17
3.2.3 Diagram tříd Konečná verze diagramu tříd, a to i ve velmi omezené podobě, se natolik rozrostla, že jsem se rozhodl jej uvést jako přílohu (viz Příloha A: Kompletní diagram tříd) a zde uvádět pouze části. Aktivitou nazývám obrazovku aplikace. Jakékoliv připojení na internet předchází interní zjištění, zda tato konektivita je aktuálně dostupná. Tím je dosaženo značné zrychlení při nepřítomnosti možnosti připojení na internet. O asynchronních vláknech více v kapitole 3.2.7 Asynchronní vlákna. Jako hlavní třída je nastavena třída CollectDroid, která obsahuje pouze úvodní grafiku a po 2 vteřinách se toto vlákno ukončí a spustí se pro přihlášení třída s aktivitou LoginUser.
Obrázek 14: Diagram tříd – detail balíčku user
3.2.4 Uživatel V aktivitě LoginUser po zadání údajů uživatelem k přihlášení pošlu dotaz do interní databáze zařízení pomocí asynchronního vlákna UserLoginTask, zda už takové údaje mám uložené. Nemám-li, pošlu dotaz na internetový server pomocí asynchronního vlákna UserLoginTaskOnline. Existují-li, server mi vrátí JSON ([18]) objekt s údaji, které si lokálně uložím a rovnou uživatele přihlásím. To znamená, že stačí jen jednou vytvořit uživatele a, tedy za podmínky internetového připojení, na tento uživatelský účet se lze přihlásit už z jakéhokoliv dalšího mobilního zařízení s aplikací CollectDroid. Neexistují-li však dané uživatelské údaje ani na serveru, nabídnu uživateli možnost registrace v aktivitě AddUser. Přenesu sem údaje, pokud je uživatel již zadal, čímž mu ulehčím registraci. Při registraci se tento účet uloží jak lokálně v telefonu přes třídu DatabaseConnector, tak na webovém serveru pomocí asynchronního vlákna SaveUser. Celá databázová struktura stojí na unikátním ID uživatele, které je relačně přiřazováno každé sbírce a i každé položce sbírky. Hlavním
3 Analýza a návrh aplikace
18
objektem je zde třída User, která nese údaje o uživateli v aplikaci. Detail diagramu tříd balíčku cz.oplevka.collectdroid.user je na obrázku Obrázek 14. Je zde možná situace, že uživatel nemá připojení k internetu a vytvořil svůj účet offline na telefonu. Ve chvíli připojení k internetu a práci s webovým serverem by to mohlo znamenat nekonzistenci v ID uživatelů, která jsou jak tedy v tabulce UZIVATEL, tak ale i u každé sbírky a u každé položky sbírky. Jak to vyřešit? Jednoduše, při přihlášení si jeho účet uložím na webovém serveru a vrátím si JSON objekt s jeho účtem, který má serverem vytvořené unikátní ID. Toto ID vytvořené na serveru může kolidovat s ID, co již už v databázi mám. Z logiky věci, toto lokální kolidující ID musí být vytvořeno offline, protože server mi poslal ID nově vytvořené.
3.2.5 Sbírka Po úspěšném přihlášení do aplikace se dostanu do aktivity ViewCollections, ve které se zobrazí seznam všech sbírek toho daného uživatele. Pomocí asynchronního vlákna LoadCollections se načtou všechny sbírky aktuálně přihlášeného uživatele, tyto se načtou z lokální databáze. O seznam sbírek a jeho zobrazení se starají třídy BinderCollections a ViewHolder. Podržením dlouhého kliknutí se zobrazí kontextové menu pro tu danou položku, na kterou bylo dlouze kliknuto, s možnostmi editace či smazáním sbírky. Editace spustí aktivitu AddCollection v módu editace, což znamená, že jí předá objekt Collection k editaci a po editaci aktivita AddCollection tento objekt nahradí novým v databázi. Poté se znovu načte seznam sbírek v aktivitě ViewCollections. Smazání sbírky probíhá smazáním toho daného objektu v databázi, ale v případě síťové konektivity i smazání sbírky na serveru pomocí asynchronního vlákna DeleteCollection, existuje-li zde. U obou možností smazání se smažou i všechny položky sbírky. Část diagramu tříd s balíčkem cz.oplevka.collectdroid.collection je na obrázku Obrázek 15, kde je zobrazeno propojení tříd. Mám několik možností, co zde mohu udělat po zmáčknutí tlačítka menu:
3 Analýza a návrh aplikace
19
Přidání sbírky – dostanu se do aktivity AddCollection, které předám ID uživatele, který je aktuálně přihlášený. Zobrazí se několik polí pro zadání textu (viz Obrázek 20). Kliknutím na tlačítko Uložit se uloží nová sbírka do databáze, aplikace se vrátí na aktivitu ViewCollections a načtu z databáze seznam všech sbírek. Stáhnout sbírky – zeptám se internetového serveru prostřednictvím asynchronního vlákna DownloadMyCollections, jestli pod daným ID uživatele existují nějaké sbírky. Existují-li, server je pošle zpět do aplikace pomocí JSON objektů. Pro každého uživatele se při registraci automaticky vytvořila jedna ukázková sbírka s dvěma položkami této sbírky pro ukázku uživateli. Nahrát sbírky na server – spustím asynchronní vlákno UploadMyCollections, ve kterém vytvořím JSON objekty pro všechny objekty sbírek aktuálně přihlášeného uživatele v lokální databázi. Zabalím JSON objekty do pole těchto objektů a to odešlu na internetový server. V PHP skriptu na serveru projdu každý JSON objekt, který buď uložím do serverové databáze anebo, existuje-li již tato sbírka v databázi, na základě příchozího objektu aktualizuji odpovídající objekt v databázi. Naskenuj kód – spustím asynchronní vlákno ScanMyItems (bohužel se nevešlo na obrázek Obrázek 15, viz Příloha A: ), které zkontroluje přítomnost aplikace Barcode Scanner27 a je-li nainstalována, tak jí spustí (viz Obrázek 25). Po naskenování kódu tento kód jako řetězec vrátí jako výsledek. Jednoduchým SQL příkazem SELECT se zeptám databáze na získaný výsledek, zda pro aktuálně přihlášeného uživatele existuje položka sbírky s tímto kódem. Existuje-li, dám to vědět uživateli pomocí Toastu28. To je zobrazení výsledku hledání textově v dolní části obrazovky, které za dvě vteřiny zmizí.
Obrázek 15: Diagram tříd – detail balíčku collection 27
Barcode Scanner: ZXing Team. Aplikace pro Android ve službě Google Play [online]. 2013 [cit. 2013-04-30]. Dostupné z: https://play.google.com/store/apps/details?id=com.google.zxing.client.android
28
Toasts. Android Developers [online]. 2013 [cit. 2013-04-30]. http://developer.android.com/guide/topics/ui/notifiers/toasts.html
Dostupné
z:
3 Analýza a návrh aplikace
20
3.2.6 Položka Kliknutím na sbírku v seznamu sbírek se dostanu na seznam položek té dané sbírky v aktivitě ViewItems. Zde je již na první pohled jasný rozdíl oproti seznamu sbírek, kde objekty Item ve výše zmiňovaném seznamu položek sbírky mají díky třídám BinderItems a ViewHolder pod jménem zobrazený i kód, podle kterého probíhá hledání popisované v kapitole 3.2.5. Pro popisované grafické zobrazení viz Obrázek 23. Při každém zobrazení aktivity nebo navrácení na aktivitu se spustí asynchronní vlákno LoadItems, které načte aktuální seznam položek té dané sbírky z lokální databáze. Všechny zde popisované třídy jsou zobrazeny na obrázku Obrázek 16, který je částí diagramu tříd celého projetu (viz Příloha A: ) Po kliknutí na tlačítko menu se zobrazí možnosti: Nová položka – Kliknutím na tuto položku menu se zobrazí aktivita AddItem v módu pro nové položky, kde se zobrazí pole polí pro práci s textem. Tyto položky jsou název, kód a položky s nadpisy dané sbírky, ve které je položka vytvářena. Při menším počtu nadpisů sbírky než 8, což je maximum, se přebývajícím polím pro práci s textem zakáže možnost vkládání textu. U pole s kódem je tlačítko s obrázkem fotoaparátu, kterým se spustí metoda na spuštění externí aplikace na skenování čárových, QR či jiných kódů zmiňované v kapitole 3.2.5 u položky menu naskenuj kód. Proběhne-li skenování správně, tak se naskenovaný kód přenese do pole s kódem. Viz Obrázek 22. Kliknutím na tlačítko Uložit se položka sbírky uloží do lokální databáze a vrátím se na aktivitu ViewItems. Nahrát položky na server – Tato volba spustí asynchronní vlákno UploadMyItems, které vezme všechny položky té dané sbírky přihlášeného uživatele, ze všech udělá JSON objekty, které zabalí do jednoho pole a to odešle na server. Je zde samozřejmě kontrola, zda nenahrávám položky takové sbírky, kterou jsem ještě nenahrál na server. Dlouhým kliknutím na položku v seznamu se zobrazí stejné kontextové menu, jako u seznamu sbírek popisovaném v kapitole 3.2.5, se zobrazí možnosti na editaci či smazání položky. Pro editaci jsem použil zobrazení aktivity AddItem v módu editace.
3 Analýza a návrh aplikace
21
Obrázek 16: Diagram tříd – detail balíčku item
3.2.7 Asynchronní vlákna29 Důvodů použití asynchronních vláken v aplikaci je více. Samotná aplikace totiž při přímém přístupu do databáze či přístupu na internet z hlavního vlákna generuje výjimku, že toto nelze a aplikace spadne. Proto je doporučováno přistupovat do databáze nebo na internet pomocí asynchronních vláken AsyncTask, což jsou samostatná vlákna, která se spustí na pozadí aplikace a po dokončení dané úlohy se ukončí a vrátí získané hodnoty. Pro detailní popis kódu těchto vláken viz kapitola 3.3.1 Asynchronní vlákna – detail kódu. Dále jsou tato vlákna použita z důvodu plynulosti ovládání aplikace. Z vlákna běžícího na pozadí nelze upravovat nějakou část uživatelského rozhraní, to je možné pouze v jeho vlákně. Musí tedy existovat nějaká koordinace mezi vlákny běžícími na pozadí a vlákny uživatelského rozhraní. Bylo-li by například použito stejného kódu k přístupu na internet, tak by aplikace „zamrzla“ do té doby, dokud by nedostala odpověď, o kterou žádala. Navíc
29
Kapitola 15: Práce s vlákny. MURPHY, Mark L. Android 2: průvodce programováním mobilních aplikací. Vyd. 1. Brno: Computer Press, 2011, s. 161-171. ISBN 978-80-251-3194-7.
3 Analýza a návrh aplikace
22
po pochopení základního fungování vláken v Javě, ke kterému mi pomohl kurz 4IT353 Klient/server aplikace v Javě30, je toto čisté a elegantní řešení přístupu do interní databáze či na internet.
3.2.8 Serverová část Pro možnost oddělené databáze přístupné přes internet jsem po delším zvažování možností a následném zkoumání kvality dostupných free-hostingů zvolil možnost free-hostingu internetových stránek na serveru Endora.cz.31 Rozhodnul jsem se na základě poskytovaných služeb a jednoduchosti instalace i správy. Pro přístup k databázi na tomto serveru využívám poslání JSON objektů z aplikace, které pomocí PHP na server zpracuji a přes které následně přistupuji k databázi. Více o detailní funkcionalitě a kódu v kapitole 3.3.2 Serverová část – PHP.
3.3
Návrh aplikace
3.3.1 Asynchronní vlákna – detail kódu24,29 V aplikaci používám na 13 místech práci v asynchronním vláknu a považuji tuto část aplikace asi za nejtěžší, co se v aplikaci vyskytuje. Z tohoto důvodu jsem se na toto téma chtěl zaměřit. Asynchronní vlákno běží na pozadí, po spuštění toho vlákna se jedná o obsah překrývané metody doInBackground(). Je možné překrýt více metod, já ve svém kódu využívám metodu onCancelled(), která se stará o případ zrušení vlákna za běhu, a metodu onPostExecute(), která se automaticky spustí po dokončení práce v metodě doInBackground() a dále pracuje se získanými daty. Níže uvedený kód je jedním z nejkratších v aplikaci a je spuštěn po úspěšném naskenování kódu externí aplikací. Kód asynchronního vlákna spouštím z metody onActivityResult(), která se stará o získání výsledku skenování. Spuštění vlákna s předáním kódu v parametru konstruktoru vypadá takto: new ScanMyItems(contents).execute();.
30
Sylabus předmětu 4IT353 - Klient/server aplikace v Javě (FIS - LS 2011/2012). VŠE: Integrovaný studijní informační systém [online]. 2011 [cit. 2013-04-26]. Dostupné z: https://isis.vse.cz/auth/katalog/syllabus.pl?predmet=82159
31
Free Webhosting Endora. Endora.cz: Neomezeně domén [online]. 2013 [cit. 2013-04-26]. Dostupné z: https://www.endora.cz/
3 Analýza a návrh aplikace
23
Po spuštění se zeptám metodou getItemByCode() (více o přístupu do interní databáze níže) do interní databáze na naskenovaný kód, kde získám objekt Cursor 32, pomocí kterého je možné ovládat pohyb po výsledku dotazu. Existuje-li v databázi v tabulce POLOZKY položka s tímto kódem, tak se ještě do databáze zeptám do tabulky SBIRKY na sbírku, ve které tato položka je. V tuto chvíli končí práce v asynchronním vlákně na pozadí a předám výsledný řetězec do metody onPostExecute(). Zde vyhodnotím na základě předaného textového řetězce, zda ten daný objekt s naskenovaným kódem existuje či neexistuje v interní databázi. Oboje pak vypíši uživateli pomocí Toastu28. Zruším-li běh vlákna na pozadí, buď já anebo program tím, že narazí na chybu, tak se spustí metoda onCancelled() a zavře se přístup do databáze. Zde je popsáno, jak funguje kód asynchronního vlákna, teorie je popsána v kapitole 3.2.7 Asynchronní vlákna. Zde uváděný přístup do interní databáze je řešen pomocí metod třídy DatabaseConnector, kde jsou všechny metody pro přístup do databáze. Do databáze přistupuji pouze přes tyto metody. Při prvním spuštění aplikace se pomocí třídy DatabaseOpenHelper vytvoří struktura interní databáze. Při každém dalším spuštění se ověří existence potřebných tabulek. Pro začlenění zmiňovaných databázových tříd do celé struktury aplikace viz Příloha A: Kompletní diagram tříd. /** * Třída asynchronního vlákna na skenovací proces pro vyhledávání v databázi * * @author Ondřej Plevka * */ public class ScanMyItems extends AsyncTask
{ DatabaseConnector dbScanConnector = new DatabaseConnector(ViewCollections.this); String content; public ScanMyItems(String contents) { this.content = contents; } @Override protected String doInBackground(Void... params) { dbScanConnector.open(); // Otevřu databázi // Pošlu dotaz do databáze Cursor result = dbScanConnector.getItemByCode(userID, content); if (result != null && result.getCount() > 0) { result.moveToFirst(); // Posunu se na rádek v databázi // Vytáhnu si název výsledné položky String name = result.getString(result.getColumnIndex("NAZEV")); // Pošlu dotaz do databáze na ID sbírky získané položky 32
Cursor. Android Developers [online]. 2013 [cit. 2013-05-01]. http://developer.android.com/reference/android/database/Cursor.html
Dostupné
z:
3 Analýza a návrh aplikace
24
Cursor result2 = dbScanConnector.getCollectionById(result .getInt(result.getColumnIndex("ID_SBIRKA"))); if (result2 != null && result2.getCount() > 0) { result2.moveToFirst(); // Posunu se na rádek v databázi // Vytáhnu si název výsledné sbírky String collection = result2.getString(result2 .getColumnIndex("NAZEV_SBIRKA")); return collection + "," + name; // vrátím oba názvy } } else { return "fail"; } dbScanConnector.close(); return null; } @Override protected void onPostExecute(String result) { if (result == "fail") { msg = Toast.makeText(ViewCollections.this, "Položka s kódem "+ content + " nenalezena!", Toast.LENGTH_SHORT); msg.show(); } else { String[] resultArray = result.split(","); String collection = resultArray[0]; String name = resultArray[1]; msg = Toast.makeText(ViewCollections.this, "Položka s kódem "+ content + " nalezena! Je to polozka " + name + " ze sbírky " + collection, Toast.LENGTH_LONG); msg.show(); } } @Override protected void onCancelled() { dbScanConnector.close(); } }
3.3.2 Serverová část – PHP Na serveru mám pět svých PHP skriptů, kterými tvořím mezivrstvu mezi aplikací v mobilním zařízení a serverovou MySQL databází. V souboru connection.php jsou definované potřebné údaje pro přístup do databáze. Ostatní soubory využívají tento soubor s připojením. Další soubory jsou buď na získání či nastavení objektů User, Collection a Item, které jsou objekty uživatele, sbírky a položky sbírky. Chtěl bych zde uvést část kódu ze souboru
3 Analýza a návrh aplikace
25
setCollectDroid.php, ve kterém pracuji s příchozími JSON objekty poslanými asynchronními vlákny z aplikace. Na začátku si definuji proměnné s přijatými JSON objekty, připojím se do databáze a získám si metodou GET další možné proměnné z HTTP řetězce, kterým volám z aplikace tento PHP skript. V uváděném příkladu se jedná o smazání sbírky i se všemi položkami té dané sbírky. Nejdříve zjistím, zda sbírka obsahuje nějaké položky sbírky v tabulce POLOZKY, obsahuje-li, tak je smažu. Dále smažu sbírku z tabulky SBIRKY. Viz část kódu níže. 0){ $query_exec = mysql_query('DELETE FROM SBIRKY WHERE ID_UZIVATEL = "'.$row['ID_UZIVATEL'].'" AND ID_SBIRKA = "'.$row['ID_SBIRKA'].'"') or die(mysql_error()); $exists_items = mysql_query('SELECT * FROM POLOZKY WHERE ID_UZIVATEL = "'.$row['ID_UZIVATEL'].'" AND ID_SBIRKA = "'.$row['ID_SBIRKA'].'"'); if ($exists_items && mysql_num_rows($exists_items) > 0){ $query_execute = mysql_query('DELETE FROM POLOZKY WHERE ID_UZIVATEL = "'.$row['ID_UZIVATEL'].'" AND ID_SBIRKA = "'.$row['ID_SBIRKA'].'"') or die(mysql_error()); } echo "Collection deleted, "; } } } } ... pokračování kódu ... mysql_close(); echo "No error"; ?>
3 Analýza a návrh aplikace
3.4
26
Uživatelská příručka
3.4.1 Stažení a instalace aplikace Pro instalaci aplikace je potřeba si ji stáhnout z internetového obchodu v sekci Android aplikace na Google Play. Do tohoto obchodu je možné přistupovat buď přes aplikaci Google Play přímo v mobilním zařízení anebo přes webový prohlížeč. Stačí zde do vyhledávání zadat: „CollectDroid“ a v seznamu výsledků kliknout na tuto aplikaci. Otevře se vám stránka s detailem aplikace (viz Obrázek 17). Klikněte na tlačítko Instalovat, na další obrazovce klikněte na tlačítko Přijmout a stáhnout, souhlasíte-li s definovanými podmínkami. Aplikace se vám stáhne do vašeho Android zařízení. Pro její spuštění klikněte na ikonu CollectDroid. Ta by se vám měla vytvořit na jednom z vašich panelů s aplikacemi nebo ji najdete v seznamu všech nainstalovaných aplikací.
Obrázek 17: Detail aplikace v aplikaci Google Play
3 Analýza a návrh aplikace
27
3.4.2 Přihlášení a registrace Po spuštění aplikace se zobrazí úvodní obrazovka aplikace a následně přihlašovací obrazovka. Pro přihlášení je potřeba zadat e-mail jako uživatelské jméno a heslo do aplikace. Viz Obrázek 18.
Obrázek 18: Přihlašovací obrazovka
Zjistí-li aplikace, že ten daný e-mail ještě nebyl v aplikaci registrován, přesměruje aplikace uživatele na registraci nového uživatele. Ta je velmi jednoduchá. Data z přihlášení jsou automaticky přenesena, takže když uživatel již zadal své přihlašovací údaje na předchozí obrazovce, tak je zde uvidí. Viz Obrázek 19. Není zde ověření identity uživatele a správnosti zadaného e-mailu, protože jsem to nepovažoval za nutné, ale uživatelské jméno musí obsahovat znak „@“. Dále heslo musí mít více jak 4 znaky. Ve verzi CollectDroid Plus je zde zavedena možnost automatického přihlášení uživatele.
Při uložení se uloží tento účet v databázi aplikace v mobilním zařízení a funguje-li připojení na internet, tak rovnou odešle tento účet na server.
3 Analýza a návrh aplikace
28
Obrázek 19: Registrace nového uživatele
Odhlášení je řešeno stisknutím tlačítka Zpět na mobilním zařízení. Tímto se dá jednoduše i změnit uživatele za běhu aplikace.
3.4.3 Sbírka Hlavní položkou této aplikace je sbírka. Sbírka představuje seznam všech položek sbírky a dále obsahuje nadpisy jednotlivých popisků položky sbírky. Nejjednodušší a lépe pochopitelné to bude názorně předvést. Např. mám sbírku Lahváče a u jednotlivých položek chci evidovat: název pivovaru, obsah alkoholu, datum přidání do sbírky, objem láhve a poznámku. To jsou právě ty výše zmiňované nadpisy.
K vytvoření sbírky klikněte na tlačítko menu a zvolte Vytvořit sbírku. Viz Obrázek 21. Otevře se vám nová obrazovka aplikace s možností nadefinování své vlastní sbírky. Zde zadáte název sbírky, pod kterým bude sbírka vystupovat v seznamu, a jeden až osm parametrů sbírky, jimiž jsou výše zmiňované nadpisy jednotlivých popisků položky sbírky. Viz
3 Analýza a návrh aplikace
29
Obrázek 20. Zadáním počtu parametrů sbírky omezíte na stejný počet zadávaných parametrů položky sbírky.
Obrázek 20: Přidání nové sbírky
Jak je vidět na obrázku Obrázek 21, sbírek můžete mít více. Podržíte-li dotyk na sbírce déle, otevře se vám menu s položkami, které umožnují smazat celou sbírku i s jejími položkami (s připojením na internet se smaže sbírka i na serveru). Tato činnost je nevratná! Další možností po smazání je v menu editace, která umožnuje editovat již vytvořenou sbírku. Editace se otevře ve stejném okně jako při vytváření nové sbírky, viz Obrázek 20.
3 Analýza a návrh aplikace
30
Obrázek 21: Zobrazení sbírek
3.4.4 Položka sbírky Kliknutím na sbírku se dostanete na seznam všech položek té dané sbírky. K vytvoření nové položky sbírky je potřeba kliknout na tlačítko menu a zvolit Nová položka. Viz Obrázek 23. Otevře se podobné okno jako při vytváření sbírky (viz Obrázek 20), ale s několika různými změnami.
3 Analýza a návrh aplikace
31
Obrázek 22: Nová položka sbírky
Je zde přidána možnost zadání unikátního kódu, který je možno přidat naskenováním. Více o skenování a používaných kódech v kapitole 3.4.6 Vyhledávání skenováním kódu. Podle popisu skenování naskenujete vámi požadovaný kód a jeho hodnota se automaticky zobrazí v poli Kód (na obrázku Obrázek 22 je v poli Kód již kód po naskenování). Kód lze vložit i manuálně z klávesnice. Samozřejmě je možné si zvolit libovolný kód, podle kterého chcete položku odlišit od ostatních, nicméně tím vyvstává otázka, jestli pak bude možné tuto položku vyhledat skenováním popisovaném ve výše zmíněné kapitole. Dále se zde u jednotlivých parametrů položky zobrazí jako nápověda výše zmiňované nadpisy sbírky. Díky tomu je zadávání nové položky jednoduché, přehledné a nemělo by tak docházet k špatnému přiřazení parametrů položky k nadpisům sbírky. Zadat můžete pouze tolik parametrů položky, kolik jste zadali nadpisů v té dané sbírce. Dále stejně jako u sbírky je možnost editace či smazání jedné položky po vybrání položky z kontextového menu po dlouhém kliknutí na položku. Délku dlouhého kliknutí si každý uživatel Android zařízení může nastavit sám, ale zpravidla to znamená mít podržený prst na displeji po dobu delší než 500 ms.
3 Analýza a návrh aplikace
32
Na každé položce seznamu je vidět nejen název položky, ale i kód, pokud ho má položka přiřazený. Viz Obrázek 23.
Obrázek 23: Zobrazení položek sbírky
Po kliknutí na položku se zobrazí její detail. Viz Obrázek 24. Jsou zde vidět všechna zadaná data položky jako název, kód a další data sbírky. V našem případě je zde k nadpisu Pivovar přiřazen Plzeňský Prazdroj, Objem alkoholu je 4,4 % atd.
3 Analýza a návrh aplikace
33
Obrázek 24: Zobrazení detailu položky sbírky
3.4.5 Nahrání a stažení sbírek nebo položek Nedílnou součástí aplikace je možnost uložení celých sbírek na internetový server. Je to dobré jak pro archivaci dat, ale také pro případ ztráty, krádeže či rozbití přístroje, kdy nepřijdete o svá data. Dále se tu otevírá možnost synchronizace sbírek přes více mobilních zařízení pod jedním uživatelským účtem. Sbírku je nejdříve potřeba vytvořit. Poté ji nahrajete na server kliknutím na položku Nahrát sbírky na server (viz Obrázek 21), čímž se vezmou všechny sbírky a nahrají se do databáze na internetovém serveru. Od této chvíle máte tato data bezpečně zálohována. Tímto nahráním se odešlou pouze výše zmiňované nadpisy sbírek. Pokud v nich proběhla změna a tyto sbírky již byly předem nahrány na internetový server, tak se ty dané změněné sbírky upraví o provedené změny. Je nutné pochopit rozdělení nahrávání sbírek a nahrávání položek. Při výše popisovaném nahrání sbírek na internetový server se neodešle žádná položka sbírky. Kvůli tomu, že se při nahrávání sbírek nahrávají všechny sbírky v seznamu, by při nahrávání i všech položek všech sbírek mohlo docházet k delším časovým prodlevám, které by často nebyly vůbec
3 Analýza a návrh aplikace
34
nutné. Položky té dané sbírky se nahrávají pomocí kliknutí na tlačítko menu zařízení a vybráním položky menu Nahrát položky na server (viz Obrázek 23). Tím se nahrají nové sbírky na internetový server a u již nahraných položek se upraví na serveru případné změny. Stažení sbírek z internetového serveru je jednodušší než jejich nahrání, protože rychlost stahování z internetu je obvykle vyšší než rychlost nahrávání na internet, ale i z důvodu lepšího uživatelského použití. Po kliknutí na tlačítko menu v obrazovce seznamu sbírek (viz Obrázek 21) a vybrání položky menu Stáhnout sbírky se stáhnou všechny sbírky i s jejich položkami. Byly-li sbírky již někdy předtím staženy na tom daném zařízení a z jiného zařízení byly přidány, případně i stávající položky či sbírky byly upraveny, a následně byly nahrány na internetový server, tak se po stažení na prvním uvedeném zařízení seznam sbírek a jejich položek přizpůsobí stavu položek na serveru.
3.4.6 Vyhledávání skenováním kódu Vyhledávání za pomoci naskenování čárového či QR kódu je to, co tuto aplikaci odlišuje od jiných. Můžete totiž velmi jednoduše a rychle zjistit, zda ten daný předmět, opatřený jedním z výše zmíněných kódů, je ve vaší sbírce či nikoliv. Při správě větší sbírky založené na těchto kódech, je toto velkým pomocníkem. Když se vrátíme k uváděnému příkladu sbírky pivních lahví, tak při rozhodování o koupi nové láhve do sbírky oceníte, že máte svoji sbírku v Android zařízení a můžete v ní velmi rychle vyhledávat. K vyhledávání přistupte kliknutím na tlačítko menu na obrazovce se seznamem sbírek (viz Obrázek 21) a vybráním položky menu Naskenuj kód. K možnosti skenování kódu je nutné mít nainstalovanou aplikaci Barcode Scanner33, která je volně dostupná na online obchodě s aplikacemi Google Play. Není nutné ji předem instalovat, aplikace sama zjistí, zda ji máte nainstalovanou a v případě, že nikoliv, tak vás přesměruje k jejímu stažení. Pro správné fungování musí vaše Android zařízení mít zabudovaný fotoaparát na zadní straně zařízení
33
Barcode Scanner: Aplikace pro Android ve službě Google Play. Google Play [online]. 2013, 15.1.2013 [cit. 2013-04-23]. Dostupné z: https://play.google.com/store/apps/details?id=com.google.zxing.client.android
3 Analýza a návrh aplikace
35
Obrázek 25: Obrazovka na naskenování kódu
Po spuštění skenování se aplikace přepne na obrazovku pro skenování (viz Obrázek 25), která spustí fotoaparát ve vašem zařízení. Namiřte fotoaparát na kód, který chcete naskenovat a pokuste se strefit červenou osou na obrazovce (viz Obrázek 25) na horizontální osu kódu. V okamžiku přečtení kódu aplikace prohledá všechny vaše sbírky, zda tento naskenovaný kód neobsahují. Obsahuje-li nějaká položka tento kód, aplikace to vypíše krátkou zprávou (viz Obrázek 26). Tato zpráva obsahuje název položky a název sbírky, do které je tato položka zařazena. Chcete-li si svoji sbírku označit čárovými nebo QR kódy a tím naplno využít potenciálu této aplikace, podívejte se na internet, kde existuje mnoho generátorů těchto kódů např. pro čárové kódy34 a pro QR kódy35. Kvůli tisku těchto kódů možnost generování nebyla zapracována do aplikace CollectDroid.
34
Zdarma online generátor čárových kódů - snadno a rychle. Online generátor čárových kódů [online]. 2012 [cit. 2013-04-23]. Dostupné z: http://www.barcodegenerator.de/V2/cs/barcode_seriennummern.jsp
35
Online generátor QR kódů. IT solutions [online]. 2013 [cit. 2013-04-23]. Dostupné z: http://qr.dwander.cz/
3 Analýza a návrh aplikace
36
Obrázek 26: Obrazovka s výsledkem skenování
4 Publikace a propagace aplikací pro Android
37
4 Publikace a propagace aplikací pro Android 4.1
Publikace aplikací pro Android
Po vyvinutí aplikace a odladění vyvstalých problémů jsem chtěl tuto práci posunout ještě o kousek dál a proto jsem se rozhodl pro veřejnou publikaci aplikace na největším obchodu s aplikacemi pro platformu Android, na Google Play36. Prvním předpokladem je mít účet u společnosti Google, který mám již několik let. Dalším potřebným krokem je zaplatit $25 společnosti Google za vývojářský účet. Pro možnost publikace placené verze aplikace jsem si tento účet rozšířil na účet vývojáře – obchodníka. Toho jsem dosáhl zadáním mojí adresy a čísla kreditní karty, kterou mám připojenou k účtu Google.
4.1.1 Příprava publikace Při přípravě své aplikace na publikaci jsem ji nakonfiguroval, pomocí vývojového prostředí Eclipse s plug-inem Android SDK jsem sestavil instalační balíček aplikace a poté jsem ji testoval na vestavěném virtuálním Android zařízení ve výše zmíněném SDK. Konfigurační úkoly jsou jednoduché, zahrnují základní vyčištění kódu a modifikaci kódu, což napomáhá k optimalizaci aplikace. Proces sestavení instalačního balíčku je podobný jako sestavení tohoto balíčku při procesu odlaďování aplikace a může být provedeno pomocí uváděného Android SDK nástroje. Testovací procesy slouží jako závěrečná kontrola, zajistí, že aplikace běží podle očekávání v reálných podmínkách Android zařízení. Po dokončení přípravy aplikace na publikaci jsem nechal vygenerovat podepsaný APK (*.apk) soubor, který je možno distribuovat uživatelům přímo nebo distribuovat prostřednictvím internetového obchodu s aplikacemi, jako je Google Play. Po shromáždění všech podkladů jako je ikona aplikace, propagační text, propagační obrázky a sejmuté obrazovky aplikace jsem začal s přípravou konfigurace aplikace k publikaci. V této části jsem se věnoval vyčistění kódu od různých ladících výpisů, celkovému zpřehlednění kódu, odstranění nepoužívaných obrázků či jiných souborů v aplikaci, kontrole URL odkazů na internet a kontrole tzv. Android manifestu aplikace. Tento manifest obsahuje základní nastavení aplikace, jako jsou verze aplikace, verze Androidu, pro které je aplikace určená, povolení přístupu k různým částem zařízení po instalaci, určení první spuštěné aktivity aplikace a seznam všech používaných aktivit v aplikaci. Většinu těchto
36
Aplikace pro Android ve službě Google Play. Google Play [online]. 2013 [cit. 2013-04-23]. Dostupné z: https://play.google.com/store
4 Publikace a propagace aplikací pro Android
38
činností jsem prováděl již při vývoji, nicméně je potřeba závěrečná kontrola, aby v aplikaci nezbyl nějaký nechtěný kód či nezůstal tam nějaký nechtěný soubor. S dokončením závěrečné konfigurace aplikace jsem se mohl pustit do vytvoření výše zmiňovaného APK souboru, který je digitálně podepsán a optimalizován. JDK ve své instalaci obsahuje nástroje pro podepsání APK souboru (Keytool37 a Jarsigner38) svým privátním klíčem a Android SDK obsahuje nástroje pro sestavování a optimalizaci APK souboru. Jelikož jsem použil Eclipse s ADT plug-inem, tak byl tento celý proces plně automatizován. V sekci exportování v Eclipse jsem si zvolil volbu Export Android Application a vybral jsem, který aktuálně otevřený projekt chci exportovat. V dalším kroku jsem si vytvořil a zabezpečil vlastní sklad privátních klíčů pro podepsání aplikace a jeden privátní klíč jsem si vytvořil za pomocí průvodce. Poté už jenom stačilo vybrat si, kam chci výsledný soubor exportovat a o proces vytvoření podepsaného APK souboru připraveného pro publikaci a jeho optimalizaci se již postará výše popisované vývojové prostředí. Na závěr procesu přípravy jsem otestoval aplikaci na svém vlastním Android zařízení, abych se ujistil, že moje aplikace běží správně na reálném zařízení a při daných síťových podmínkách. Vyzkoušel jsem aplikaci CollectDroid na telefonu i na tabletu, zda se správně chovají grafické prvky a zda aplikace plynule bez pádu funguje při prováděných akcích v aplikaci. Tímto testem aplikace prošla bez problému díky dlouhé optimalizaci ve vývojovém prostředí a byla konečně připravena pro publikování.
4.1.2 Proces publikace Po dokončení výše popisovaných příprav pro publikaci aplikace jsem se přihlásil do vývojářské konzole Google Play39. Na úvodní stránce jsem zvolil možnost přidání nové aplikace. Vybral jsem češtinu jako jazyk, který bude aplikace používat v základním nastavení, a zadal jsem jméno aplikace, pod kterým bude vystupovat v obchodě Google Play. Jako první krok jsem zvolil nahrání dříve vytvořeného APK instalačního souboru aplikace. Díky jednoduchému prostředí vývojářské konzole stačí vybrat nahrávání aplikace a pouze přetáhnout ten daný soubor na plochu internetového prohlížeče. Ten se pak nahraje a konzole následně zkontroluje všechny potřebné předpoklady aplikace, zda ji lze v této podobě
37
Keytool: Key and Certificate Management Tool. Oracle: Java SE Documentation [online]. 2011 [cit. 2013-04-29]. Dostupné z: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html
38
Jarsigner: JAR Signing and Verification Tool. Oracle: Java SE Documentation [online]. 2011 [cit. 2013-04-29]. Dostupné z: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html
39
Developer Console. Google Play [online]. https://play.google.com/apps/publish/
2013
[cit.
2013-04-29].
Dostupné
z:
4 Publikace a propagace aplikací pro Android
39
publikovat. Zde je také možnost získání unikátního licenčního čísla pro danou aplikaci, nicméně to vyžaduje úpravu kódu o kontrolu licence. Licencování aplikace považuji již nad rámec této práce. Další krok, co jsem učinil, je popsání aplikace, jak ji uvidí zákazníci v obchodě Google Play. K dispozici je možnost rozlišení překladů popisu aplikace pro jednotlivé světové jazyky. Do lokalizace se počítají i obrázky. Povinné textové popisky aplikace jsou (uvádím i maximální počet znaků polí pro lepší představu): Název aplikace (maximálně 30 znaků) Popis (maximálně 4000 znaků) – zde jsem napsal základní popis aplikace a základní návod k aplikaci Propagační text (maximálně 80 znaků) – krátký reklamní text Novinky (maximálně 500 znaků) – prostor pro popis změn v aplikaci po nahrání nových verzí aplikací Poté jsem nahrál propagační obrázky a sejmuté obrazovky aplikace, které jsem si připravil ještě před konfigurací aplikace pro publikaci. Je nutné nahrát alespoň 2 obrázky v rozlišení buď pro telefon, sedmi palcový tablet nebo deseti palcový tablet. Maximální možný počet těchto obrázků je 8. Dále jsem nahrál ikonu aplikace ve vysokém rozlišení, což je další nutnou podmínkou pro dokončení procesu publikace. Již nepovinně, ale nahrál jsem zde i propagační grafiku pro možnost zobrazení aplikace na úvodní stránce obchodu Google Play. Celý obchod Google Play je rozdělený do mnoha kategorií pro lepší přehlednost a proto bylo nutné, abych zvolil typ mojí aplikace a kategorii, do které se nejlépe hodí. Pro označení vhodnosti obsahu například pro děti bylo potřeba zvolit hodnocení obsahu aplikace. Pro možnost kontaktování autora jsem vyplnil e-mailovou adresu, která je pak uvedená přímo u aplikace v obchodě Google Play. Nakonec této části jsem zvolil, že nepotřebuji používat smlouvu s koncovým zákazníkem. Tímto jsem dokončil zobrazení aplikace, jaké uvidí zákazník, když si zobrazí její detail. Na další záložce konzole přidávání nové aplikace je problematika ocenění a distribuce aplikace. Zde se dělí placená verze CollectDroid Plus a neplacená verze CollectDroid. U neplacené verze jsem zvolil, že bude zobrazena s volnou možností stažení a dále jsem zvolil, v jakých světových zemích bude tato aplikace distribuována. U placené verze jsem označil aplikaci jako placenou a zadal jsem cenu v CZK. Tím se mi u světových zemí v možnostech distribuce zobrazila nabídka přepočítání aktuální kurzu ze zadané hodnoty v CZK dle aktuálních měnových kurzů.
4 Publikace a propagace aplikací pro Android
40
Tímto jsem dokončil všechny nutné kroky pro oficiální publikaci v obchodě Google Play a mohl jsem zvolit ve vývojářské konzoli možnost publikovat aplikaci. Po několika hodinách, než proběhla samotná publikace, jsem si již mohl stáhnout oficiální instalaci aplikace CollectDroid.
4.2
Možnosti propagace
Další částí této práce je představit možnosti propagace mobilní aplikace, kterých je v dnešní době internetu opravdu mnoho. Tato část je již z části pouze teoretická, protože by detailnější popis postupů reklamy přesahoval rozsah této práce a také díky nákladům za reklamu a propagaci, které by musely jít do řádů stovek či pravděpodobněji tisíců, aby tato reklama měla smysl. Základem propagace by bylo zasáhnout co největší možný počet uživatelů, což by vyžadovalo jako první přeložit aplikaci do angličtiny. Tím se mnohonásobně rozšíří možný zásah uživatelů reklamou. Dále je zásadní profil aplikace, který vidí uživatelé daného obchodu s aplikacemi. Měl by obsahovat stručný a výstižný popis aplikace a případně návod na použití. Určitě by tento profil měl obsahovat obrázky z běhu aplikace či reklamní obrázky k aplikaci. V neposlední řadě a co bývá jedním ze základních kamenů úspěchu aplikace, je propagační video, které je možné umístit na profil aplikace.
4.2.1 Použité možnosti propagace Další částí této práce je představit možnosti jak jsem se v rámci své práce pustil do reklamy, která je zadarmo, a to do šíření odkazu na Google Play mezi přáteli na sociální síti Facebook40. Tato reklama mi zajistila stažení aplikace v řádech desítek aktivních stažení. Dále jsem do aplikace přidal reklamy AdMob41, které se v aplikaci zobrazí jako panel obdélníkového tvaru, viz Obrázek 21. Při přítomné konektivitě na internet se stáhne obsah této reklamy a zobrazí se uživateli. Jako autor této reklamy dostanu peníze ne za počet zobrazených reklam, ale za počet prokliknutí těchto reklam. Pro tyto reklamy jsem registrací na serveru AdMob a propojením s aplikací získal unikátní ID pro reklamy v mojí aplikaci. Do projektu aplikace jsem přidal Java balíček Google AdMob SDK, dále XML kód do grafického uživatelského rozhraní a tím jsem dosáhl zobrazení reklam v aplikaci.
40
Facebook [online]. 2013 [cit. 2013-05-03]. Dostupné z: https://www.facebook.com/
41
AdMob by Google: Monetize and promote your apps with ads [online]. 2009 [cit. 2013-05-03]. Dostupné z: http://www.google.com/ads/admob/
4 Publikace a propagace aplikací pro Android
4.3
41
Použitelné možnosti propagace
V této části jsem se zaměřil na možnosti propagace aplikace na internetu, kterých existuje mnoho, já jsem si pro potřeby této práce vybral několik možností, o kterých si myslím, že jsou relevantní a zajímavé. Obchod Google Play je největším obchodem s Android aplikacemi, nicméně jsou tu další desítky alternativních obchodů, které mají také své stálé uživatele. Mezi takové největší obchody patří: Amazon App Store GetJar SlideME Samsung apps Publikací na zmiňovaných obchodech se rozšíří základna uživatelů pro propagaci této aplikace. Tyto obchody se liší množství dostupných aplikací, podmínkami publikace, počtem aktivních uživatelů apod. Každý z uvedených obchodů obsahuje možnosti placené interní propagace aplikací. Aby moje aplikace byla na uvedených obchodech vidět a nezapadla někam, kde si jí nikdo ani nevšimne, tak by bylo dobré použít techniky SEO (optimalizace pro vyhledávače – search engine optimalization). Tato technika má za cíl získat ve výsledku hledání ve vyhledávači pro danou aplikaci (obecně pro webovou stránku) vyšší pozici a tím také četnější návštěvy uživateli. Základem je analýza vhodných klíčových slov a následně jejich použití buď v názvu aplikace anebo v popisu aplikace, kde by každé zvolené klíčové slovo mělo být použito alespoň pětkrát. Tato technika nezaručuje instantní úspěch, ale je správným krokem pro zviditelnění aplikace. Dalším zajímavým způsobem propagace je kontaktování webů specializovaných na mobilní technologie s prosbou o recenzi mojí aplikace. V případě kladné recenze by se jistě zvedl počet stažení aplikace.
4.3.1 Internetové reklamní kampaně Možnosti reklamních kampaní je na internetu mnoho. Zde uvádím pouze několik zajímavých příkladů, které by se daly využít se spojením s mobilní aplikací. Na výše zmiňovaných webových stránkách AdMob je možné si zaplatit i reklamní kampaň na zobrazování reklam v mobilních aplikacích na platformě Android i iOS. Díky mnoha aplikacím, které tyto reklamy obsahují, je počet zasažených uživatelů veliký. Funguje zde
4 Publikace a propagace aplikací pro Android
42
model Pay-Per-Click, což znamená, že jako zadavatel této reklamy platím pouze za to, když uživatel aplikace klikne na mojí reklamu a neplatím za zobrazení této reklamy. Jednou ze zajímavých možností kampaně je na serveru Google AdWords. Tyto reklamy se zobrazují na spoustě dnešních webových stránek a i v několika službách Google. Fungují na výše zmiňovaném principu klíčových slov, pro které, jsou-li obsaženy v textu, se zde zobrazí tato reklama. Další možností kampaně je reklamní kampaň na sociální sítí Facebook, kterou v dnešní době používá přes 1 miliardu uživatelů42. Tyto reklamy fungují na základě informací z uživatelských profilů. První informací je geografická poloha, kterou chci zasáhnout svojí reklamní kampaní. Dále se jedná o demografické údaje jako věk a pohlaví uživatelů. Poté následuje výběr zájmů uživatelů. Poté se na základě předpokládaného rozsahu reklamy zobrazí cena. Lze zde nastavit více detailů reklamy, ale tyto považuji za základní.
42
Facebook Reports First Quarter 2013 Results. Facebook: Investor relations [online]. 2013 [cit. 2013-05-04]. Dostupné z: http://investor.fb.com/releasedetail.cfm?ReleaseID=761090
5 Závěr
43
5 Závěr Cílem mé práce bylo vyvinout funkční aplikaci pro dynamickou správu sbírek na platformu Android, která bude umožňovat zálohování dat na internetový server. Toto jsem splnil a tato aplikace se zdrojovým kódem je připojená k této práci jako digitální netisknutá příloha. Díky zpětné vazbě od uživatelů neplacené verze mojí aplikace jsem vyvinul a publikoval i placenou verzi této aplikace (CollectDroid Plus) bez reklam a s další funkcionalitou, což dokonce přesahuje a rozšiřuje původní cíle práce. V teoretické části jsem si dal cíle v oblastech analýzy, popisu, návrhu a publikace mé aplikace CollectDroid. Věřím tomu, že se mi podařilo v mé práci zahrnout všechny důležité aspekty všech stádií vývoje této aplikace. Vyvinutá aplikace má veliké možnosti rozvoje do budoucnosti. Jsou zde možnosti od určitých úprav pro jednotlivé případy užití až po připojení této aplikace jako koncové komponenty některého informačního systému podniku. Také by se dalo uvažovat o přenosu této aplikace i na jiné platformy, než pouze na Android. Mobilní technologie jsou jedním z nejdynamičtěji se rozvíjející odvětví a společnost do nich do jisté míry vkládá veliké naděje ve stále větší integraci těchto technologií do života člověka. Domnívám se, že by byl veliký rozdíl, psal-li bych tuto práci před rokem a na tomto základě si myslím, že za rok bych ji vyvíjel také jinak a třeba na základě i jiných technologií. Je to právě ale tento masivní pokrok, který mi na celé oblasti mobilních technologií přijde až fascinující a doufám, že budu mít možnost pokračovat v práci v tomto odvětví.
44
Terminologický slovník Termín
Význam [zdroj]
API – Application Programming Interface
Aplikační programové rozhraní [přeloženo]
APK – Android Application Package File
Soubor/balíček s Android aplikací [přeloženo]
AVD – Android virtual Device
Virtuální Android zařízení [přeloženo], které emuluje reálné Android zařízení na počítači
Beta verze
Funkční verze programu, která ještě není konečná a stále se na ní pracuje
Clipboard
Prostor v systému pro textové operace jako např. Kopírovat(Ctrl +C), Vložit(Ctrl+V) atd.
CollectDroid
Android aplikace pro dynamickou správu sbírek na základě čárových či QR kódů
Databáze
Strukturovaný systém souborů přístupný pomocí SQL
Eclipse
Rozšířitelné vývojové prostředí s možností vývoje v mnoha programovacích jazycích
Emulátor
Program pro virtuální vytvoření (imitaci) daného prostředí
Google
Jedna z nejvíce obdivovaných firem celosvětově, která se proslavila díky svému revolučnímu vyhledávači
Google Play
Internetový obchod (tržiště) s aplikacemi [15]
GUI – Grafické uživatelské rozhraní
„Grafické uživatelské rozhraní je grafická nástavba programu, se kterou uživatel komunikuje na základě ikon, oken a menu“[16]
Hosting
Poskytování prostoru na serveru určeného primárně pro webové stránky
HTTP – Hypertext Transfer Protocol
„Internetový protokol sloužící k výměně hypertextových dokumentů“[17]
ID
Identifikační číslo
JAR – Java archive
Balíček s Java soubory
Java
Multiplatformní objektově orientovaný programovací jazyk
JSON – JavaScript Object Notation
„Odlehčený formát pro výměnu dat.“[18]
45
Termín
Význam [zdroj]
Kompilace
Překlad či konverze z jednoho počítačového jazyka do druhého
Logování
Vytváření záznamů o běhu programu generované právě tím daným programem
Menu
Nabídka položek
Monitorování
Sledování běhu programu
MySQL
Volně dostupný databázový systém
OS – Operační systém
Základní systém zařízení, který spravuje všechny ostatní aplikace/programy v zařízení a zprostředkovává základní komunikaci mezi komponentami zařízení
Over-the-air
Technika přenosu dat – bezdrátově
PHP
Skriptovací jazyk používaný pro práci s internetovými stránkami
Plug-in
Doplněk systému
SDK – Source Development Kit
Základní prostřední pro vytváření a spouštění programů [19]
SEO – Search engine optimalization
Optimalizace výsledků vyhledávacího programu
Smartphone
Tzv. „chytrý“ telefon
SQL - Structured Query Standardizovaný strukturovaný dotazovací jazyk používaný při práci Language s databázemi SQLite
Volně dostupný databázový systém
URL
Standardizovaný odkaz na určitý zdroj
Widget
Modul GUI
XML – Extended Markup Language
Standardizovaný rozšířitelný značkovací jazyk [přeloženo]
46
Seznam literatury [1] MURPHY, Mark L. Android 2: průvodce programováním mobilních aplikací. Vyd. 1. Brno: Computer Press, 2011, 375 s. ISBN 978-80-251-3194-7.
[2] Android Developers [online]. 2013 [cit. 2013-05-04]. Dostupné z: http://developer.android.com/ [3] MEIER, Reto. Professional Android 4 application development. Updated for Android 4. Indianapolis: John Wiley, 2012, xlii, 817 p. ISBN 978-111-8262-153.
[4] Android: A visual history. The Verge [online]. 2011 [cit. 2013-04-24]. Dostupné z: http://www.theverge.com/2011/12/7/2585779/android-history
[5] Robot Evolution. Bonkers World [online]. 2013 [cit. 2013-04-24]. Dostupné z: http://www.bonkersworld.net/robot-evolution/
[6] ANDROID HISTORY. AppNT [online]. 2012 [cit. 2013-04-24]. Dostupné z: http://www.appnt.com/wp-content/uploads/2012/02/Android-History.png
[7] Android 2.3, Gingerbread. Mobile raptor [online]. 2012 [cit. 2013-05-07]. Dostupné z: http://1.bp.blogspot.com/VZTTB8tc2Cc/UAaQPpKO_FI/AAAAAAAAJF0/jDvqFafgmY8/s1600/android-gingerbread-1.jpg
[8] Android Honeycomb Development. AiFlex – Development Studio [online]. 2011 [cit. 2013-0507]. Dostupné z: http://www.aiflex.com/wp-content/uploads/2011/03/Android-Honeycomb.jpg
[9] Android 4.0 Ice Cream Sandwich: The Details. Technorati [online]. 2011 [cit. 2013-05-07]. Dostupné z: http://scm-l3.technorati.com/11/06/21/45839/Android-Ice-Cream-Sandwich.jpg
[10] Android 4.2: A new flavor of Jelly Bean. Android [online]. 2012 [cit. 2013-05-07]. Dostupné z: http://www.android.com/images/whatsnew/jb-new-logo.png
[11] Free barcode generator. Barcoding [online]. 2013 [cit. 2013-05-06]. Dostupné z: http://www.barcoding.com/upc/
[12] QR kód. QR kódy a QR code technologie [online]. 2009 [cit. 2013-05-07]. Dostupné z: http://www.qr-kody.cz/wp-content/images/qr-kody-cz.jpg
[13] PowerDesigner. Krokodýlovy databáze [online]. 2010 [cit. 2013-04-26]. Dostupné z: http://krokodata.vse.cz/DM/PD
[14] Preparing for Release. Android Developers [online]. 2013 [cit. 2013-04-29]. Dostupné z: http://developer.android.com/tools/publishing/preparing.html
[15] Aplikace pro Android ve službě Google Play. Google Play [online]. 2013 [cit. 2013-04-23]. Dostupné z: https://play.google.com/store
[16] GUI Definition. LINFO: The Linux Information Project [online]. 2004 [cit. 2013-05-07]. Dostupné z: http://www.linfo.org/gui.html
[17] HTTP - Hypertext Transfer Protocol. W3C [online]. 1996 [cit. 2013-05-07]. Dostupné z: http://www.w3.org/Protocols/
[18] Úvod do JSON. JSON [online]. 2004 [cit. 2013-05-07]. Dostupné z: http://www.json.org/jsoncz.html
[19] PAVLÍČKOVÁ, Jarmila a Luboš PAVLÍČEK. Úvod do Javy. Vyd. 1. Praha: Oeconomica, 2005, 227 s. ISBN 80-245-0963-6.
47
Seznam obrázků a tabulek Seznam obrázků
Obrázek 1: Vývoj platforem Android (Zdroj: [5]) ................................................................... 5 Obrázek 2: 1.5 Cupcake (Zdroj: [6]) ..................................................................................... 5 Obrázek 3: 1.6 Donut (Zdroj: [6]) ......................................................................................... 5 Obrázek 4: 2.0/2.1 Eclair (Zdroj: [6]) .................................................................................... 6 Obrázek 5: 2.2 Froyo (Zdroj: [6]) .......................................................................................... 6 Obrázek 6: 2.3 Gingerbread (Zdroj: [7]) ............................................................................... 6 Obrázek 7: 3.x Honeycomb (Zdroj: [8]) ................................................................................ 7 Obrázek 8: 4.0 Ice cream sandwich (Zdroj: [9]) ................................................................... 7 Obrázek 9: 4.1 Jelly Bean (Zdroj: [10]) ................................................................................ 7 Obrázek 10: Čárový kód (Zdroj [11]) .................................................................................... 8 Obrázek 11: QR kód (Zdroj: [12]) ......................................................................................... 8 Obrázek 12: Případy užití .................................................................................................. 12 Obrázek 13: Konceptuální model databáze ....................................................................... 16 Obrázek 14: Diagram tříd – detail balíčku user .................................................................. 17 Obrázek 15: Diagram tříd – detail balíčku collection .......................................................... 19 Obrázek 16: Diagram tříd – detail balíčku item .................................................................. 21 Obrázek 17: Detail aplikace v aplikaci Google Play ........................................................... 26 Obrázek 18: Přihlašovací obrazovka ................................................................................. 27 Obrázek 19: Registrace nového uživatele ......................................................................... 28 Obrázek 20: Přidání nové sbírky ........................................................................................ 29 Obrázek 21: Zobrazení sbírek............................................................................................ 30 Obrázek 22: Nová položka sbírky ...................................................................................... 31 Obrázek 23: Zobrazení položek sbírky .............................................................................. 32 Obrázek 24: Zobrazení detailu položky sbírky ................................................................... 33 Obrázek 25: Obrazovka na naskenování kódu .................................................................. 35 Obrázek 26: Obrazovka s výsledkem skenování ............................................................... 36
48
Příloha A: Kompletní diagram tříd