MS Office week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

Lekce 7 - Android programování - Dokončení implementace kalkulačky

V minulé lekci, Android programování - Implementace Java kódu kalkulačky, jsme implementovali Java kód jednoduché kalkulačky.

V dnešním tutoriálu si ukážeme ladění Android aplikace a pak vygenerujeme instalační soubor .apk kalkulačky.

Testování a ladění aplikace

Android Studio nabízí několik nástrojů, které nám pomohou při ladění aplikace nebo s hledáním chyb v kódu, které by mohly způsobovat pády aplikace. Pojďme se s nimi hodně stručně seznámit! Nejprve si popsané pomocníky vyjmenujeme:

  • 1) Android Profiler
  • 2) Debugging a boj s errory
  • 3) Nástroj Logcat

1. Android Profiler

Nástroj Android Profiler je dostupný od verze AS 3.0. Tento nástroj poskytuje data v reálném čase, která nám pomohou zjistit, jak naše aplikace využívá prostředky jako procesor, paměť, připojení k internetu a baterii. Android Profiler v AS otevřeme v menu pod položkou View -> Tool Windows -> Profiler. Otevře se nám okno (viz. následující obrázek). Abychom viděli nějaká data, musíme spustit aplikaci na nějakém zařízení. Po spuštění projektu SimpleCalc, na námi vytvořeném virtuálním zařízení, v Profileru uvidíme něco podobného tomu co je na následujícím obrázku:

Pokud, po spuštění aplikace, nevidíte žádná data, klikněte na tlačítko + v levém horním rohu v okně Profileru, vpravo od nápisu SESSIONS. V rozbalené nabídce zvolte aktuální projekt.

Využití baterie lze sledovat pouze u aplikací běžících na zařízení s Androidem 8.0 (API 26) a vyšší.

Debugging a boj s errory

Debugging

Ladění je jednou ze základních součástí každodenního života vývojáře. Vždy se snažíme psát bezchybný kód a bezchybné aplikace. Ladění nám umožňuje procházet jednotlivé řádky kódu, sledovat obsah proměnných aplikace atd. Nejlepší bude ukázat si to na příkladu. V projektu kalkulačky si v debugeru zobrazíme obsah některých proměnných. Určíme místa v kódu, ve kterých budeme chtít "dát pauzu". Tyto body se jmenují breakpointy a vytvoříme je kliknutím vlevo vedle řádku, který nás zajímá - viz obrázek:

Po kliknutí na popsané místo levým tlačítkem myši se na něm zobrazí červené kolečko. Dalším kliknutím na kolečko tento breakpoint zrušíme. Seznam všech breakpointů zobrazíme kliknutím na záložku Favorites na levé straně okna AS a v otevřeném okně rozbalením nabídky Breakponts. U každého vidíme název souboru a číslo řádku, na kterém se daný breakpoint nachází. Dvojklikem na jakýkoliv breakpoint v tomto seznamu nás AS přesune do místa v kódu, kde tento breakpoint je.

Jak je vidět na předchozím obrázku, máme v kódu celkem dva breakpointy.

Nyní spustíme aplikaci v zařízení (skutečné nebo virtuální) tlačítkem se zeleným broučkem - viz obrázek:

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Ve chvíli, kdy je prováděn příkaz, který je označen breakpointem, je aplikace pozastavena a otevře se okno debugeru, ve kterém najdeme některé naše proměnné, včetně hodnot, které v tu chvíli obsahují - viz. následující obrázek. Na tomto obrázku je šipkou označena i zelená ikonka, která, po kliknutí na ní, zajistí pokračování chodu aplikace. Tedy pokud se neobjeví další breakpoint, na kterém se aplikace znovu pozastaví.

Zobrazení errorů při pádu aplikace

Nejsme dokonalí a i přes veškerou snahu se najde chvíle nepozornosti a v kódu uděláme chybu, která se projeví až za běhu aplikace. Pád aplikace a reakci AS na ní si opět ukážeme na příkladu. A to tak, že v projektu kalkulačky záměrně vytvoříme podmínky pro pád aplikace. V kódu souboru MainActivity.java zakomentujeme tento řádek kódu v metodě onCreate():

