Once upon a time...
Ciele
  1. Oboznámiť sa s modulárnym vývojovým prostredím Eclipse.
  2. Prispôsobiť vývojové prostredie pre tvorbu aplikácií na platforme Android.
  3. Vytvoriť virtuálne Android zariadenie (AVD).
  4. Vytvoriť jednoduchý projekt.
  5. Spustiť vytvorený projekt v emulátore.
Úvod
Na tomto cvičení si pripravíte vývojové prostredie pre tvorbu aplikácií na platforme Android vrátanie vytvorenia virtuálneho Android zariadenia. Pripomeniete si základné komponenty a štruktúru aplikácií a následne tieto poznatky využijete pri tvorbe jednoduchého 'Hello Android' projektu. Tento projekt bude tvoriť základ pre ďalšie cvičenia a jeho finálna verzia bude všetkým určite veľmi dobre známa hra - puzzle 15.
Postup
  1. Cieľom tejto úlohy je prispôsobiť vývojové prostredie pre tvorbu Android aplikácií.
    Úloha:  Stiahnite a nainštalujte modulárne vývojové prostredie Eclipse. [oficiálna stránka]
    Úloha:  Stiahnite a nainštalujte štartovací balík Android SDK. [oficiálna stránka]
    Úloha:  Nainštalujte ADT(Android Development Tools) plugin pre Eclipse podľa inštrukcií.
    Úloha:  Pridajte referenciu na balík SDK v Eclipse Window -> Preferences v záložke Android.
    Úloha:  Oboznámte sa s možnosťami SDK/AVD manažéra v Eclipse Window -> Android SDK and AVD Manager.
    Poznámka:  Je nevyhnutné mať v prostredí stiahnutú minimálne 1 platformu, aby bolo možné kompilovať budúce vytvorené projekty a spúšťať aplikácie v emulátore.
    Poznámka:  Nezabúdajte na pravidelnú kontrolu aktualizácií pre nainštalované nástroje a platformu.
  2. Táto úloha slúži na vytvorenie a oboznámenie sa s emulátorom.
    Úloha:  Vytvorte nové virtuálne zariadenie prostredníctvom SDK/AVD manažéra Virtual devices -> New.
    Pre testovacie účely použite nasledujúcu konfiguráciu:
    • Target: Android 2.2 - API Level 8
    • SD Card: 64 MiB
    • Skin: HVGA
    Poznámka:  Je nutné brať do úvahy API level vytváraného projektu, teda cieľová platforma virtuálneho zariadenia určeného na emuláciu daného projektu musí byť rovnakého alebo vyššieho levelu.
    Poznámka:  Popis rôznych hardérových nastavení pri vytváraní AVD nájete tu
    Úloha:  Spustite emulátor s virtuálnym zariadením vytvoreným v predchádzajúcej úlohe prostredníctvom SDK/AVD manažéra Virtual devices -> Start.
    Úloha:  Oboznámte sa s možnosťami ovládania emulátora cez konzolu.
    Prístup k bežiacej inštancii emulátora z príkazového riadka:
    telnet localhost [port]
    Poznámka:  Prvej bežiacej inštancii emulátora je pridelený port pre konzolu 5554. Pre každú ďalšiu inštanciu sa hodnota zvyšuje o 2 oproti predchádzajúcej.
    Poznámka:  Popis použiteľných príkazov pre zmenu vzhľadu a správania emulátora nájdete tu .
    Úloha:  Pristúpte ku príkazovému riadku simulovaného Android zariadenia.
    Konzolu vyvoláte z príkazového riadku príkazom:
    Cesta:\k_nainštalovanému_Android_SDK_balíku\platform-tools\adb shell
                
    Poznámka:  Zoznam dostupných príkazov je umiestnený v /system/bin/ .
    Úloha:  Oboznámte sa so základnými použiteľnými príkazmi pre prácu s virtuálnym Android zariadením.
    Pre manipuláciu s aplikáciami sa využívajú príkazy:
    • adb push
    • adb pull
    • adb install
    • adb uninstall
    • adb logcat
    Poznámka:  Popis použiteľných príkazov nájdete tu .
    Poznámka:  V Eclipse je dostupný aj jednoduchý File Explorer pre spustené AVD pod Window -> Open Perspective -> Other -> DDMS .
  3. Cieľom tohto kroku je vytvorenie prvej jednoduchej Android aplikácie s pripomenutím si poznatkov o základných komponentoch a štruktúre.
    Úloha:  Zopakujte si základné komponenty a štruktúru aplikácií vytváraných pre platformu Android.
    Úloha:  Vytvorte vo vývojovom prostredí Eclipse nový Android projekt bez testovacieho projektu s parametrami:
    • Project name: HelloAndroid
    • Target name: Android 2.2
    • Application name: HelloAndroid
    • Package name: tuke.fei.hello
    • Create Activity: Hello
    • Min SDK Version: 8
    Úloha:  Spustite vytvorenú aplikáciu na bežiacom AVD vyvolaním kontextového menu nad projektom -> Run As -> Android Application
    Poznámka:  Predvolené nastavenie umožňuje automaticky spúšťať aplikáciu na dostupnom bežiacom AVD. Zmena konfigurácie je dostupná v Eclipse Run -> Run Configurations... v záložke Target vybraného projektu.
    Poznámka:  Ak by pri vytváraní projektu nebola zvolená možnosť Create Activity, výsledkom pokusu o spustenie aplikácie na AVD by bola iba samotná inštalácia aplikácie na AVD.
    Úloha:  Preštudujte si nasledujúce súbory vo vytvorenom projekte:
    • /src/tuke.fei.hello/Hello.java
    • /AndroidManifest.xml
    • /res/layout/main.xml
    • /res/values/strings.xml
  4. V tomto kroku vytvoríme jednoduché úvodné menu aplikácie pozostávajúce z dvoch tlačidiel, jedno slúžiace pre výpis jednoduchej informácie o aplikácii a druhé zatvárajúce aplikáciu.
    Úloha:  Pripomeňte si životný cyklus Aktivity
    Úloha:  Pripomeňte si základné objekty, na ktorých je založené používateľské rozhranie:
    • ViewGroup - rodičovská trieda pre návrhové prvky (podtriedy), ktoré vytvárajú rozličnú návrhovú architektúru.
    • View - základná jednotka používateľského rozhrania, dátová štruktúra uchovávajúca návrhové parametre a obsah pre špecifickú obdĺžnikovú oblasť na displeji.
    Poznámka:  Jednoduchý popis základných návrhových objektov tu
    Každý View objekt môže byť v štruktúre definovaný jedinečným identifikátorom, uvedeným v XML návrhovom súbore v atribúte id. Syntax pre pridanie identifikátora objektu:
    android:id="@+id/jedinecny_nazov_identifikatora
    Pre každý View objekt je potrebné definovať šírku a výšku (atribúty layout_width a layout_height). Používané konštanty:
    • wrap_content - veľkosť udávaná obsahom.
    • fill_parent - veľkosť udávaná rodičovským ViewGroup objektom.
    Ako programátori ste zvyknutí používať vo svojich aplikáciách na definovanie rôznych typov rozmerov základnú jednotku - pixel. Problém nastáva, keď máte pracovať s obrazovkou, ktorá obsahuje stále viac a viac bodov na palec (dpi - dots per inch), a teda používateľské rozhranie sa stáva menším a menším. Vzhľadom na rozlíšenie Android podporuje nasledujúce jednotky:
    • px (pixels)
    • in (inches)
    • mm (millimeters)
    • pt (points) - 1/72 palca
    • dp,dip (density-independent pixels) - abstraktná jednotka založená na hustote obrazovky, na obrazovke so 160 dpi platí 1dp = 1px.
    • sp (scale-independent pixels) - podobná dp, škálovateľná podľa nastavenej veľkosti písma
    Poznámka:  Aby vaša aplikácia bola použiteľná pre akékoľvej zobrazenie, budete v aplikácii využívať jednotky sp pre nastavenia písma, inak dp.
    Úloha:  Upravte v návrhovom súbore main.xml element TextView podľa hodnôt nasledujúcich atribútov:
                   android:layout_height="wrap_content"
                   android:layout_width="wrap_content"
                   android:text="Android15"
                   android:layout_marginBottom="25dip"
                   android:layout_gravity="center"
                   android:textSize="40sp"
                   android:textColor="#ff624E5A"
                
    Úloha:  Pridajte element Button s hodnotami nasledujúcich atribútov:
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="About"
                  android:id="@+id/mbutton_about"
                
    Úloha:  Pridajte v návrhovom súbore main.xml element Button s hodnotami nasledujúcich atribútov:
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:text="Exit"
                  android:id="@+id/mbutton_exit"
                
    Úloha:  Spustite upravený projekt.
    Úloha:  Upravte hlavnú Aktivitu Hello.java tak, aby implementovala rozhranie View.OnClickListener.
    Poznámka:  Trieda View obsahuje kolekciu rozhraní On[akcia]Listener so spätným volaním metódy On[akcia]().
    Úloha:  Doplňte metódu onClick() o akcie vyvolané stlačením jednotlivých tlačidiel.
    Poznámka:  Trieda R vygenerovaná počas buildovania aplikácie obsahuje používateľovi dostupné referencie na definované zdroje, v tomto prípade využijeme referencie na identifikátory tlačidiel definované v návrhovom súbore main.xml
    Poznámka:  Bližšie informácie o zdrojoch nájdete tu.
    Využitím predchádzajúcich informácií bude telo metódy vyzerať nasledovne:
                  public void onClick(View theView) {
                    switch(theView.getId())
                		{
                      // stlacene tlacidlo bolo tlacidlo About
                  		case R.id.mbutton_about:
                  			break;
                      // stlacene tlacidlo bolo tlacidlo Exit
                  		case R.id.mbutton_exit:
                  			finish();
                  			break;
                		}
                	}
                
    Poznámka:  Metóda triedy Activity finish() vyvoláva ukončenie danej Aktivity.
    Úloha:  Doplňte metódu onCreate() o vyhľadanie tlačidiel pomocou metódy findViewById() a ich asociáciu s OnClickListener-om.
    Pre tlačidlo About môže vyzerať kód takto:
                  View aboutButton = (View) findViewById(R.id.mbutton_about);
                  aboutButton.setOnClickListener(this);
                
    Úloha:  Spustite projekt a overte vykonanie akcie asociovanej so stlačením tlačidla Exit.
    Úloha:  Vytvorte nový návrhový XML súbor v adresári res/layout/ cez kontextové menu New -> Other -> Android -> Android XML File s parametrami:
    • file: about
    • type of resource: Layout
    • folder: /res/layout
    • element root: ScrollView
    Úloha:  Upravte element ScrollView o hodnoty atribútov:
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="10dip"
                
    Úloha:  Pridajte element TextView s hodnotami atribútov:
                  	android:id="@+id/about_content"
                  	android:layout_width="wrap_content"
                  	android:layout_height="wrap_content"
                  	android:text="Hello Android!"
                
    Úloha:  Vytvorte novú Aktivitu s názvom About.java v koreňovom adresári.
    Úloha:  Implementujte metódu onCreate() :
                  @Override
    	            public void onCreate(Bundle theSavedInstanceState) {
    	               super.onCreate(theSavedInstanceState);
    	               setContentView(R.layout.about);
    	             }
                
    Poznámka:  Každá nová Aktivita musí byť pridaná do AndroidManifest.xml
    Úloha:  Pridajte Aktivitu do manifestu využitím nasledujúcich atribútov:
                      android:name=".[nazov_triedy]"
                      android:label="[zobrazovany_nazov]"
                
    Úloha:  Pridajte v súbore Hello.java v metóde onClick() akciu na stlačenie tlačidla About - zobrazenie novej Aktivity.
    Poznámka:  Základné komponenty aplikácie (Aktivity, servisy, ..) sa aktivujú pomocou objektov typu Intent, pasívnych dátových štruktúr obsahujúcich opis pripravovanej akcie.
                  Intent aboutIntent = new Intent(this, About.class);
                  startActivity(aboutIntent);
                
    Úloha:  Spustite projekt a vychutnajte si svoju prvú Android aplikáciu :)
Doplňujúce úlohy
  1. Vycentrujte umiestnenie obsiahnutých elementov úvodnej obrazovky aj vertikálne za pomoci kombinácie návrhových objektov.