Android sa javí ako celkom sľubná platforma. Nielen, že má momentálne najväčší podiel na trhu so smartfónmi, ale pomaly sa tlačí aj do iných oblastí (tablet, router, mikrovlnka). Pred nejakým časom som sa stal majiteľom telefónu s týmto operačným systém a nebola to náhoda. Chystal som sa totiž napísať si jednoduchú aplikáciu, ktorá mi umožní nosiť Inbox (zo systému GTD) stále pri sebe. Než som sa ale mohol pustiť do práce, musel som nabrať nejaké znalosti z vývoja pre túto platformu. Toto sú moje zápisky z tohto bádania.
Vývoj pre Android je v prvom rade o programovacom jazyku Java. Ak ste sa teraz potešili, že Javu viete a viete teda vyvíjať Android, tak vás trochu zabrzdím, pretože kód je síce syntakticky zhodný s Javou, ale nebeží v rámci Java Virtual Machine ale v rámci Dalvik Virtual Machine. Čo je framework, na ktorom štandardne bežia všetky Android programy. Takže syntax viete, ale to, čo musíte nanovo absorbovať, sú triedy a mechanizmy v tomto frameworku. Nejaká časť je totožná s JVM, ale dosť veľa vecí je rozdielnych. O tom, že Google takto použil Java, sa dodnes sporí s Oraclom, ktorý ho za to žaloval (technické podrobnosti sú trochu komplikovanejšie), pričom posledné správy ukazujú, že Google by mohol vyhrať.
Na to, aby ste mohli vyvíjať, potrebujete nejaké prostredie. V prvom rade nič neurobíte bez Android SDK, ktorý sa samozrejme dá zadarmo stiahnuť. To je balík rôznych programov, pomocou ktorých by ste si mali plne vystačiť pre všetky úlohy, ktoré vás pri takomto vývoji čakajú. Problém je s tým, že je to kopa rôznych nástrojov bežiacich na príkazovom riadku, a teda jeho priame použitie by nebolo jednoduché. A tu prichádza na scénu vývojové prostredie Eclipse. Priamo pre ňho Google naprogramoval plugin, ktorý sa doinštaluje, nastaví sa mu cesta k SDK a potom to celé veselo funguje z Eclipsu. Takže viete debugovať, nasadzovať aplikáciu alebo riadiť virtuálne zariadenia. V SDK je totiž správca virtuálnych zariadení, pomocou ktorého si ich viete nastaviť aj niekoľko naraz. Pomocou nich potom viete aplikáciu vyvíjať, a dokonca dokážu simulovať GPS polohu, gyroskop, kameru, prijatie SMS atď. Malá rada: po spustení virtuálneho zariadenia ho nevypínajte. Ak chcete po oprave chyby nasadiť novú verziu zdrojových kódov, viete použiť bežiace virtuálne zariadenie, do ktorého ho Eclipse s Android SDK dostanú.
Okrem Javy potrebujete na úspešný vývoj aplikácií poznať aj princípy Android prostredia. Existuje niekoľko základných pojmov, s ktorými sa môžete stretnúť:
1. Action – jedna obrazovka vašej aplikácie. Teda niečo, čo sa zobrazí a je schopné spracovať vstup od používateľa.
2. Broadcast Reciever – dokáže prijať informáciu o rôznych udalostiach, ktoré sa dejú. Ak napríklad príde SMS, tak pomocou vytvorenia triedy takéhoto typu vo vašej aplikácii sa o tejto udalosti dozviete a viete s tým niečo spraviť.
3. Content Provider – typ triedy, ktorý budete potrebovať, ak vaša aplikácia chce poskytovať údaje iným aplikáciám. K jednotlivým údajom sa pristupuje pomocou systému URI adries – veľmi podobné REST sieťovým službám.
4. Service – podobne ako v klasickom OS je to typ aplikácie, ktorá beží na pozadí. V Androide sa však prísnejšie vyhodnocuje, či má beh vašej služby opodstatnenie, pretože všetok bežiaci kód spotrebováva energiu ukrytú v batérii.
Zo všetkých takýchto tried je ale najdôležitejšia trieda Intent. Intent je v Androide trieda, ktorá reprezentuje nejaký zámer. Používateľ chce napríklad niekoho vyhľadať v zozname kontaktov, alebo poslať SMS. A tento jeho zámer je poslaný do systému a ten sa pokúša nájsť aplikáciu, ktorá mu najviac vyhovuje. Každá aplikácia má totiž tzv. IntentFilter, ktorý hovorí o tom, aké zámery vie daná aplikácia obslúžiť. Prostredie Androidu je veľmi slaboväzobné, a teda umožňuje vymieňať jednotlivé jeho komponenty, pričom ich prepojenie je realizované práve cez takého slaboväzobné intenty. Môžete si napríklad zmeniť aplikáciu, ktorá vám zobrazuje zoznam kontaktov. A keď niektorá aplikácia pošle Intent ohľadom kontaktov do systému, tak sa použije táto nová aplikácia. Ak máte Android a stalo sa vám niekedy, že vám pri vyvolaní nejakej akcie zobrazil okno, kde si máte vybrať aplikáciu, ktorou chcete požiadavku obslúžiť, je to preto, lebo tieto aplikácie mali pravdepodobne rovnaké IntentFiltre a Android sa už jednoducho nevedel rozhodnúť, ktorá je vhodnejšia. O Intentoch by sa dalo písať veľa, lebo sú základným lepidlom, ktoré drží vnútorný svet Androidu po kope, ale za zmienku stojí, že ak vaša aplikácia obsahuje viacero Aktivít (teda obrazoviek), tak aj tieto Aktivity by mali byť medzi sebou navzájom prepojené poslaním Intentu do systému (aj keď existuje spôsob ako napevno vyvolať jednu obrazovku z druhej). To so sebou nesie jeden zaujímavý fakt, a to že niekedy v budúcnosti vám môže niekto nahradiť jednu vašu obrazovku v programe svojou.
Keď už sme pri tých obrazovkách, tak za zmienku stojí, že Android sa musel vysporiadať s jednou komplikáciou. A tou je to, že zariadenia, na ktorých programy bežia, môžu mať rôznu veľkosť obrazovky. Zabudnite teda na to, že by ste zadefinovali presné súradnice a rozmery ovládacích prvkov. Skôr si len vyberáte, akým spôsobom ich chcete vedľa seba ukladať (pod seba, do dvoch stĺpcov a pod.) a nastavujete niektoré ich parametre (napríklad, že má tlačidlo vyplniť celú šírku obrazovky). Android sa ich potom pokúsi na základe týchto informácií správne zobraziť na ľubovoľnom displeji.
Okrem Javy, ktorá je hlavným programovacím jazykom, môžete písať ešte aplikácie v C a JavaScripte. Na programovanie v C potrebujete tzv. Native Development Kit (NDK), ktorý obsahuje okrem iného aj kompilátor C-čka. Riešenie s JavaScriptom vlastne predstavuje klasickú web stránku (teda okrem JavaScriptu sa pracuje ešte s HTML a CSS) ale s tým, že je možné volať Java knižnice.
Ostáva už len spomenúť, že pre ukladanie údajov je k dispozícii SQLite systém s komplet pripravenou vrstvou tried na prístup k údajom.
Programovanie pre Android sa v mnohom podobá programovaniu aplikácií pre klasické desktop počítate. Navrhujete obrazovky a definujete ich správanie. To, v čom sa to líši, je prepojenie jednotlivých častí pomocou Intentov a tiež to, ako sa obrazovky definujú. Je jasne vidieť, že tvorcovia architektúry chceli do tohto prostredia priniesť veľa slaboväzobných prvkov, a tak nie je divu, že sa tu opakujú princípy, aké sa používajú pri sieťových službách a servisne-orientovaných architektúrach. Android predstavuje taký mikrosvet, v ktorom každá aktivita niečo dokáže a systém jej tak vie poslať požiadavku na spracovanie.