spinnerOperation = findViewById(R.id.spinnerOperation);

Jde o proměnnou, uchovávající referenci na Spinner v XML, kterým uživatel vybírá matematickou operaci. Zakomentováním zabráníme inicializaci proměnné spinnerOperation.

Chyba nastane již při startu aplikace, protože se na konci metody onCreate() pokusíme komponentě Spinner nastavit adaptér. Proměnná spinnerOperation je však null a aplikace spadne s chybou NullPointerException.

Otevřeme si v menu okno Logcat takto: View -> Tool Windows -> Logcat a spustíme aplikaci. V tomto případě nemusíme aplikaci spouštět v debug módu, stačí aplikaci pouze spustit tlačítkem se zelenou šipkou

Brzy po spuštění dojde k pádu aplikace a v okně Logcatu se objeví hromada červeného text s důvodem pádu. V tomto textu nalezneme modrý podtržený text (vypadá jako odkaz), na který když klikneme, přesune nás AS do kódu na ten řádek, ve kterém k chybě došlo. Pokud je v Logcatu takto označených míst více, máme tak i odkazy na části kódu, jejichž vykonávání pádu bezprostředně předcházelo.

Nástroj Logcat

Tento nástroj jsme již nakousli v předchozím odstavci o boji s errory a také jsme se o něm zmínili v lekci o životním cyklu Activity, kdy jsme si v Logcatu nechali vypisovat volání metod životního cyklu hlavní aktivity aplikace Hello World! V okně Logcat se zobrazují různé systémové zprávy a zprávy, které do kódu přidáme sami. Zprávy jsou zobrazovány v reálném čase jedna za druhou a je možné v nich listovat zpětně a prohlížet starší zprávy. Můžeme vytvořit různé filtry pro zobrazování vybraných zpráv nebo zobrazovat pouze vlastní zprávy generované kódem aplikace. A samozřejmě, jak již víme, zobrazuje i errory způsobující případný pád aplikace za běhu. Pro zobrazování zpráv v Logcatu je nutná instalace konkrétní aplikace do zařízení (připojeného k počítači kabelem nebo vytvořeného virtuálního zařízení). Zopakuji, že Logcat otevřeme v menu View -> Tool Windows -> Logcat nebo kliknutím na záložku v dolní části AS. Pomocí třídy Log můžeme v kódu vytvářet následující zprávy, které budou zobrazeny v Logcatu, zde seřazené od nejvyšší k nejnižší prioritě:

  • Log.e(String tag, String message) (error)
  • Log.w(String tag, String message) (warning)
  • Log.i(String tag, String message) (information)
  • Log.d(String tag, String message) (debug)
  • Log.v(String tag, String message) (verbose)

Příklad vytvoření zprávy v kódu:

Log.d("muj_tag", "Some message from the application code");

Při vytváření zprávy je dobrým zvykem jako tag nepoužívat přímo textový řetězec, ale předem deklarovanou konstantu typu String takto:

final String MUJ_TAG = "muj_tag";
Log.d(MUJ_TAG, "Some message from the application code");

Opět si popsané vyzkoušíme v projektu kalkulačky. Jednu zprávu vložíme do metody onCreate():

Log.d(MUJ_TAG, "onCreate()")

a druhou do metody calculate():

Log.d(MUJ_TAG, "Výpočet: " + number1 + spinnerOperation.getSelectedItem() + number2 + "=" + result);

Díky těmto zprávám můžeme v okně Logcatu sledovat volání metody onCreate() a sledovat každý výpočet.

Otevřeme Logcat a do pole pro filtování zpráv vložíme obsah konstanty MUJ_TAG pro zobrazení pouze našich zpráv, označených tímto tagem. Vlevo od filtru nastavte typ zobrazovaných zpráv na Debug nebo na Verbose (volba Verbose zobrazuje úplně všechny typy zpráv). Poté aplikaci spusťte a sledujte vypsané zprávy v okně Logcatu.

