Přejít k navigační liště

Zdroják » Mobilní vývoj » Vyvíjíme pro Android: Začínáme

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

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.

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á.

Komentáře

Subscribe
Upozornit na
guest
70 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
phoose

Hezký článek na úvod. Chtěl bych jen zmínit, že pro ty, kterým se nechce konfigurovat Eclipse (nebo se jim to z nějakých důvodů nedaří), doporučuju MOTODEV Studio for Android od Motoroly, ke stažení zde http://developer.motorola.com/tools/motodevstudio/download/ – jedná se taktéž o Eclipse, ale už předkonfigurovaný přímo pro vývoj aplikací pro Android se spoustou užitečných nástrojů pro ladění, tvorbu databází atd. A přestože jej nabízí pod svou značkou Motorola, vývoj v něm vůbec není omezen jen na jejich přístroje, ale lze v něm vyvíjet pro jakékoliv androidí zařízení.

ruups

a pre tych, ktori chcu pouzit nieco kvalitnejsie a rychlejsie tak doporucujem IntelliJ Idea … community edition je zadarmo a rychlostou a kvalitou sa jej eclipse ani netbeans zatial nevyrovnaju

phoose

Už stahuju, vyzkouším :-)

Pavel

No jasne, to prece vi kazdy ze intelij je nejlepsi

Palo

Tak neviem, ja som skusal a ked mate na ceste napriklad 20 kniznic a dalsie 3 projekty ktory kazdy 20-30 kniznic tak doplnovanie cez CTRL+MEDZERA trvalo aj sekundy, neviem ci som nieco pokaslal ale pokusil som sa iba importovat projekty z Eclipse a pouzivat. Bohuzial to velmi neslo.

pepa

ja bych nic neprekladal a nazvy pouzivej anglicke, treba i s ceskym sklonovanim.Nejde tu o nauceni cestiny, ale programovani. Aspon se vzijou nazvy tech veci v anglictine, stejne (jak sam pises) pokud to nekdo bude myslet vazne, bude cist hlavne anglickou dokumentaci a pak by z toho mel jen gulas.

Riny

Souhlasím s tím, že bych anglické názvy taktéž nepřekládal, především „resources“. Na druhou stranu ale nesouhlasím s českým skloňováním. Mě osobně by to bylo absolutně jedno, pro mě je důležitý obsah a srozumitelnost a ne to, jestli autor náhodou neporušil 107984793879. pravidlo jazyka toho či onoho.

Na druhou stranu jsou tu ale neustále rypáci/trolové, kteří při prvním použití něčeho neobvyklého vypíší nenávistný komentář s hlavičkou „Czenglish“ a pustí se do autora, co si dovoluje vůbec pomyslet si anglické slovo česky skloněné.

Je to jak psal nedávno jiný článek o angličtině; lidi se bojí, že cizinci nás zkritizují za to, že v průběhu komunikace se dopouštíme gramatických chyb (zapomínáme na členy, používáme jen 3 časy, atd.) a přitom právě cizinci jsou k tomu nejtolerantnější a nejvíc kritiky sklidíme od českého okolí. Vidím to i v mém prostředí; mám pár známých, z toho jedna osoba umí angličtinu na slušné úrovni, je v ní lepší, než ostatní. A právě tato osoba je naprosto neskutečně kritická k sebemenšímu přešlapu ve výslovnosti či gramatice. (Např. jenom za to, že někdo přečetl „Through“ jako „tru:“ a ne „fru:“.)

razor

Through se ale nečte ani tru: ani fru: ale θruː ;-)

Riny

Ach jo XD. Hlavně že jsem při psaní příspěvku přemýšlel, jestli mám dopsat poznámku na téma, že nevím, jak si vyťukat potřebné symboly a jsem líný si to zjistit a pak jsem dospěl k závěru, že to snad čtenáři pochopí :3.

BlackRider

Tohle uz je ale ciste rejpani. Kdyz to vyslovis jako fru: tak si malokdo vubec vsimne rozdilu. tru: ma ale uplne jinej vyznam a clovek pak musi hadat z kontextu, co vubec dotycnej chtel rict…

povinná

Doporučuji používat „zdroje“. Neb to je přesně to, co „resources“ jsou. Zdroje pro vaše aplikace, aby fungovaly tak, jak mají.

Fantomas

