Vyvíjíme pro Android – úvod

23. 3. 2011 8:00, autor: Tomáš Kypta
Kategorie Návody, Téma

Ohodnoťte článek!23

Tento článek vyšel nejprve na webu abclinuxu.cz. Jde o první díl ze série článků o vývoji pro platformu Android. Z důvodu zaměření serveru abclinuxu.cz je text psán spíše pro vývojáře používající linux. Rozdíly ve vývoji na jiných platformách jsou ale minimální, převážně se týkají názvů různých nástrojů v SDK. Zmiňované programy nebo příkazy mají na Windows ekvivalenty s koncovkami .exe nebo .bat. V případě jiných odlišností je text doplněn poznámkou.

Úvod

Operační systém Android se na trhu mobilních telefonů objevil teprve nedávno. Od té doby zaznamenal raketový růst a dnes je jedním z nejpoužívanějších operačních systémů pohánějících chytré telefony. Spolu s rozšířením systému roste také poptávka po zajímavých aplikacích. V krátkém seriálu si ukážeme základy programování aplikací pro Android.

V tomto dílu si nejprve krátce povíme něco o samotném systému, představíme si vývojové nástroje a řekneme si něco o principech, na jakých OS Android funguje.

Co je to Android a trocha historie

Android je open source platforma pro mobilní zařízení, která je založená na pozměněném linuxovém jádře. Systém byl původně vyvíjen firmou Android Inc., kterou v roce 2005 koupil Google. V roce 2007 pak byla založena Open Handset Alliance skládající se z několika desítek firem – kromě Googlu jsou to převážně výrobci mobilních telefonů, polovodičových součástek a také mobilní operátoři. OHA zastřešuje vývoj otevřených standardů pro mobilní zařízení a má za úkol kooperovat vývoj operačního systému Android.

Vnitřnosti Androidu

Platforma se kromě linuxového jádra skládá z řady C/C++ knihoven – např. systémová libc, knihovny pro práci s médii, knihovny enginu webového prohlížeče, knihovny grafického enginu, SQLite knihovny a mnoho dalších.

Systém dále obsahuje Dalvik Virtual Machine, který slouží pro vykonávání bytecodu, na kterém jsou postaveny vyšší vrstvy systému. Dalvik Virtual Machine ale není Java Virtual Machine a používaný bytecode není Java bytecode. Přesto, jak mnozí vědí, se pro Android programuje primárně v Javě. Jak to? Android SDK (které rozebírám dále) obsahuje nástroj dx pro převod Javovských .class souborů do Dalvikovských .dex souborů. Při převodu se mimo jiné konvertuje Java bytecode do Dalvik bytecode. Měl bych ještě zdůraznit, že převod není stoprocentní, ne vše z Javy lze použít na Androidu, aplikace se tedy neprogramují v plnohodnotné Javě.
Systémové aplikační rozhraní, které aplikacím zprostředkovává nejrůznější API, je pak už stavěno nad virtual machine. Součástí platformy je také řada už hotových aplikací – např. správce kontaktů, prohlížeč nebo samotná aplikace pro telefonování.

Vývoj a dostupné nástroje

Na oficiální vývojářské stránce na http://developer.android.com je pro vývoj dostupná řada nástrojů, dokumentace a další zdroje. Nejdůležitější je zde SDK, bez kterého nic nevytvoříte. Díky vřelému vztahu Googlu k Linuxu je dostupné pro všechny hlavní platformy – Linux, Mac i Windows. SDK v základu obsahuje pouze některé vývojové nástroje, další části se doinstalovávají jako komponenty. Jednotlivé komponenty a další nástroje obsažené v SDK si rozebereme dále.

Pro vývoj aplikací, jejichž odezva je kriticky důležitá (především pro hry), lze využít Android NDK, což je balík pro vývoj Android aplikací v C/C++. Vývoj aplikací využívajících NDK je pokročilejší téma a nebudeme se jím zde zabývat.

