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).
Č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á.
Přehled komentářů