Vyborny napad s timto serialem, ted se mi docela hodi. Jen bych ke clanku dodal, ze je potreba nainstalovat vsechny potrebne komponenty (eclipse, adk a adt) v poslednich verzich, kombinace starsich a novejsich dohromady nefunguje.

Vlkodlak

Eclipse je OK, pro začátečníky pak dává určitě smysl vyzkoušet i nějaký nástroj pro rapid development, kde se vyvíjí stylem drag and drop a sem tam trocha kódu. Případně nějaký framework, který usnadňuje ošetření různých systémových událostí. Klidně bych doporučil celkem univerzální Basic 4 Android nebo pro vývoj výukových aplikací nebo her GameStylus, kde se člověk obejde v podstatě bez programování skoro úplně.

msx

Pre Windows je nutnosť použiť tento príkaz na vytvorenie odkazu na adresár. SDK má problém s adresárom Program Files:
MKLINK /J C:Android „C:Program Files (x86)Androidan­droid-sdk“

(Prevzaté zo zajtra.sk)

phoose

Nebo jen spustit SDK Manager s právy admina ;-) (kvůli zápisu do Program Files při stahování souborů).

msx

Žiaľ, mne to bez vytvorenia odkazu nešlo. Ani s právami admina.

razor

IMHO je ještě potřeba povolit instlaci aplikací z „Uknow sources“

integral

Ahoj,
pred nejakym casem jsem zkousel trochu programovat pro android, ale zarazila me rychlost (pomalost) emulatoru – spoustel se treba 3-4 minuty a doba „deploye“ aplikace byla tez nezanedbatelna. Zmenilo se dnes neco?

Jeste jsem slysel o vyuzivani nejakych nativnich portu androidu pro i386 pro vyvoj – pouzivate to nekdo?

dano

velmi sa to nezmenilo, najlepsie je mat pripojeny telefon cez usb a rovno si to na telefon deploynut – je to omnoho rychlejsie.

jiri.vrany

Už poměrně dlouho je v nastevní emulátoru možnost povolit snapshot. Takže se začíná tam, kde práce minule skončila a je to poměrně rychlé. Pak jsou ještě nějaká další možná nastavení – víc třeba tady: http://stackoverflow.com/questions/1554099/slow-android-emulator

Honza

Je to pořád špatné. Když to jen trochu jde, používám skutečný hardware. Čím vyšší verze, tím pomalejší emulátor, čili na hello-world aplikace doporučuju emulátor 1.5.

ruups

ako dlhorocny android dev mozem k tomu dat len par rad :
– pouzit snapshot (povolit ho pri vytvarani AVD)
– emulator sice startuje pomaly ale treba si uvedomit ze je to emulator a nie simulator ako v pripade iOS. inymi slovami na virtualizovanej vrstve sa vam spusta realny android. ak programujete tak ho spustate raz-dvakrat za den. zbytok uz len deployujete aplikaciu.
– nepouzivat emulator tabletu …ani po rokoch google nijako ho nevylepsil a ked nechcete zomriet pri cakani zabudnite na to.
– ak je moznost pouzivajte pri vyvoji realne zariadenia. jednak su rychlejsie a druhak mate realnu odozvu takze to co sa na emulatore neda nasimulovat na realnom zariadeni mozete …

BlackRider

No ja emulator nepouzivam vubec. Je to pomaly a nektery veci jako GPS (logicky), push notifikace (da se zprovoznit, ale nevim proc to tam neni standardne) a dalsi vubec nefungujou. Ja proste vygenerovanej APK zkopiruju na web a stahnu primo do telefonu. Je to i rychlejsi nez cekat jestli ma zrovna emulator naladu dneska neco spoustet nebo je ho nutny zas restartovat…

BlackRider

Ja sem zvyklej programovat v jazykach, kde zadny debugery nejsou. Takze debuguju pomoci vyjimek a pomocnych vypisu. Moje aplikace komunikuje s webserverem, takze vsechny vypisy z telefonu se mi automaticky zobrazujou v error logu na serveru.
Krokovani sem pouzival naposledy snad na stredni skole.

BlackRider

Jinak vyhoda je v tom ze muzu psat at uz sem kdekoli. Pres Teamviewer se odkudkoli pripojim ke svymu vyvojovym prostredi a nepotrebuju mit cokoli nainstalovanyho na stroji se kterym prave pracuju…

ruups