Kromě SDK a NDK si lze stáhnout oficiální ADT plugin pro Eclipse, který značně usnadňuje vývoj a ladění aplikací. Protože je Eclipse díky svému pluginu primárním IDE, ve kterém se pro Android vyvíjí, budu ho dále v průběhu seriálu používat při tvorbě kódu a některé popisy a screenshoty se k němu budou vztahovat.

Pokud ovšem nejste fanouškem tohoto IDE, jsou tu i jiná řešení. Pro NetBeans existuje plugin pro vývoj Android aplikací, více o něm naleznete na http://kenai.com/projects/nbandroid/. V Intellij IDEA je od verze 10 také možné vyvíjet aplikace pro Android, více informací naleznete na http://www.jetbrains.com/idea/features/google_android.html.

Obsah SDK

Holé SDK obsahuje pouze několik programů v adresáři tools. Asi nejdůležitější položkou je program android, kterým se spouští Android SDK and AVD Manager. Přes něj se stahují jednotlivé komponenty SDK – různé verze platformy Android a další rozšíření.

Android SDK mimo jiné obsahuje emulátor Androidích zařízení. Emulátor je samostatná desktopová aplikace umožňující testování aplikací bez mobilního zařízení. Pomocí Android SDK a AVD Manageru lze vytvářet a spouštět Android Virtual Devices – nakonfigurované instance emulátoru. Lze si tak velice přesně vymodelovat vlastnosti konkrétního zařízení. Pokud je to pro ladění potřeba, lze spouštět více instancí emulátoru zároveň, jednotlivá AVD ovšem nelze spustit vícekrát současně. Pro spouštění instancí emulátoru lze také použít příkaz emulator, který má širokou škálu parametrů sloužících k další úpravě konfigurace AVD.

Dalším důležitým programem v SDK je ddms, jenž spouští Dalvik Debug Monitor – nástroj s jehož pomocí lze ladit aplikace. Program umí komunikovat jednak s běžícími instancemi emulátoru, ale také s připojenými telefony. Pro ladění aplikací přímo v telefonu je nutné v nastavení telefonu povolit ladění přes USB (přepínač naleznete v sekci Aplikace -> Vývoj). Dále je ještě nutné nastavit počítač, aby zařízení rozpoznal – konkrétně v Ubuntu je třeba:

  • jako root vytvořit soubor /etc/udev/rules.d/51-android.rules
  • do tohoto souboru přidat řádky ve tvaru:
    SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1", MODE="0666" 

    • místo “18d1” uveďte příslušné id výrobce telefonu – to zjistíte na počítači po připojení zařízení např. pomocí příkazu lsusb (hodnota “18d1” je pro Google Nexus One)
  • přidat souboru práva pro čtení:
    chmod a+r /etc/udev/rules.d/51-android.rules