Filtrování zpráv je velice užitečné. Systémových zpráv je totiž Logcatem vypisováno poměrně hodně a hledání vlastních zpráv by bylo komplikované.

Aplikace je hotová, ukázali jsme si, jakým způsobem ji ladit a zbavovat chyb, pojďme si tedy vygenerovat instalační soubor .apk, díky kterému můžeme zajistit její distribuci ;-)

Vygenerování instalačního souboru aplikace (.apk)

Dejme tomu, že potřebujete vytvořenou aplikaci publikovat (nemám teď na mysli přímo Google Play), někomu odeslat k otestování nebo se s ní jen budete chtít pochlubit. K tomu budete potřebovat vytvořit instalační soubor. V několika následujících krocích si projdeme postup, jak na to.

  1. V menu klikněte na Build a v rozbalené nabídce zvolte Generate Signed Bundle/APK:
  1. V okně Generate Signed Bundle or APK zaškrtněte druhou možnost (Apk) a potvrďte tlačítkem Next:
  1. V dalším okně budete vyzváni k zadání cesty a hesla k úložišti klíčů a k zadání názvu konkrétního klíče této aplikace a jeho hesla. To proto, že každý instalační balíček musí být podepsaný. My zatím žádné úložiště klíčů ani žádný klíč vytvořený nemáme, proto klikneme na tlačítko Create New:
  1. V okně Choose keystore file, v horní části, zvolíme cestu k místu, kde budeme mít úložiště klíčů, v dolní části okna toto úložiště pojmenujeme a potvrdíme tlačítkem OK. Takto, na zvoleném místě, v počítači, vytvoříme soubor .jks, kam můžeme ukládat naše budoucí klíče:
  1. Otevře se nám okno New Key Store. V horní části vidíme cestu k právě vytvořenému úložišti klíčů. Pod cestou k úložišti zvolíme nějaké jeho heslo a pro potvrzení zopakujeme do vedlejšího pole. V další části okna už budeme vytvářet nový klíč k naší aplikaci s kalkulačkou. Na obrázku je vidět příklad, jak všechna pole vyplnit. Opět potvrdíme tlačítkem OK:
  1. Opět se nacházíme v okně Generate Signed Bundle or APK z bodu 3, ale s již vyplněnými údaji o použitém klíči. Při příštím generování souboru .apk tedy použijeme vytvořený klíč z vytvořeného úložiště klíčů a body 4 a 5 budou vynechány, protože stisknutím tlačítka Choose existing... najdeme umístění úložiště klíčů, zadáme jeho heslo, dále zadáme jméno konkrétního klíče (Key alias), jeho heslo a potvrdíme tlačítkem Next:
  1. V dalším okně označíme položku release a dole zaškrtneme obě políčka (volbu V1 i V2) a potvrdíme tlačítkem Finish, čímž spustíme build projektu:
  1. Po dokončení buildu se v pravé dolní části okna AS objeví oznámení o dokončení akce a o umístění vygenerovaného souboru .apk. Kliknutím na modré locate bude soubor zobrazen ve složce:
  1. Pokud by jste si během buildu odskočili a toto oznámení propásli, klikněte na zelenou bublinku v pravé dolní části okna AS, která informuje o nových událostech. Měla by být zelená. Pokud je červená, znamená to, že se něco nepovedlo. Kliknutím na bublinku zobrazíme okno, ve kterém nalezneme to, co potřebujeme:

Tímto máme hotovou první aplikaci i s vygenerovaným instalačním .apk souborem ;-)

Kompletní Java kód včetně jednotlivých XML souborů máte v příloze.

V příští lekci, Android programování - Životní cyklus aktivity, se podíváme na životní cyklus Android aplikací.


 

Stáhnout

Staženo 1469x (17.69 MB)
Aplikace je včetně zdrojových kódů

 

Předchozí článek
Android programování - Implementace Java kódu kalkulačky
Všechny články v sekci
Základy vývoje Android aplikací v Javě
Článek pro vás napsal Jiří Frank
Avatar
Jak se ti líbí článek?
5 hlasů
Autor se věnuje programování v C# a vývoji aplikací pro platformu Android a dalším věcem spojeným s Android OS
Aktivity (9)

 

 

