Menu

Vyvíjíme pro Android – úvod

image00

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.

 

Komentáře

kosci

kosci

23.3.2011 8:37

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

Pedro

Pedro

23.3.2011 9:39

Skvele! Jen tak dal :)

petr22

petr22

23.3.2011 11:27

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

bkf1

bkf1

23.3.2011 12:27

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!

Tomas

Tomas

23.3.2011 12:33

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 :)

Stanislav Osmera

Stanislav Osmera

23.3.2011 12:51

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.

shmoula

shmoula

23.3.2011 14:33

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!

Samot

Samot

23.3.2011 18:07

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

Roman

Roman

23.3.2011 18:21

Moc peknej zacatek, tesim se na dalsi dily

Stalg

Stalg

23.3.2011 19:26

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

Libb

Libb

23.3.2011 20:07

Děkuji

mark156651

mark156651

24.3.2011 8:25

ří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í !!

mark516165

mark516165

24.3.2011 8:45

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

mark516165

24.3.2011 8:46

jinak naprosto souhlasím s petr22 a bkf1

mark516165

mark516165

24.3.2011 8:48

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

mark516165

mark516165

24.3.2011 8:49

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!

Mach4

Petr MišákAdministrátor 26

24.3.2011 8:54

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

Radegast

Radegast

24.3.2011 19:07

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

randomofamber

randomofamber

24.3.2011 19:10

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

Michal Feltl

Michal Feltl

25.3.2011 14:48

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

Tomas

Tomáš Kypta 0

25.3.2011 16:57

randomofamber napsal: 24.3.2011 19:10

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

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.

Jame Stitel

Jame Stitel

26.3.2011 16:51

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.

Jsemtady

Jsemtady

19.8.2011 10:50

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.

Tomas

Tomáš Kypta 0

21.8.2011 10:24

Jsemtady napsal: 19.8.2011 10:50

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,…

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.

Miro

Miro

4.2.2012 9:40

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.

Dan

Dan

5.4.2012 18:43

Dobrý základní přehled. Ještě jsem hledal step by step info k tomu, jak napsat první aplikaci (a stáhnout vše potřebné a zprovoznit to spolu) a našel na http://www.businessit.cz/cz/programovani-vyvoj-aplikaci-pro-android-krok-za-krokem.php; docela přehledné, ale bohužel zase bez těch základů struktury systému, které jsou tady. Takže se to dobře doplňuje.

anonim

anonim

14.8.2013 21:04

Dobrý den,
Chtěl si jen tak ze zvědavosti zkusi něco málo naprogramovat, tak sem si počil knížku od kámoše něco jsem udělal.

Poté to začalo hlásit chybu:
[I18N] Hardcoded string “text”, should use @string resource

Děkuji za rady jak to vyřešit.

RSS (komentáře k článku)