(Poznámka: Na Windows je třeba nainstalovat ovladač pro dané zařízení. Na stránce http://developer.android.com/sdk/oem-usb.html naleznete seznam odkazů na stránky s drivery několika hlavních výrobců.)

Ještě pro úplnost dodám, že aby bylo možné aplikaci ladit je v ní třeba provést malou úpravu v manifestu, o kterém se zmíním později.

Dalvik Debug Monitor umí mimo jiné zobrazovat logy přicházející z celého systému, simulovat různé akce emulátoru nebo zobrazovat různé ladící informace z virtual machine. Aplikaci lze také využít pro získání screenshotů obrazovky – pro nerootované telefony je to prakticky jediný způsob, jak je vytvořit.

SDK komponenty

Nejdůležitějšími komponentami v SDK jsou platformy Androidu. Ty odpovídají produkčním platformám běžícím na skutečných zařízeních. Momentálně jsou dostupné verze 1.5, 1.6, 2.1, 2.2, 2.3.1, 2.3.3. a nově také verze 3.0. Každá platforma obsahuje systémové knihovny, systémový obraz, skiny emulátoru, ukázky kódu a jiné zdroje specifické pro platformu.

Android SDK Platform-tools je balík obsahující další vývojové nástroje, důležitý je zde především program adb – Android Debug Bridge. S ním lze např. na zařízení nahrávat soubory nebo aplikace. Program aapt slouží k vytváření a modifikaci aplikačních balíků.

Dalšími komponentami jsou balíky Google API, jenž jsou dostupné pro každou verzi platformy a obsahují knihovny Google map, které jinak nejsou základní součástí platformy. Pokud chcete vyvinout aplikaci využívající interně Google Mapy, budete tyto balíky potřebovat.

Market Licensing package obsahuje License Verification Library – knihovnu umožňující ověřování licence aplikace. Knihovna umí kontrolovat, zda byla běžící aplikace zakoupena a nejedná se o černou kopii. V SDK je též k dispozici komponenta GALAXY Tab Addon – emulátor Samsung Galaxy Tabu.

Další zdroje

Kromě oficiální stránky http://developer.android.com lze na internetu najít spoustu dalších zdrojů. Nejnovější inoformace ohledně Androidu naleznete na oficiálním blogu http://android-developers.blogspot.com/. A protože je Android open source, můžete si stáhnout i zdrojové soubory k celému systému na stránkách http://source.android.com/.

Aplikační principy

Android aplikace jsou zkompilované zdrojové soubory, které jsou společně s dalšími resourcy zabalené do ZIP balíku s koncovkou .apk – takzvaného Android package. Ten slouží k distribuci aplikací a jejich instalaci na zařízení.

Jak už bylo zmíněno, Androidí aplikace se programují v “Javě” a běží nad virtual machine, která běží na linuxovém jádře. Každá spuštěná aplikace má svou vlastní virtual machine.

Základní vlastností Androidu je možnost využít části jiných aplikací ve své aplikaci. Důvod k tomuto řešení byl prostý – zamezit opakovanému vytváření stejné funkcionality a usnadnit tak vývojářům práci. K tomuto účelu byly aplikace navrženy jako balíky několika komponent, které lze samostatně instanciovat. Existují čtyři typy komponent: activity, service, broadcast receiver a content provider, přičemž každá z těchto komponent slouží k jinému účelu. Postupně si je nyní projdeme.

Activity

Aktivita je základní vizuální komponenta – každá aktivita specifikuje jednu obrazovku aplikace. Představme si třeba e-mailového klienta, kde jedna aktivita zobrazuje seznam přijatých e-mailů, jiná aktivita zobrazuje obsah jednotlivých e-mailů a třetí slouží k jejich psaní. Samozřejmě by takovou aplikaci šlo také napsat jednou aktivitou s tím, že by se vždy kompletně změnil obsah. Takovou architekturu ale nelze doporučit, je to špatná a mnohem pracnější cesta. V čem je tedy kromě snazšího vývoje výhodná popisovaná struktura několika aktivit? Právě v možnosti jednotlivé kompenenty samostatně volat i z jiných aplikací. Například narazíme-li v prohlížeči na link odkazující nás na e-mailovou adresu, lze po kliku přejít do naší aktivity určené pro psaní e-mailů. K tomuto účelu stačí jen aktivitě předat požadovanou e-mailovou adresu.

Protože je aktivita vizuální komponentou, má okno, do kterého je možné kreslit. Okno aktivity typicky zaplňuje celou obrazovku, ale může být také menší – být jen plovoucím dialogem.
Obsah okna je specifikován pomocí views. View je vizuální prvek, na obrazovce mu odpovídá obdélníkový prostor. View se řadí do hierarchické struktury – rodičovské prvky, nazývané layouty, organizují rozložení vnitřních prvků. Typ layoutu určuje, jakým způsobem budou jeho podřízené view rozloženy v dostupném prostoru. Příklad základních view je třeba tlačítko nebo obrázek.

Service

Jiným typem komponenty je service (služba), která není uživatelsky viditelná a běží na pozadí. Příkladem je třeba komponenta určená k síťové komunikaci. V příkladu e-mailového klienta bychom mohli použít službu pro stahování a odesílání e-mailů na pozadí.

Broadcast receiver

Tato komponenta slouží k “poslouchání” broadcastových oznámení a k reakci na ně. Broadcast receivery nejsou, stejně jako služby, uživatelsky viditelné. Jako reakci na příchozí oznámení mohou například spustit jiné komponenty. Broadcasty mohou být jak systémové tak uživatelské – aplikace si mohou vytvářet své vlastní broadcasty.

Jednoduchým příkladem může být receiver reagující na systémový broadcast oznamující nízký stav baterie. Reakcí naší aplikace může být například uložení aktualního stavu a ukončení aplikace. Dalšími příklady mohou být receivery reagující na odpojení nebo připojení sd karty. Jiným příkladem může být receiver reagující na příchozí textovou zprávu tím, že spustí další aktivitu, která danou zprávu zobrazí.

Content provider

Poslední komponentou je content provider, který slouží ke zpřístupnění dat jiným aplikacím. Ty k datům přistupují pomocí instancí třídy ContentResolver. Data lze zpřístupnit ke čtení i k zápisu. Rozlišení toho, kdo může jen číst a kdo může i zapisovat, se provádí podle práv, jež aplikace mají a jež jsou vyžadována. Pomocí content resolveru lze přistupovat například k záznamům v adresáři telefonu, fotkám v galerii telefonu nebo záznamům o příchozích a odchozích hovorech.

Android manifest

Toto byly čtyři druhy stavebních kamenů aplikací určených pro operační systém Android. Aby mohlo vše fungovat jak má, je třeba nějak operačnímu systému sdělit, jaké komponenty jsou k dispozici. K tomu slouží Android manifest. Je to xml dokument, který specifikuje parametry aplikace – jednotlivé komponenty, požadovaná systémová práva a jiné požadavky na běh.

Volání komponent a běh aplikace

Jak už bylo zmíněno, jednotlivé komponenty aplikace mohou spouštět jiné komponenty, dokonce mohou spouštět i komponenty cizích aplikací. Všechny komponenty, mimo content providerů, se aktivují pomocí asynchronních zpráv tzv. intentů. Používání intentů je jednoduché, v příští části seriálu si ukážeme konkrétní příklady.

Task

Nyní bych měl zmínit ještě jeden důležitý a možná trochu matoucí pojem, a to je task. Task je zásobník instancí aktivit, které byly postupně spuštěny. V momentě, kdy jedna aktivita spustí nějakou jinou aktivitu (může to být i aktivita z jiné aplikace), je tato nová aktivita instanciována a vložena na zásobník. Uživatel komunikuje s instancí na vrcholu zásobníku aktivního tasku.

Například pokud chceme ze své aplikace odeslat e-mail, můžeme pomocí intentu spustit aktivitu e-mailového klienta. Tato aktivita se tedy instanciuje a vloží na vrchol zásobníku. Ačkoli přecházíme mezi aktivitami různých aplikací, z uživatelského hlediska se zdá, že jsme stále v jedné aplikaci. Uživatel nyní může odeslat e-mail, po odeslání lze očekávat ukončení aktivity. Na vrchol zásobníku se tak dostává zpět aktivita, která předtím aktivitu e-mailového klienta spustila.

Pro pohyb na zásobníku také slouží tlačítko zpět. Pomocí něj je možné smazat vrchol zásobníku a přejít na předchozí aktivitu.

Tasků může být v systému samozřejmě více – nový task vzniká např. spuštěním aplikace z menu operačního systému. Task lze opustit, a pokud nebyly instance v něm ukončeny, tak se do něj lze také vrátit. Z uživatelského hlediska je tedy task aplikací.

Závěr

V tomto díle jsme si řekli něco o tom, co je to Android, popsali si vývojové nástroje a zmínili základní principy a stavbu Androidích aplikací. Příště si ukážeme konkrétní ukázky kódu na jednodušší aplikaci.

Štítky: , , ,

Zobrazit QR kód

Komentářů: 27 »

  • Pěkný článek , už se těším na pokračování

    kosci | 23.3.2011 @ 08:37 | 195.113.227.xxx

    • Skvele! Jen tak dal :)

      Pedro | 23.3.2011 @ 09:39 | 85.93.98.xxx

      • Výborný počin. Jen aby neskončil u druhého dílů.

        petr22 | 23.3.2011 @ 11:27 | 82.145.210.xxx

        • Tohle hodnotim ;o) Jenom stejne jako „Petr22″ doufam, ze tento serial bude mit dlouhe pokracovani ;o) Opravdu by to chtelo nejake smysluplne clanky o zakladech programovani pro Android, protoze se mi zda, ze ac je Android velmi oblibeny, tak vyvojarska stranka neni moc probirana :( A zvlaste pro novacky to ma smysl!

          bkf1 | 23.3.2011 @ 12:27 | 85.70.118.xxx

          • jeste jsem ten clanek necetl, ale myslim, ze by bylo dobre treba co dil to ukazat jak udelat jednoduchou aplikaci, widget, livewallpaper, opengl hru,… spouste lidem by to mohlo pomoct a treba by se tu zacali objevovat novy programatori :)

            Tomas | 23.3.2011 @ 12:33 | 195.113.118.xxx

            • jojo chvalim, uz se dlouhou dobu chystam ze si neco zkusim naprogramovat. V Jave celkem umim, ale nemohl jsem se dostat k tomu abych se podival jak je to v androidu „udelane“, takze snad tenhle serial me konecne nakopne.

              Stanislav Osmera | 23.3.2011 @ 12:51 | 83.217.124.xxx

              • Se nejak s vyvijenim pro android roztrh pytel v posledni dobe. Jinak vyvijet pod linuxem je asi nejrozumejsi, co se da udelat. Pod windows je to o nervy a zdravi!

                shmoula | 23.3.2011 @ 14:33 | 195.113.192.xxx

                • Tenhle článek mě donutil poprvé na tenhle web napsat :) Super počin a taky doufám, že to bude pokračovat !! Sice něco málo(čti hodně málo) naprogramováno mám, ale ta teorie co je v tomhle díle mi pomohla pochopit více než samotné programování. Skvěle

                  Samot | 23.3.2011 @ 18:07 | 78.108.152.xxx

                  • Moc peknej zacatek, tesim se na dalsi dily

                    Roman | 23.3.2011 @ 18:21 | 85.93.112.xxx

                    • super článek a těšim se na pokračování

                      Stalg | 23.3.2011 @ 19:26 | 89.24.133.xxx

                      • Děkuji

                        Libb | 23.3.2011 @ 20:07 | 90.180.56.xxx

                        • říkám pouze HURááááá konečně !!!! čekám na seriál o programování pro android jak na smilování !!! Těším se na pokračování !!

                          mark156651 | 24.3.2011 @ 08:25 | 195.113.183.xxx

                          • Boží, pokračujte prosím, doufám že tento seriál o vývoji aplikací bude mít minimálně stovku dílů! Pokud tohle zvládnete postupujete ve světe androida do vyšší ligy :-)

                            mark516165 | 24.3.2011 @ 08:45 | 199.48.147.xxx

                            • jinak naprosto souhlasím s petr22 a bkf1

                              mark516165 | 24.3.2011 @ 08:46 | 199.48.147.xxx

                              • sám totiž experimentuju především s vývojem pomocí multiplatformního prostředí APPCELERATOR TITANIUM

                                mark516165 | 24.3.2011 @ 08:48 | 192.251.226.xxx

                                • ale není to ono, raději bych tvořil nativní aplikace :-) A od vašeho seriálu si slibuju, že s tím konečně začnu!

                                  mark516165 | 24.3.2011 @ 08:49 | 192.251.226.xxx

                                  • mark516165:
                                    Jsme moc rádi, že se Vám první díl seriálu ohledně programování pro Android líbí. Daly by se příští komentáře smrsknout do jednoho?
                                    Děkuji

                                    Petr Mišák | 24.3.2011 @ 08:54 | 213.194.220.xxx

                                    • Tento seriál by si zasloužil samostatnou rubriku vedle rubrik
                                      Titulní strana Aplikace Články Návody Recenze Zprávičky Fórum O nás

                                      Radegast | 24.3.2011 @ 19:07 | 90.176.24.xxx

                                      • Nevíte, umí Emulátor emulovat i Dual Sim mobily?

                                        randomofamber | 24.3.2011 @ 19:10 | 213.220.200.xxx

                                        • Užitečný článek s přehledem. Díky. Pomalu se blížíte http://mobile.tutsplus.com/. Dobrá práce.

                                          Michal Feltl | 25.3.2011 @ 14:48 | 62.209.192.xxx

                                          • to randomofamber:
                                            Oficiální Android platforma nemá podporu Dual SIM a není tedy možné taková zařízení emulovat. Protože je ale Android platforma open-source, je možné si platformu ohnout podle potřeby. Toho také spousta výrobců různě využívá a někteří vytvořili Dual SIM telefony. Emulátor jako součást své platformy lze také upravit.

                                            Tomáš Kypta | 25.3.2011 @ 16:57 | 89.24.187.xxx

                                            • Moc, pěkné. Uvítal bych ale srozumitelnější postup vysvětlování, aby to mohli pochopit i začínající „vývojáři“. Dobré by bylo také později vysvětlit i jak lze aplikace nahrávat na androidmarket.

                                              Jame Stitel | 26.3.2011 @ 16:51 | 85.71.163.xxx

                                              • [...] si s programováním moc netykáte (a nechcete to ani změnit např. pomocí tohoto vývojářského seriálu od Tomáš Kypty), a přesto vás láká něco si pro Android vyvinout, máte několik možností. Google před [...]

                                                Pingback Snadná tvorba aplikací pro Android Market s „HAC“ « Svět Androida Novinky ze světa mobilního operačního systému Android | 18.6.2011 @ 10:01 | 81.31.45.xxx

                                                • Chci se zeptat, na škole jsem programoval v Delphi, kdysi dávno ještě pascal a basic. Dá se s takovou nějakou představou kde co hledat atp. fungovat při programování pro Android, nebo je víceméně nutné dobře znát javu a xml? Vzhledem k tomu, že se javě a xml nechci věnovat mimo Android platformu, tak nevím, jestli má smysl se to učit zvlášť, nebo jestli stačí to, co jde pochopit při tutoriálech apod.? Díky.

                                                  Jsemtady | 19.8.2011 @ 10:50 | 93.153.75.xxx

                                                  • Pokud se chcete programování Androidích aplikací věnovat seriózněji, určitě bude dobré se Javu trochu naučit. Z technologie xml v Androidu potřebujete většinou naprosté minimum.

                                                    Tomáš Kypta | 21.8.2011 @ 10:24 | 78.102.78.xxx

                                                    • Android systém s geniální myšlenku googla a stabilitou linuxu…
                                                      Aplikace super. Mam Androida krátce a už jsem potřeboval rychle řešit Linux i Win server na cestách a neměl s sebou notebooka.
                                                      Všechny aplikace co k tomu potřebuju v notebooku jsem pro svou SExperia hbitě a jednoduše k maximální spokojenosti stahl netu.

                                                      Miro | 4.2.2012 @ 09:40 | 89.24.48.xxx

                                                    • RSS komentářů k tomuto příspěvku. TrackBack URL

                                                      Napsat komentář

                                                      Pokud se váš komentář nezobrazí ihned po jeho odeslání, kontaktujte nás prosím na info@svetandroida.cz (může za to filtr proti spamu).