s logovanim som naposledy aplikacie vyvijal na j2me kdeze tam bolo mozne debugovat len motorolu. Teraz by som asi bez toho nedal ani ranu.
Asi to je o preferenciach ale osobne by som zrovna toto nedoporucoval z jedneho dovodu. Ne vzdy mas pod kontrolu server side. Ak pouzivas logavanie na tvoj server ladenie aplikacie pre handlovanie chyb spojenia ti dvakrat pohodlne nepojde.
Pri praci s databazou (napr) je daleko pohodlnejsie nastavit breakpoint a pozriet sa co mas v stacku ako si zapisovat informacie do logu a ten si posielat. Jednak nezapises vsetko a ak ano tak logy su obrovske.
Inak toho GPS na emulatore … zrovna toto mi funguje najlepsie so vsetkeho pretoze mozem nahrat file s dummy poziciami a otestovat si to. Samozrejme je mozne nastavit aj na telefone mockup lokaciu ale ked vyvijas aplikaciu pre US a sedis v UK tak si nepomozes inak.
No a zaver k teamvieweru resp. k akemukolvek remote desktopu … ako casto pouzivas nieco taketo? Alebo ake velke percento vyvojarov by toto vedelo vyuzit? 1 promile, mozno 2 viac nie.

BlackRider

No tak to bys treba v Pythonu nebo PHP celkem pohorel :). Je to ciste vec zvyku. Mne uz by debugger spis zdrzoval.
Jiste vsak logovani na server je jen jedna z moznosti. Dalsi je koukat do logu primo na telefonu nebo si log posilat mailem.
Proc by neproslo? Neni duvod. Logy sou odesilany prubezne, takze jasne vidim, kde se aplikace zastavila, pokud tu vyjimku nechytnu.
Pro praci s databazi pouzivam nastroje k tomu urceny. To znamena treba adminer pro MySQL. Moc nechapu k cemu by mi tam byl debugger.
OK, ze jde nejak osulit GPS na emulatoru sem nevedel. Ale nemam duvod to resit, kdyz na telefonu to funguje.
Teamviewer pouzivam porad. eclipse mam na notebooku, abych ho mel sebou, kdyz sem nekde na ceste, ale kdyz sem doma nebo v praci tak sedim pred velkym monitorem a eclipse jede pres TeamViewer. Samozrejme to neni pro kazdeho, ale mne to takhle vyhovuje…

Ruups

V py a ph asi hej…mozno to je dovod preco kodim len android a iOS. Netusim ako moze niekoho debugger zdrzovat ale budiz mozno v tvojom pripade tomu tak je.
Pokial potrebujem zistit stav stacku alebo objektov v danom mieste a case je pre mna jednoduchsie setnut breakpoint a pozriet sa na to ako pisat logovanie, aj ked toto samozrejme pouzival ale z ineho dovodu.
Ked testujem nedostupnost sluzby ioexceptions alebo unknowhostexcep­tions tak mi logy na servri nevyhovuju.
Pracu s db som nemyslel pozretie do db ale pozretie v akom stave su objekty pred ulozenim a pripadne returny z helprov. A na to nejky viewer urceny nie je.
A co sa tyka externeho monitora. Mam laptop 17″ , na nom mi v robote bezi ddms, na externom monitore mam IDE a obcas k tomu este prilepim ipad s airdisplayom na ktorom mam emulator ak ho treba a nepotrebujem TV. Chapal by som este variantu ze mas laptop ako klienta a pouzivas PC lebo je silnejsie, alebo mate v kancli nejake security na siet, ale opacne garde? Neviem neviem…. Nie som ekologicky aktivista, ale mat vyslovene zbytocne zapnuty dalsi komp len aby si mal na nom TV mi pride uz uchylne.

BlackRider

No vidis to, mne zas prijde uchylny mit 17″ laptop. Holt kazdej sme nejakej, ale to uz se asi netyka moc vyvoje na Androidu ;).

ruups

Mozes mi prosim objasnit v com je 17″ laptop uchylny? Mam MBP takze sa mozes odpichut od toho a byt detailnejsi s argumentoch. Svoje som ti predlozil…

BlackRider

Jaky argumenty si mi predlozil k pouzivani laptopu s nizkou spotrebou misto serveru, kterej ma vetsinou spotrebu nasobne vetsi a nemuzu si ho vzit sebou na cesty? Nak sem je asi prehlidnoul…

