IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 7 - Android programování - Dokončení implementace 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:

Základy vývoje Android aplikací v Javě

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:

Základy vývoje Android aplikací v Javě

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.

Základy vývoje Android aplikací v Javě

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:

Základy vývoje Android aplikací v Javě

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

Základy vývoje Android aplikací v Javě

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

Základy vývoje Android aplikací v Javě

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.

Základy vývoje Android aplikací v Javě

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.

Základy vývoje Android aplikací v Javě

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:
Základy vývoje Android aplikací v Javě
  1. V okně Generate Signed Bundle or APK zaškrtněte druhou možnost (Apk) a potvrďte tlačítkem Next:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě
  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:
Základy vývoje Android aplikací v Javě

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


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Předchozí článek
Kvíz - Úvod do Java Android základů
Všechny články v sekci
Základy vývoje Android aplikací v Javě
Přeskočit článek
(nedoporučujeme)
Android programování - Životní cyklus aktivity
Článek pro vás napsal Jiří Frank
Avatar
Uživatelské hodnocení:
27 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