Vyvíjíme pro Android: Začínáme

Android logo

Počínaje tímto článkem bude na Zdrojáku v následujících týdnech vycházet seriál, v němž se naučíme programovat aplikace pro Android. Dnes si nainstalujeme a rozchodíme vývojové prostředí a vytvoříme Hello World aplikaci.

Seriál: Vyvíjíme pro Android (14 dílů)

  1. Vyvíjíme pro Android: Začínáme 15.6.2012
  2. Vyvíjíme pro Android: První krůčky 22.6.2012
  3. Vyvíjíme pro Android: Suroviny, Intenty a jednotky 29.6.2012
  4. Vyvíjíme pro Android: Bližší pohled na pohledy – 1. díl 13.7.2012
  5. Vyvíjíme pro Android: Bližší pohled na pohledy – 2. díl 13.7.2012
  6. Vyvíjíme pro Android: Fragmenty a SQLite databáze 20.7.2012
  7. Vyvíjíme pro Android: Preference, menu a vlastní Adapter 27.7.2012
  8. Vyvíjíme pro Android: Intenty, intent filtry a permissions 3.8.2012
  9. Vyvíjíme pro Android: Content providery 10.8.2012
  10. Vyvíjíme pro Android: Dialogy a activity 17.8.2012
  11. Vyvíjíme pro Android: Stylování a design 24.8.2012
  12. Vyvíjíme pro Android: Notifikace, broadcast receivery a Internet 31.8.2012
  13. Vyvíjíme pro Android: Nahraváme aplikaci na Google Play Store 7.9.2012
  14. Vyvíjíme pro Android: Epilog 14.9.2012

Android je v současnosti nejrozšířenější a zároveň asi nejrychleji rostoucí mobilní operační systém. Dobrých androidích programátorů je však málo, přestože jsou velmi žádaní. V seriálu Vyvíjíme pro Android se pokusím trochu nakopnout všechny, kteří tápají, a otevřít dveře poznání těm, jejichž angličtina není tak dobrá, aby se mohli učit od nuly z anglických zdrojů. Těch českých je totiž zoufale pomálu.

Ve chvíli, kdy tento seriál píšu, je nejnovější verze API Androidu API 15 (Android 4.0.3) a pokusím se ho dokončit předtím, než se objeví nějaká nová zásadní verze, která všechno změní. Faktem ale je, že se Android (stejně jako ostatní mobilní operační systémy) vyvíjí neuvěřitelně rychle a to, co je dnes best practice, může být za rok už obsolete. S ohledem na dopřednou kompatibilitu sice všechno bude fungovat, ale nemusí to odpovídat trendům.

Pokusím se, aby i člověk angličtinou téměř nepostihnutý po přečtení tohoto seriálu byl schopen naprogramovat si nějakou jednoduchou utilitku sám pro sebe, ale chcete-li být dobří, angličtina a studium dokumentace, zkoumání API reference a čtení oficiálního blogu je nevyhnutelné.

Budu se snažit vše vysvětlovat co nejjednodušeji a přiměřeně polopaticky, nicméně od čtenářů očekávám znalost syntaxe Javy (objektové programování, genericita atd.) a základní znalost API Javy (kolekce, …).

Naučíme se používat Eclipse s nainstalovaným ADT pluginem, což je pro Android standard. Ukážeme si, jak ADK a ADT plugin nainstalovat, jak rozchodit emulátory a vše důležité, což bude ostatně obsahem dnešního článku. Potom si pořádně si vysvětlíme, jakou má androidí aplikace architekturu, naučíme se používat activity, fragmenty, seznámíme se se všemi důležitými view, pochopíme, jak fungují adaptery a jak content providery, vytvoříme si widget, naučíme se s resources, ukážeme si, jak lokalizovat aplikaci do více jazyků, naučíme se připravovat a nahrávat aplikace na Play Store a mnoho dalšího.