ruups

Kde som presne pisal, ze je pouzivanie servru lepsie ako laptopu? Pokial som spravne pochopil tak prave kombinaciu dvoch zariadeni pouzivas ty (laptop+PC) miesto mojho jedneho zariadenia, takze neviem, nejako som sa teraz stratil v tom co si pisal…

BlackRider

To bude tim, ze se snazis resit muj setup, prestoze o nem skoro nic nevis ;). Ja pouzivam denne tri pocitace a kazdej k trochu jinymu ucelu a podle toho kde zrovna sedim. Ten laptop tak samozrejme nebezi pouze kvuli Teamvieweru. Slouzi mimo jine jako pristupovej bod k ostatnim zarizenim v mym byte a navic na nem bezi pod Windows jeste ve Virtualboxu Debian pro dalsi moznosti vyvoje.
Ale jak sem rikal, tohle uz nijak nesouvi s clankem, takze neni duvod to resit…

ruups

suhlasim s tebou, a naspat k povodnej teme. Moj nazor je ze pre prvy kontakt s aplikaciou je emulator dostatocna alternativa ak clovek android handset nema. Tak ako pri inych mobilnych platformach aj tu plati, bez otestovania na realnych zariadeniach to v markete/play nema co robit.
K debuggeru : si skutocne prvy clovek ktory developuje android bez debuggeru, ktoreho som spoznal. Osobne prave pre vyvoj androida debugger doporucujem a prave po rokoch logovania a posielania logov na server (j2me) vidim to ulahcenie ktore mi debugger priniesol.

BlackRider

Souhlasim. Muj pristup k programovani je ovlivnen vice nez dvaceti lety stridani ruznych jazyku a vyvojovych prostredi (vcetne ASP/VBScript v notepadu ;) ). Kazdopadne emulator a debugger neni jedina moznost, jak to delat. Je samozrejme na kazdym, aby si nasel svou cestu…

Honza

Pěkný článek, je vidět, že v tom autor skutečně dělá. Pár drobností bylo nových i pro mě (2 a půl roku se programováním pro Android živím), přitom je to napsáno srozumitelně i pro začátečníky.

Akorát nesouhlasím s tímhle (Target): „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.“ Já naopak buildím proti tak staré verzi, jak jen můžu. Pokud mi nic nezabrání mít minSDKVersion = Target, tak jsem šťastný, protože mi pak nehrozí, že omylem použiju nepovolené API z novější verze. Mít minSDKVersion třeba (podle míry konzervatismu) na 3, 4, 7, 8 nebo 11 a target už z principu na 15, i když člověk z 15 nic nevyužívá považuju za blbost. Jediné, co opravdu nejde je target<4. Pak „inteligentní“ OS lže aplikaci o rozlišení a sám ji pak nascaluje na velikost displeje. Kvůli částečné kompatibilitě se špatně napsanými aplikacemi pro 1.5 tak nefungujou dobře ty napsané správně.

ruups

Ak nepotrebujes podporovat uzivatelov so starsimi OS tak v tom nc zle nie je. Ak vsak mas apk ktore bolo publikovane este na 1.6 (mam taku appkku) tak pouzijes nizsie.
Warning na deprecated este beriem ale to s tym pouzitim starsich horsich nastrojov si ustrelil nie?
Predsa ked chcem pokryt 2.1-4x tak si nezvolim 15 naklepem tam kopu novych veci a potom ked budem publikovat tak budem vyplakavat, ze nieco v 7 nie je …zda sa mi to logicke aj sleskym rozumom.
A popravde az na par vynimiek tych noviniek zasa tak moc nie je. Ak je len softwarovy rozdiel (ala fragments) tak to vyriesis supportpackom a ak hw tak s tym neurobis nic…

Honza

U těch věcí, které se verze od verze mění, člověk často právě musí psát v deprecated stylu. Google něco úžasněho vymyslí, dá to do poslední verze a to, co fungovalo ve verzi n-1 a nyní je nahrazeno, označí jako deprecated. Čili jediný způsob, jak držet kompatibilitu je deprecated styl a při target=n tam budu mít warningy.

comodoro

