{"id":33,"date":"2012-10-02T19:26:35","date_gmt":"2012-10-02T17:26:35","guid":{"rendered":""},"modified":"2018-09-17T21:56:45","modified_gmt":"2018-09-17T19:56:45","slug":"ako-na-vyvoj-pre-android","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/ako-na-vyvoj-pre-android\/","title":{"rendered":"Ako na v\u00fdvoj pre Android"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/4f56sf56asd.png\" alt=\"Obr\u00e1zok\" width=\"200\" height=\"200\" \/>Android sa jav\u00ed ako celkom s\u013eubn\u00e1 platforma. Nielen, \u017ee m\u00e1 moment\u00e1lne najv\u00e4\u010d\u0161\u00ed podiel na trhu so smartf\u00f3nmi, ale pomaly sa tla\u010d\u00ed aj do in\u00fdch oblast\u00ed (tablet, router, mikrovlnka). Pred nejak\u00fdm \u010dasom som sa stal majite\u013eom telef\u00f3nu s t\u00fdmto opera\u010dn\u00fdm syst\u00e9m a nebola to n\u00e1hoda. Chystal som sa toti\u017e nap\u00edsa\u0165 si jednoduch\u00fa aplik\u00e1ciu, ktor\u00e1 mi umo\u017en\u00ed nosi\u0165 Inbox (zo syst\u00e9mu GTD) st\u00e1le pri sebe. Ne\u017e som sa ale mohol pusti\u0165 do pr\u00e1ce, musel som nabra\u0165 nejak\u00e9 znalosti z v\u00fdvoja pre t\u00fato platformu. Toto s\u00fa moje z\u00e1pisky z tohto b\u00e1dania.<!--more--><!--break--><\/p>\n<p>V\u00fdvoj pre Android je v prvom rade o programovacom jazyku Java. Ak ste sa teraz pote\u0161ili, \u017ee Javu viete a viete teda vyv\u00edja\u0165 Android, tak v\u00e1s trochu zabrzd\u00edm, preto\u017ee k\u00f3d je s\u00edce syntakticky zhodn\u00fd s Javou, ale nebe\u017e\u00ed v r\u00e1mci Java Virtual Machine ale v r\u00e1mci Dalvik Virtual Machine. \u010co je framework, na ktorom \u0161tandardne be\u017eia v\u0161etky Android programy. Tak\u017ee syntax viete, ale to, \u010do mus\u00edte nanovo absorbova\u0165, s\u00fa triedy a mechanizmy v tomto frameworku. Nejak\u00e1 \u010das\u0165 je toto\u017en\u00e1 s JVM, ale dos\u0165 ve\u013ea vec\u00ed je rozdielnych. O tom, \u017ee Google takto pou\u017eil Java, sa dodnes spor\u00ed s Oraclom, ktor\u00fd ho za to \u017ealoval (technick\u00e9 podrobnosti s\u00fa trochu komplikovanej\u0161ie), pri\u010dom posledn\u00e9 spr\u00e1vy ukazuj\u00fa, \u017ee Google by mohol vyhra\u0165.<\/p>\n<p>Na to, aby ste mohli vyv\u00edja\u0165, potrebujete nejak\u00e9 prostredie. V prvom rade ni\u010d neurob\u00edte bez Android SDK, ktor\u00fd sa samozrejme d\u00e1 zadarmo stiahnu\u0165. To je bal\u00edk r\u00f4znych programov, pomocou ktor\u00fdch by ste si mali plne vysta\u010di\u0165 pre v\u0161etky \u00falohy, ktor\u00e9 v\u00e1s pri takomto v\u00fdvoji \u010dakaj\u00fa. Probl\u00e9m je s t\u00fdm, \u017ee je to kopa r\u00f4znych n\u00e1strojov be\u017eiacich na pr\u00edkazovom riadku, a teda jeho priame pou\u017eitie by nebolo jednoduch\u00e9. A tu prich\u00e1dza na sc\u00e9nu v\u00fdvojov\u00e9 prostredie Eclipse. Priamo pre \u0148ho Google naprogramoval plugin, ktor\u00fd sa doin\u0161taluje, nastav\u00ed sa mu cesta k SDK a potom to cel\u00e9 veselo funguje z Eclipsu. Tak\u017ee viete debugova\u0165, nasadzova\u0165 aplik\u00e1ciu alebo riadi\u0165 virtu\u00e1lne zariadenia. V SDK je toti\u017e spr\u00e1vca virtu\u00e1lnych zariaden\u00ed, pomocou ktor\u00e9ho si ich viete nastavi\u0165 aj nieko\u013eko naraz. Pomocou nich potom viete aplik\u00e1ciu vyv\u00edja\u0165, a dokonca dok\u00e1\u017eu simulova\u0165 GPS polohu, gyroskop, kameru, prijatie SMS at\u010f. Mal\u00e1 rada: po spusten\u00ed virtu\u00e1lneho zariadenia ho nevyp\u00ednajte. Ak chcete po oprave chyby nasadi\u0165 nov\u00fa verziu zdrojov\u00fdch k\u00f3dov, viete pou\u017ei\u0165 be\u017eiace virtu\u00e1lne zariadenie, do ktor\u00e9ho ho Eclipse s Android SDK dostan\u00fa.<\/p>\n<p>Okrem Javy potrebujete na \u00faspe\u0161n\u00fd v\u00fdvoj aplik\u00e1ci\u00ed pozna\u0165 aj princ\u00edpy Android prostredia. Existuje nieko\u013eko z\u00e1kladn\u00fdch pojmov, s ktor\u00fdmi sa m\u00f4\u017eete stretn\u00fa\u0165:<\/p>\n<p>1. <strong>Action<\/strong> &#8211; jedna obrazovka va\u0161ej aplik\u00e1cie. Teda nie\u010do, \u010do sa zobraz\u00ed a je schopn\u00e9 spracova\u0165 vstup od pou\u017e\u00edvate\u013ea.<\/p>\n<p>2. <strong>Broadcast Reciever<\/strong> &#8211; dok\u00e1\u017ee prija\u0165 inform\u00e1ciu o r\u00f4znych udalostiach, ktor\u00e9 sa dej\u00fa. Ak napr\u00edklad pr\u00edde SMS, tak pomocou vytvorenia triedy tak\u00e9hoto typu vo va\u0161ej aplik\u00e1cii sa o tejto udalosti dozviete a viete s t\u00fdm nie\u010do spravi\u0165.<\/p>\n<p>3. <strong>Content Provider<\/strong> &#8211; typ triedy, ktor\u00fd budete potrebova\u0165, ak va\u0161a aplik\u00e1cia chce poskytova\u0165 \u00fadaje in\u00fdm aplik\u00e1ci\u00e1m. K jednotliv\u00fdm \u00fadajom sa pristupuje pomocou syst\u00e9mu <span style=\"background: none repeat scroll 0% 0% transparent;\">URI<\/span> adries &#8211; ve\u013emi podobn\u00e9 REST sie\u0165ov\u00fdm slu\u017eb\u00e1m.<\/p>\n<p>4. <strong>Service<\/strong> &#8211; podobne ako v klasickom OS je to typ aplik\u00e1cie, ktor\u00e1 be\u017e\u00ed na pozad\u00ed. V Androide sa v\u0161ak pr\u00edsnej\u0161ie vyhodnocuje, \u010di m\u00e1 beh va\u0161ej slu\u017eby opodstatnenie, preto\u017ee v\u0161etok be\u017eiaci k\u00f3d spotrebov\u00e1va energiu ukryt\u00fa v bat\u00e9rii.<\/p>\n<p>Zo v\u0161etk\u00fdch tak\u00fdchto tried je ale najd\u00f4le\u017eitej\u0161ia trieda <strong>Intent<\/strong>. Intent je v Androide trieda, ktor\u00e1 reprezentuje nejak\u00fd z\u00e1mer.<span style=\"background: none repeat scroll 0% 0% transparent;\"> Pou\u017e\u00edvate\u013e chce napr\u00edklad niekoho vyh\u013eada\u0165 v zozname kontaktov,<\/span> alebo posla\u0165 SMS. A tento jeho z\u00e1mer je poslan\u00fd do syst\u00e9mu a ten sa pok\u00fa\u0161a n\u00e1js\u0165 aplik\u00e1ciu, ktor\u00e1 mu najviac vyhovuje. Ka\u017ed\u00e1 aplik\u00e1cia m\u00e1 toti\u017e tzv. IntentFilter, ktor\u00fd hovor\u00ed o tom, ak\u00e9 z\u00e1mery vie dan\u00e1 aplik\u00e1cia obsl\u00fa\u017ei\u0165. Prostredie Androidu je ve\u013emi slabov\u00e4zobn\u00e9, a teda umo\u017e\u0148uje vymie\u0148a\u0165 jednotliv\u00e9 jeho komponenty, pri\u010dom ich prepojenie je realizovan\u00e9 pr\u00e1ve cez tak\u00e9ho slabov\u00e4zobn\u00e9 intenty. M\u00f4\u017eete si napr\u00edklad zmeni\u0165 aplik\u00e1ciu, ktor\u00e1 v\u00e1m zobrazuje zoznam kontaktov. A ke\u010f niektor\u00e1 aplik\u00e1cia po\u0161le Intent oh\u013eadom kontaktov do syst\u00e9mu, tak sa pou\u017eije t\u00e1to nov\u00e1 aplik\u00e1cia. Ak m\u00e1te Android a stalo sa v\u00e1m niekedy, \u017ee v\u00e1m pri vyvolan\u00ed nejakej akcie zobrazil okno, kde si m\u00e1te vybra\u0165 aplik\u00e1ciu, ktorou chcete po\u017eiadavku obsl\u00fa\u017ei\u0165, je to preto, lebo tieto aplik\u00e1cie mali pravdepodobne rovnak\u00e9 IntentFiltre a Android sa u\u017e jednoducho nevedel rozhodn\u00fa\u0165, ktor\u00e1 je vhodnej\u0161ia. O Intentoch by sa dalo p\u00edsa\u0165 ve\u013ea, lebo s\u00fa z\u00e1kladn\u00fdm lepidlom, ktor\u00e9 dr\u017e\u00ed vn\u00fatorn\u00fd svet Androidu po kope, ale za zmienku stoj\u00ed, \u017ee ak va\u0161a aplik\u00e1cia obsahuje viacero Aktiv\u00edt (teda obrazoviek), tak aj tieto Aktivity by mali by\u0165 medzi sebou navz\u00e1jom prepojen\u00e9 poslan\u00edm Intentu do syst\u00e9mu (aj ke\u010f existuje sp\u00f4sob ako napevno vyvola\u0165 jednu obrazovku z druhej). To so sebou nesie jeden zauj\u00edmav\u00fd fakt, a to \u017ee niekedy v bud\u00facnosti v\u00e1m m\u00f4\u017ee niekto nahradi\u0165 jednu va\u0161u obrazovku v programe svojou.<\/p>\n<p>Ke\u010f u\u017e sme pri t\u00fdch obrazovk\u00e1ch, tak za zmienku stoj\u00ed, \u017ee A<span style=\"background: none repeat scroll 0% 0% transparent;\">ndroid <\/span>sa musel vysporiada\u0165 s jednou komplik\u00e1ciou. A tou je to, \u017ee zariadenia, na ktor\u00fdch programy be\u017eia, m\u00f4\u017eu ma\u0165 r\u00f4znu ve\u013ekos\u0165 obrazovky. Zabudnite teda na to, \u017ee by ste zadefinovali presn\u00e9 s\u00faradnice a rozmery ovl\u00e1dac\u00edch prvkov. Sk\u00f4r si len vyber\u00e1te, ak\u00fdm sp\u00f4sobom ich chcete ved\u013ea seba uklada\u0165 (pod seba, do dvoch st\u013apcov a pod.) a nastavujete niektor\u00e9 ich parametre (napr\u00edklad, \u017ee m\u00e1 tla\u010didlo vyplni\u0165 cel\u00fa \u0161\u00edrku obrazovky). Android sa ich potom pok\u00fasi na z\u00e1klade t\u00fdchto inform\u00e1ci\u00ed spr\u00e1vne zobrazi\u0165 na \u013eubovo\u013enom displeji.<\/p>\n<p>Okrem Javy, ktor\u00e1 je hlavn\u00fdm programovac\u00edm jazykom, m\u00f4\u017eete p\u00edsa\u0165 e\u0161te aplik\u00e1cie v C a JavaScripte. Na programovanie v C potrebujete tzv. Native Development Kit (NDK), ktor\u00fd obsahuje okrem in\u00e9ho aj kompil\u00e1tor C-\u010dka. Rie\u0161enie s JavaScriptom vlastne predstavuje klasick\u00fa web str\u00e1nku (teda okrem JavaScriptu sa pracuje e\u0161te s HTML a CSS) ale s t\u00fdm, \u017ee je mo\u017en\u00e9 vola\u0165 Java kni\u017enice.<\/p>\n<p>Ost\u00e1va u\u017e len spomen\u00fa\u0165, \u017ee pre ukladanie \u00fadajov je k dispoz\u00edcii SQLite syst\u00e9m s komplet pripravenou vrstvou tried na pr\u00edstup k \u00fadajom.<\/p>\n<p>Programovanie pre Android sa v mnohom podob\u00e1 programovaniu aplik\u00e1ci\u00ed pre klasick\u00e9 desktop po\u010d\u00edtate. Navrhujete obrazovky a definujete ich spr\u00e1vanie. To, v \u010dom sa to l\u00ed\u0161i, je prepojenie jednotliv\u00fdch \u010dast\u00ed pomocou Intentov a tie\u017e to, ako sa obrazovky definuj\u00fa. Je jasne vidie\u0165, \u017ee tvorcovia architekt\u00fary chceli do tohto prostredia prinies\u0165 ve\u013ea slabov\u00e4zobn\u00fdch <span style=\"background: none repeat scroll 0% 0% transparent;\">prvkov,<\/span> a tak nie je divu, \u017ee sa tu opakuj\u00fa princ\u00edpy, ak\u00e9 sa pou\u017e\u00edvaj\u00fa pri sie\u0165ov\u00fdch slu\u017eb\u00e1ch a servisne-orientovan\u00fdch architekt\u00farach. Android predstavuje tak\u00fd mikrosvet, v ktorom ka\u017ed\u00e1 aktivita nie\u010do dok\u00e1\u017ee a syst\u00e9m jej tak vie posla\u0165 po\u017eiadavku na spracovanie.<\/p>","protected":false},"excerpt":{"rendered":"<p>Android sa jav\u00ed ako celkom s\u013eubn\u00e1 platforma. Nielen, \u017ee m\u00e1 moment\u00e1lne najv\u00e4\u010d\u0161\u00ed podiel na trhu so smartf\u00f3nmi, ale pomaly sa tla\u010d\u00ed aj do in\u00fdch oblast\u00ed (tablet, router, mikrovlnka). Pred nejak\u00fdm \u010dasom som sa stal majite\u013eom telef\u00f3nu s t\u00fdmto opera\u010dn\u00fdm syst\u00e9m a nebola to n\u00e1hoda. Chystal som sa toti\u017e nap\u00edsa\u0165 si jednoduch\u00fa aplik\u00e1ciu, ktor\u00e1 mi umo\u017en\u00ed [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-33","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":2,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":225,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/33\/revisions\/225"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}