U postupů, které se liší v závislosti na operačním systému se pokusím vše vysvětlit jak pro Windows, tak pro Linux. S OS X žádné zkušenosti nemám, a tak jen odkážu, abych neblábolil. Eclipse používám v angličtině, neboť ne všechno je přeložené a já nemám rád nekonzistence. A kromě toho se pak člověku mnohem lépe pracuje s anglickými návody, Stack Overflow atp.

Jdeme instalovat

Konec řečí, jdeme na to. Uvařte si kafe nebo čaj, protože to bude trvat dlouho.

JDK

Vzhledem k tomu, že Javu umíte, asi máte JDK nainstalované (JRE nestačí). Pokud ne, nejprve si ho stáhněte a nainstalujte. Údajně by mělo být potřeba oraclovské JDK, s OpenJDK prý ADK není kompatibilní. Na Windows bude potřeba správně nastavit proměnnou JAVA_HOME, jinak nebude instalačka ADK spokojená.

Eclipse

Instalaci Eclipse se moc věnovat nebudu. Pro Android se doporučuje Eclipse Classic, případně Eclipse Java nebo Eclipse RCP. Dá se stáhnout na eclipse.org a návodů, jak ho nainstalovat, je na internetu nespočet.

ADK (Android SDK)

Splňuje-li váš stroj systémové požadavky (což s velkou pravděpodobností splňuje), můžeme se konečně vrhnout na ADK. To si stáhneme odsud a budeme postupovat podle instalačních instrukcí (které se zde pokusím nějak zestručnit a přeložit). Na Windows doporučuji .exe soubor, ten spusťte a dělejte, co vám řekne. Zapamatujte si, kam se ADK nainstalovalo, za chvíli to bude potřeba. Po skončení vám vyskočí okno Android SDK Manager, buď to jednoduše odklepněte (a čekejte), anebo přejděte na Nastavení ADK a přečtěte si, co zaškrtnout. Pokud jen odklepnete, budete stejně zaškrtávat za chvíli. Na Linuxu si stáhnete .tar.gz soubor, který někam rozbalte. Já osobně používám /home/user/android-sdk-linux. To umístění si zapamatujte. Na OS X to asi bude podobné Linuxu.

ADT Plugin

Máme JDK, máme Eclipse, máme ADK. Teď je na řadě ADT Plugin pro Eclipse. Opět se budeme řídit radami od nejpovolanějších. Spusťte Eclipse a odklikejte všechna vítací okna (pokud vyskočí). Potom klikněte na Help → Install New Software... Vyskočí takové ošklivé okno. Vpravo nahoře klepněte na tlačítko Add, do kolonky Name vepište ADT Plugin (anebo cokoli jiného chcete) a do kolonky Location vložte následující url: https://dl-ssl.google.com/android/eclipse/. Pak klikněte na OK. Pokud to zahlásí chybu, zkuste místo https použít protokol http. Pokud to chybu nezahlásí, zaškrtněte Developer Tools a klikněte na Next a pak ještě jednou na Next. Pozorně si přečtěte licenční ujednání a potvrďte, že s nimi souhlasíte. Potom klikněte na Finish. Pokud vyskočí okénko s nějakým bezpečnostním varováním, udělejte to co vždy – klepněte na OK. Až se instalace dokončí, restartujte Eclipse.