Hlavní věc při výběru „targetu“ IMHO je, jak moc je rozšířený. Jelikož ICS má v současné době relativně malý podíl počtu uživatelů (pokud vím, je to pod pět procent), musí mít použití nejnovějšího API opravdu dobré důvody. Osobně obvykle vybírám verzi 2.2 (API level 8), podporuje to velká většina telefonů a nemá to některé nedostatky starších verzí.

wake

Samozřejmě „aNDROIDÍ risórsy“.

msx

K emuátorom doplním ešte toľko, že sú ideálne vtedy, ak riešite problém s dotazom do databázy a potrebujete vidieť databázu. Bez rootu sa do databázy nedostanete (download, upload). Ak sa mýlim, opravte ma.

ruups

cez ddms sa dostanes k databazovemu suboru. mozes ho stiahnut a potom len otvorit v extrenom viewere

msx

Práveže to mi nešlo v telefóne, nemal som dostatočné opravnenia na adresár, v ktorom bola databáza. Konkrétne sa jednalo o Android 2.1 Samusung Galaxy Mini. Rootovať som nechcel, pretože telefón nie je môj.

m4recek

Ak vam adb nezobrazi pripojeny galaxy nexus a USB ovladac nefunguje, staci najst cez google a nainstalovat nasledujuci ovladac:
Samsung_USB_Dri­ver_for_Mobli­e_Phones_v1_4_6_0­.exe

Izak

Kdo pro pana krale pouziva windows na programovani ??? … jeste k tomu v nejakem JAVA IDE … to musi byt naprosta sebevrazda ;-)) kdyz vidim, jak pomalu v tom bezi treba servlety a jak casto to pada, tak takove IDE musi byt brutalne pomale, kompilace jeste pomalejsi … a fungovat to beztak nebude, neb uz jsem videl kupu aplikaci, ktere pod windows jely blbe na w7, ackoliv na XP jely, blbe interpretovali datum na w7 64bit, pritom na w2003 64bit jely … a zatimco na linxu jelo vse jak na 64bit tak 32bit jave vcetne poslednich verzi ….

Amunak

Hrál jsem si s tím snad deset minut než jsem zjistil jak to vlastně správně nastavit. ADK si rozumí jak s 64 tak s 32 bitovou javou. Java.exe z JDK musí být v PATH nebo musí být složka, do které jste JDK instalovali (kořen JDK) v JAVA_HOME. Fungovala mi verze s lomítkem. Bohužel tam nejde zadat přímo cesta k souboru java.exe nebo do složky bin. Taky jsem zjistil, že aby se projevila změna systémových proměnných v instalátoru, musí se tento znovu spustit.

Máte-li nainstalováno JDK v C:JDK (soubor java.exe je tedy v C:JDKbinja­va.exe), funguje např.:
PATH=C:
nebo
JAVA_HOME=C:JDK
Snad to někomu pomůže :)

msx

1. Slovo adndroidí (v slovenčine androidový) by sa malo písať s malým a, teda aspoň v slovenčine to tak je. Myslím, že čestina je na tom podobne, ale toto už zrejme niekto zodpovedal.

2. Resources by som jednoznačne písal ako zdroje, pretože je to zaužívané a keď niekto bude niečo hľadať, tak zdroje mu povie viac aj vo vyhľadávačoch (subjektívny dojem). Anglicky radšej nie, pretože mne dlho slovo resource nič nehovorilo, takže preklad toho povie viac. Ale tipujem, že na to je už neskoro.