Komentáře
Zobrazit starší komentáře (17)

Avatar
Ondrej Elláš:29.11.2016 21:35

V Android Studio som úplný začiatočník. Preto bojujem s každým krokom. Pri kalkulačke som sa dostal až po generovanie APK. Na rozdiel od popisu v článku moje Studio umožňuje aj Build APK. Ten prebehol v poriadku. Keď som zadal Generate Signed APK (build type - release) dostal som nasledovné hlásenie:

Failure: Build failed with an exception.

*What went wrong:
Execution failed for task ´:app:validate­SigningRelease.
Keystore file c:\VeciProAndro­id\PrvniKlicek­.jks not found for signing config 'external Override'

  • Try:

    Run with --stacktrace option to get the stacktrace.

    Run with --info or --debug optin to get more log output.
    Build Failed

Vie mi niekto poradiť kde robím chyby ?

 
Odpovědět
29.11.2016 21:35
Avatar
Ondrej Elláš:30.11.2016 9:57

Po problémoch popísaných v predchádzajúcom príspevku, som vyskúšal najjednoduchšiu aplikáciu Hallo world.
Build APK bol bez problémov úspešný, ale Gererate Signed APK zlyhal presne ako je popísané v predchádzajúcom príspevku.
Robím asi niekde systémovú chybu. Poradími niekdo v čom robím chybu ?

 
Odpovědět
30.11.2016 9:57
Avatar
Tomáš Hůla:31.12.2017 14:17

Když to chci spustit tak mi to píše "Default activity not found".

Editováno 31.12.2017 14:19
 
Odpovědět
31.12.2017 14:17
Avatar
Tomáš Hůla:31.12.2017 16:33

Jaký používáš API?

Zjistil jsem že "ActionBarActivity" je už zastaralý.

 
Odpovědět
31.12.2017 16:33
Avatar
Jaroslav Konečný:21.9.2018 15:14

Na mobilu se mi ta kalkulačka zobrazí, ale to je tak vše. Nejdou mačkat tlačítka a nic to nepíše. Mám pocit, že tu kus kódu chybí.
Kde je kód co má být v onclick?
Podle mě ty metody ZapisCislo, ZapisCarku, VymazJeden atd nejsou z ničeho volané.
Můžete prosím poradit?

 
Odpovědět
21.9.2018 15:14
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Jaroslav Konečný
Matúš Olejník:21.9.2018 16:10

Keď je parametrom tej funkcie View tak môžeš v grafickom editore po kliknutí na Button nastaviť onClick (vyberieš zo zoznamu) alebo priamo v xml pridáš elementu Button

android:onClick="nazovFunkcie"

Ak nie je parametrom funkcie View môžeš v kóde napr. v onCreate metóde nastaviť click listener

button.setOnClickListener(event -> nazovFunkcie())
Editováno 21.9.2018 16:11
Odpovědět
21.9.2018 16:10
/* I am not sure why this works but it fixes the problem */
Avatar
Libor Šimo (libcosenior):24.9.2018 13:20

Ahoj, v článku sa píše: Nyní propojíme USB kabelem s PC a zapneme „Možnosti vývojáře“ a povolíme Ladění USB. Doporučuji nechat nainstalovat kompletní balíček SW pro dané zařízení. Potom potvrdíme dialogové okno, které v mobilu vyskočí.
Mne to ukáže len to v prílohe.
Poradíte?

Odpovědět
24.9.2018 13:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):24.9.2018 14:04

Vyskúšal som Hello World a na už sa mi to s mobilom spárovalo.

Editováno 24.9.2018 14:04
Odpovědět
24.9.2018 14:04
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
duanin2
Člen
Avatar
duanin2:20.2.2019 15:36

já zkopíruju celek ten kód téhle kalkulačky a ono to nefunguje

 
Odpovědět
20.2.2019 15:36
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na duanin2
David Čápka:15.5.2019 15:06

Ahoj, projekt byl aktualizován na novější verzi.

Odpovědět
15.5.2019 15:06
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 27. Zobrazit vše