Při prvním spuštění Eclipse vyskočí konfigurační okno ADT (alespoň na Windows se mi to stalo). Nejprve se rozhodněte, jestli chcete posílat anonymní data o využívání, a potom vložte umístění ADK (tzn. ta složka, co si máte pamatovat z předpředchozího odstavce, například /home/user/android-sdk-linux. Pokud to nevyskočí, jděte na Window → Preferences, vlevo vyberte Android a udělejte to samé.

Pokud se nikde neobjevila žádná chyba, gratuluji. Jste v půlce.

Nastavení ADK

Windowsovští uživatelé si už asi stihli všimnout – ADK funguje na principu balíčků. To, co jsme už stáhli, tedy vůbec nestačí a musíme dostahovat další balíčky. Předem informuji, že to dost možná bude stahování na několik hodin, neboť rychlost občas dosáhne dokonce i 57 kibibajtů za sekundu.

Opravdu to frčí…

Přepneme se tedy do Eclipse, klikneme na Window → Android SDK Manager a vyskočí na nás okno plné různých přepínáků. Nás bude zajímat seznam balíčků. Určitě je nutné nainstalovat všechno ve složce Tools. Dále je potřeba mít alespoň jednu SDK Platform, pravděpodobně tu nejnovější. Všechno ostatní je dobrovolné.

Na Windows Vista a 7 je potřeba mít ADK Manager spuštěný jako správce. Spustil-li se vám po instalaci ADK, jste za vodou. Jinak by snad mělo stačit spustit jako správce Eclipse. Pokud ne, ADK Manager se nachází v  <cesta-k-android-sdk>/SDK Manager.exe.

Já to doporučuji udělat takto: Nainstalujte si nejnovější „složku“ Android celou (v současné době je to Android 4.0.3 (API 15). Hodně důležitý je balíček ARM EABI v7a System Image, neboť bez něj nerozchodíte emulátor (to se týká všech Androidů od 4.0.0 dál). A potom si nainstalujte důležité, rozšířené verze Androidu. V mém případě je to 2.3.3, 2.2, 2.1 a 1.6. Trojkové verze Androidu nainstalované nemám, ale jsou-li pro vás důležité, je možné stáhnout i ty.

Pozor! U starších verzí NESTAHUJTE celou tu složku. Je tam plno speciálních balíčků jednotlivých výrobců, které skoro určitě nikdy nepoužijete. A hlavně ony jsou to, co strašně zpomaluje stahování. Potřeba je vždy SDK Platform, já doporučuji ještě Samples for SDK a Google APIs (pokud chcete používat Google Maps apod.).

A potom je tam ještě složka Extras. Určitě stáhněte Android Support, což je knihovna, která zpětně implementuje některé stěžejní funkcionality novějších Androidů na starší, a budeme ji v příštích dílech potřebovat. (Ty, které jsou pro nás důležité, přináší Support Library až na Android 1.6, což je hlavní důvod, proč si myslím, že 1.5 už nemá smysl řešit.)

Máte-li Windows, určitě zaškrtněte ještě Google USB Driver (pokud máte Google telefon) a Intel Hardware Accelerated Execution Manager, který je potřeba pro hardwarovou akceleraci virtuálních zařízení.

Když máte vybrané všechny potřebné a chtěné balíčky, klikněte na Install packages (druhé tlačítko odspoda vpravo) a čekejte.

Prozkoumáváme ADK

V ADK složce je plno podsložek, většina má jména vypovídající o všem. Pravděpodobně vás budou zajímat hlavně tři z nich, a to docs/, v níž je soubor offline.html, díky němuž si můžete dokumentaci prohlédnout a dokonce i prohledat offline, samples/, ve které jsou zdrojové kódy ukázek a platform-tools/ v níž je důležitá utilitka adb (Android Debug Bridge), kterou budeme za chvíli potřebovat a již asi budete používat často.

To ještě není všechno

Ale nebojte, už jsme skoro u konce.

Používání skutečných zařízení

Abyste mohli aplikace spouštět a debugovat na skutečných zařízeních, musíte pro to něco udělat. A to něco se liší na Windows a na Linuxu. A na OS X to prý prostě funguje.

Windows

Na Windows musíte nainstalovat USB driver pro váš konkrétní telefon. Máte-li Nexus One, Nexus S nebo jiný telefon z tohoto seznamu, potřebujete USB Driver, který jste stáhli jako balíček v ADK Manageru. Jinak si musíte stáhnout driver pro váš konkrétní telefon ze stránek výrobce, jejichž seznam je na konci této stránky dokumentace. Na ní se také píše, jak dále postupovat pro jednotlivé verze Windows. V případě Sedmiček je to: Počítač → Spravovat → Správce zařízení → Ostatní → Nexus (v mém případě) → Pravé tlačítko → Aktualizovat ovladače software → Vyhledat ovladač v počítači, kam vložíte cestu k ovladači nebo ke složce ho obsahující (používáte-li Google USB Driver, vložte <sdk>extrasgoogleusb_driver). U starších Windows to bude obdobné, viz dokumentaci.

Linux

Na Linuxu je to mnohem jednodušší. Pod rootem vytvořte soubor /etc/udev/rules.d/51-android.rules, do něj vložte řádek SUBSYSTEM=="usb", ATTR{idVendor}=="VENDOR_ID", MODE="0666", GROUP="plugdev", kde VENDOR_ID nahradíte za id výrobce vašeho telefonu, a potom spusťte (zase jako root) chmod a+r /etc/udev/rules.d/51-android.rules. Zde napsané udev pravidlo funguje pro Ubuntu, pod jinými systémy se možná může lišit.

Nastavení samotného zařízení

Debugování musíte povolit i přímo na vašem telefonu nebo tabletu. Na Androidu 2.x běžte do Nastavení → Aplikace a zaškrtněte Ladění USB. Na Androidu 4.x se tato volba nachází v  Nastavení → Možnosti pro vývojáře.

Funguje to?

To zjistíme jednoduše. Nejprve připojte telefon. Pod Linuxem i na Windows spusťte příkaz ~/android-sdk-linux/platform-tools/adb devices, kde cestu k adb samozřejmě nahraďte za tu, která platí u vás (případně si složku platform-tools přidejte do PATH). Pokud se zobrazí řádek typu 31355895871F00EC device, máte vyhráno. Pokud místo čísel a písmen máte otazníky (na Windowsech se mi to nestalo), zkuste adb vypnout ( adb kill-server) a spustit jako root ( sudo adb start-server) a znovu zkusit vypsat připojená zařízení. Jak přesně to udělat pod OS X nevím, ale předpokládám, že to bude totožné s Linuxem.

Používání virtuálních zařízení

To je mnohem jednodušší. V Eclipse spusťte Window → AVD Manager a vpravo vyberte New... Do Name napište, jak chcete, aby se vaše virtuální zařízení jmenovalo. V Target  vyberte, jaký Android chcete, aby na tom AVD běžel, do Size zadejte velikost paměti AVD. U položky Skin vyberte, jaké rozlišení by to konkrétní AVD mělo mít, a u Hardware  nastavíte, jaký hardware by měl být emulován. Pak stiskněte  Create AVD.

Tím se vrátíte do seznamu AVD zařízení. Vyberte to vytvořené a klikněte na Start... Vyskočí vám okénko, které stojí za pozornost. Zajímavá je totiž možnost Scale display to real size, která umožní nastavit velikost displeje telefonu a jemnost displeje notebooku. Díky tomu si můžete na displeji notebooku, který má 768px na výšku a část z nich ještě zabírají různé lišty, zobrazit telefon s 800 pixely na výšku. Rozhodně tuto možnost doporučuji více než nastavení nízkého rozlišení, neboť to ústí v ošklivé a nepoužitelné rozhraní. Pokud to ve Windows nefunguje, viz Nejde mi spustit virtuální telefon.

Všechno funguje!

Paráda, gratuluju :). To zdaleka nejtěžší z celého programování na Androidu máte za sebou. Když to tak dobře dopadlo, co si tedy něco ještě naprogramovat?

Nový projekt

Vyberte File → New → Project..., rozklikněte Android, vyberte Android Project a stiskněte Next. Do Project Name napište jméno projektu a klikněte na Next. V další obrazovce vyberte API, proti němuž se bude aplikace kompilovat. Dle mého názoru nemá smysl vybírat nic jiného než nejvyšší API, v tuto chvíli tedy Android 4.0.3, tzn. API 15. Vyberete-li Google APIs, kromě androidích knihoven se do projektu přidají i googlí knihovny, například pro Google Maps. Target API se dá kdykoli změnit (pravé tlačítko myši na projekt → Properties → Android, vybrat jiné a potvrdit). Klikněte zase na Next. Do Application Name napište jméno aplikace tak, jak se bude zobrazovat v Androidu. Package Name by mělo obsahovat název balíčku vaší aplikace ( com.example.myApp). Create Activity nechte zaškrtnuté a název neměňte. Co to znamená se dozvíte později. Minimum SDK NEMĚŇTE, Eclipse potom blbne. Pak klikněte na Finish a aplikace je vytvořená.

Najednou se objevila docela komplikovaná adresářová struktura, ale důležité jsou adresáře src/, která obsahuje Java zdrojové kódy, res/, který obsahuje XML soubory s různými daty a další zdroje (o tom si povíme v dalších dílech), a soubor AndroidManifest.xml. Na ten dvakrát klikněte a vidíte plno formulářů a k tomu dole ještě několik tabů. Nebojte, všechno si v dalších dílech vysvětlíme. Teď je důležité kliknout na Uses SDK dole, v objeveném formuláři do Target SDK version napsat 15 (což je v tuto chvíli nejnovější API) a do Min SDK version napsat minimální verzi SDK. Pro dnešní aplikaci klidně napište 4, což je Android 1.6., a soubor uložte ( Ctrl + S). (To, co jsme teď dělali, by teoreticky bylo zbytečné, mělo by se to dát nastavit během vytváření projektu, ale když já do Minimum SDK napíšu něco jiného, stane se to i Target SDK  a aplikace se pak kompiluje proti staršímu Androidu.) Všechny ty formuláře jsou jenom GUI pro XML soubor, jehož kód si můžete zobrazit v tabu AndroidManifest.xml (nejvíc vpravo). Já osobně kromě nastavení správného target a minimum SDK s GUI nepracuji a píšu všechno do XML.

A ještě zkusíme něco připrogramovat do Activity. V levém panelu si rozbalte složku src, potom ten balíček, jehož jméno jste zvolili při vytváření projektu, a pak dvakrát klikněte na NazevAplikaceActivity.java. Otevře se vám zdrojový kód s asi 13 řádky něčeho trochu známého a trochu neznámého. Projdeme si to později. Dnes jen do importů přidáme řádek import android.widget.Toast; a pod setContentView(R.layout.main); vložíme následující řádek:

Toast.makeText(this, "Ahoj, moje nová super androidí aplikace!", Toast.LENGTH_LONG).show();

Soubor uložíme a stiskneme velkou zelenou šipku v horním panelu a vybereme Android Application. Pokud máte správně připojený telefon, nahraje se aplikace na něj. Pokud ne (anebo pokud vám běží ještě nějaké AVD), zobrazí se okno, kde vyberete, na kterém zařízení se má aplikace spustit. Někdy se Eclipse samo rozhodne, které AVD spustí (pokud máte právě jedno, jehož verze API je totožná s target SDK version).

AKTUALIZACE: Popis založení projektu pro novější verzi ADT pluginu najdete v osmém díle seriálu.

Časté problémy

Moje AVD se nevejde na obrazovku.

Při spouštění AVD vyberte Scale display to real size a parametry zvolte tak, aby vypočítané měřítko dostatečně zmenšilo velikost AVD.

Jako Target SDK jsem vybral/a API 15, ale v projektu mám  Android 1.6

Nastavil/a jste totiž Minimum SDK během vytváření projektu. To bohužel nefunguje (viz Nový projekt).

Nejde mi spustit virtuální telefon

A hlásí vám to chybu typu PANIC: Could not open AVD config file: C:UsersВладелец.androidavdXOR.avd/config.ini? Podívejte se na Issue 19084 – nejste jediný/á. Mně to také nefungovalo (uživatelské jméno Matěj) a řekl bych, že je to kvůli diakritice. Pomohlo vytvořit prázdnou složku C:/android a nastavit na tuto cestu systémovou proměnnou ANDROID_SDK_HOME, restartovat počítač a znovu vytvořit AVD.

Závěr

Dnes jsme si nainstalovali prostředí pro vývoj aplikací na Android a vyrobili jsme první aplikaci, přestože ještě pořádně nevíme, co to všechno znamená a jak to funguje. Příště si to všechno vysvětlíme, ukážeme si, jak z jedné Activity spouštět jiné a jak používat některá View. Pokud si s něčím nevíte rady, nebojte se zeptat v komentářích. Pokud budu vědět, odpovím, pokud ne, třeba bude vědět někdo jiný.

Budu rád za každý názor na tento článek, rád si přečtu, co od seriálu očekáváte, co byste tam zařadili, co naopak ne apod. Zpětné vazby si vážím.

A s dovolením využiji závěr ještě k položení dvou neprogramátorských otázek do pléna. Za prvé řeším, zda přídavné jméno androidí psát s velkým nebo malým a. Jak jste si všimli, preferuji malé a, ale je to ze subjektivních důvodů. Více jsem se o tom rozepsal na blogu. Druhá věc, u níž bych přivítal vaši radu, je zda a popřípadě jak překládat resources. Překlad zdroje se mi vůbec nelíbí. Psát resources je zase takové moc anglické. Stylisticky jsou mi nejsympatičtější suroviny, ale zase si nejsem jist, nakolik by to nezpůsobilo nepochopení.

Tip na konec

Klávesovou zkratkou Ctrl + Shift + O je možné v Eclipse automaticky provést všechny chybějící importy. Je-li více možností, Eclipse se vás zeptá.

Matěj začal programovat ve třinácti v PHP, pak v JavaScriptu a Lispu. Nakonec si koupil Androida, a tak programuje hlavně pro něj.

Komentáře: 65

Přehled komentářů

phoose Eclipse
ruups Re: Eclipse
phoose Re: Eclipse
Pavel Re: Eclipse
Palo Re: Eclipse
pepa Re: Vyvíjíme pro Android: Začínáme
Laethnes Re: Vyvíjíme pro Android: Začínáme
razor Re: Vyvíjíme pro Android: Začínáme
Laethnes Re: Vyvíjíme pro Android: Začínáme
BlackRider Re: Vyvíjíme pro Android: Začínáme
Matěj Konečný Re: Vyvíjíme pro Android: Začínáme
povinná Re: Vyvíjíme pro Android: Začínáme
Fantomas Eclipse
msx Windows
phoose Re: Windows
msx Re: Windows
razor unknow sources
Matěj Konečný Re: unknow sources
integral Rychlost emulatoru
dano Re: Rychlost emulatoru
jiri.vrany Re: Rychlost emulatoru
Honza Re: Rychlost emulatoru
ruups Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
Matěj Konečný Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
ruups Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
Ruups Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
ruups Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
ruups Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
ruups Re: Rychlost emulatoru
BlackRider Re: Rychlost emulatoru
Honza Pěkný článek
Matěj Konečný Re: Pěkný článek
ruups Re: Pěkný článek
Matěj Konečný Re: Pěkný článek
Honza Re: Pěkný článek
comodoro Re: Pěkný článek
wake jazykoproblémeček
msx Emulátory
ruups Re: Emulátory
msx Re: Emulátory
m4recek Nefunkcny Galaxy Nexus a ADB
Izak Re: Nefunkcny Galaxy Nexus a ADB
Amunak Nastavení proměnné JAVA_HOME
msx Otázky a odpovede
msx Ešte jedna otázka
Matěj Konečný Re: Ešte jedna otázka
Matěj Konečný Re: Ešte jedna otázka
Rezy Rozjet virtual android
Rezy Re: Rozjet virtual android
Matěj Konečný Re: Rozjet virtual android
andrej Missing requirement - solved
cyber automatická odinstalace apk
Honza Koukl Vse OK
Michal Instalace
petr simulator
zdenek.xell Naprogramování Aplikace
Jan Re: Naprogramování Aplikace
petr R.java
Zdroj: http://www.zdrojak.cz/?p=3670