3. No a prichádza na rad moja otázka: Ako je to s tou kompiláciou oproti najvyššiemu Androidu? Veď ak chcem, aby niečo fungovalo na staršom, musím kompilovať na staršom, či? V emulátore (Android 2.2 mi to síce funguje aj pri Androide 4.0.3 (zámerne som dal tento, hoci je už 4.1, ak by niečo nebolo rovnaké ako v článku, aby ma to nezdržovalo, ale už len nový ADT plugin je inakší, takže je to asi jedno). Ide o to, že ak použijem vymoženosť Androidu 4.0, tak ma na to asi GUI nepouzorní a prídem o možnosť spustenia aplikácie na nižešj verzii Androidu, ale ak dám nižšiu od začiatku, tak vymoženosti nového Androidu nebudem môcť použiť. Alebo sa mýlim?

4. Ďalšia otázka je k tomu, že načo mám držať balíčky od Androidu 1.6, keď všetko sa kompiluje proti najvyššej knižnici, ktorá má spätnú kompatibilitu? Viem, že otázka číslo 3 je protichodná tejto, ale aj tak som zvedavý na odpoveď.

Dúfam, že moje otázky budú zodpovedané, hoci je článok pomerne starý a zrejme ho už „nikto“ nečíta.

msx

5. Ak použijem novšiu vec, čiže z Androidu 4.0 a min budem mať nastavené na Android 1.6, dostanem informáciu o tom, že daná vec nie je podporovaná v 1.6? Pokiaľ áno, tak sú mi v podstate nainštalované Androidy 1.6 – 4.0.3 zbytočné a stačí mi 4.1.

Rezy

Zdravim, vše se mi povedlo jen to hlavní asi ne :D kdyz spustim virtualní stroj tak mysto systemu tam je jen nejaky sporic nevim co s tim. Děkuji

Rezy

omlouvam se za ten pravopis .. nejde to editovat a klikl jsem moc rychle :D

andrej

ak ste natrafili na taketo nieco:

Missing requirement: Android Native Development Tools 20.0.0.v2012062420­43-391819 (com.android.i­de.eclipse.ndk­.feature.group 20.0.0.v2012062420­43-391819) requires ‚org.eclipse.cdt­.feature.group 0.0.0‘ but it could not be found

tak na http://stackoverflow.com/a/12107559/146745 je fungujuce riesenie.

cyber

Zdravím, v první řadě bych chtěl autorovi poděkovat za tyto články, s programováním pro Android začínám právě s touto sérií článků, a zatím se to daří :-)
Mám dotaz ohledně testování aplikací na mobilním telefonu. Existuje způsob, jak aplikaci po otestování funkčnosti automaticky odinstalovat? Takto se mi v telefonu hromadí spousta verzí aplikací po každém spuštění v Eclipse.

Honza Koukl

Super navod, jedine co jsem nerozchodil je pripojeni mobilu pres USB. Jedine co pres USB funguje je uloziste, ale jinak smolicek.

Michal

Proc je to takove slozit? Visual Studio jsem jen kliknul mysi na install a o vic jsem se nestaral. Za pet minut jsem uz programoval.
(Je ale pravda ze Microsoft je vyjimka, vetsina vyvojarskych nastroju se instaluje slozite, navody nesedi s aktualni verzi, priklady nefunguji.)

petr

Dobrý den,
at neprogramuju cokoli poříd mi to nechce nainstalovat na simulátor. Ten naběhne ale neni tam to co jsem udělal. Nemohl by mi někdo říct proč to nejde?

zdenek.xell

Ahoj, našel by se tu někdo kdo by zvládl naprogramovat konkrétní aplikaci s konkrétnímy požadavky? Já bych si to klidně udělal sám, ale nikdy jsem to nedělal a tento druh znalostí jaksi nemám. Děkuji velice za pomoc.

Jan

Prosim poslite mi poziadavky na aplikaciu.
Posudim.

Dakujem.

petr

ahoj,
někam se „stratil“ soubry R.java. Jak ho vygeneruju v eclipse?

Daniel

Ahoj, můžu se prosím zeptat? USB driver pro můj mobil jsem nenašel, ale našel jsem něco co měli ke stažení a bylo to obsažené asi v tom. Nainstaloval jsem to a pak mi to napsalo, že to nevyšlo, protože to není digitálně podepsaný ovladač, takže nic.. nicméně mobil připojit jde a vidí ho to, pokud ale spustím (Ladicí režim v mobilu mám zapnutý) aplikaci, tak se nic neudělá.
Udělal jsem si teda virtuální, a tam když to spustím, tak naběhne černé okno, vedle pár tlačítek, ale nic se neděje.. Třeba ta hláška, jen výpis, to se nezobrazí… Jen tam svítí nápis „Android“. Dělal jsem to podle tohoto postupu.

Díky předem za radu.
Dan

Petr Hebky

Pěkný článek díky němu jsem začal a naučil se programovat pro android a už jsem vytvořil sviji 1. aplikaci:
https://play.google.com/store/apps/details?id=com.HardcoreStudioDragons

hanes7

Čau , jsem se chtěl jen zeptat, zdali jsi znal již nějaké základy. Nebo ses to naučil až zde z této stránky Zdroják.cz . Jinak dobrá hra. :-)

petr

Informace jsou zastarale, Radeji nez elipse použijte Android developer studio.
https://developer.android.com/studio/index.html

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.