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 předchozím kvízu, Kvíz - Tvorba GUI pro Android aplikace v Kotlin, jsme si ověřili nabyté zkušenosti z předchozích lekcí.

V dnešním tutoriálu si ukážeme ladění Android aplikace a 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. Pomůže nám také při hledání chyb, které by mohly způsobovat pády aplikace. Pojďme se s nimi hodně stručně seznámit! Nejprve si popsané pomocníky vyjmenujeme:

  • Android Profiler
  • Debugger a boj s errory
  • Nástroj Logcat

Android Profiler

Nástroj Android Profiler je dostupný od verze Android Studia 3.0. Tento nástroj poskytuje data v reálném čase. Díky nim můžeme zjistit, jak naše aplikace využívá prostředky jako procesor, paměť, připojení k internetu a baterii. Android Profiler najdeme 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:

Android - Tvorba mobilních aplikací v Kotlin

Pokud po spuštění aplikace neuvidí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

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 debuggeru 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:

Android - Tvorba mobilních aplikací v Kotlin

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, kde v otevřeném okně rozbalíme nabídku Breakponits. 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 se přesuneme do místa v kódu, kde tento breakpoint je:

Android - Tvorba mobilních aplikací v Kotlin

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:

Android - Tvorba mobilních aplikací v Kotlin

Ve chvíli, kdy je prováděn příkaz, který je označen breakpointem, je aplikace pozastavena a otevře se okno debuggeru, ve kterém najdeme některé naše proměnné, včetně hodnot, které v tu chvíli obsahují. Ukažme si další obrázek, na něm je šipkou označena i zelená ikona, díky níž můžeme pokračování v běhu aplikace. Tedy pokud se neobjeví další breakpoint, na kterém se aplikace znovu zastaví:

Android - Tvorba mobilních aplikací v Kotlin

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 Android Studia 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. V souboru MainActivity.kt 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 není inicilizovaná a aplikace spadne s chybou UninitializedPropertyAccessException.

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:

Android - Tvorba mobilních aplikací v Kotlin

Brzy po spuštění dojde k pádu aplikace a v okně Logcatu se objeví hromada červeného textu s důvodem pádu. V tomto textu nalezneme modrý podtržený text (vypadá jako odkaz). Když na něj klikneme, přesuneme se v 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.

Android - Tvorba mobilních aplikací v Kotlin

Nástroj Logcat

Tento nástroj jsme již nakousli v předchozím odstavci o boji s errory a ještě jej potkáme v lekci o životním cyklu Activity, kdy si v Logcatu necháme vypisovat volání metod životního cyklu hlavní aktivity aplikace Hello World!. V okně Logcat se zobrazují různé systémové zprávy. A zobrazují se zde i 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 Android Studia. Pomocí třídy Log můžeme v kódu vytvářet zprávy, které budou zobrazeny v Logcatu, zde seřazené od nejvyšší k nejnižší prioritě:

  • Log.e(tag: String, message: String) (error)
  • Log.w(tag: String, message: String) (warning)
  • Log.i(tag: String, message: String) (information)
  • Log.d(tag: String, message: String) (debug)
  • Log.v(tag: String, message: String) (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:

var 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()")

Druhou zprávu přidáme do metody calculate():

Log.d(MUJ_TAG, "Výpočet: $number1 ${spinnerOperation.selectedItem} $number2 = $result" )

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

Otevřeme Logcat a do pole pro filtrování zpráv vložíme tag:muj_tag, pro zobrazení pouze našich zpráv označených tímto tagem a level:debug pro zobrazení pouze do úrovně debug:

Android - Tvorba mobilních aplikací v Kotlin

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

Dejme tomu, že potřebujeme vytvořenou aplikaci publikovat (nemám teď na mysli přímo Google Play), někomu odeslat k otestování, nebo se s ní jen budeme chtít pochlubit. K tomu musíme 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:
Android - Tvorba mobilních aplikací v Kotlin
  1. V okně Generate Signed Bundle or APK zaškrtněte druhou možnost (APK) a potvrďte tlačítkem Next:
Android - Tvorba mobilních aplikací v Kotlin
  1. V dalším okně budete vyzváni k zadání cesty, hesla k úložišti klíčů, 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:
Android - Tvorba mobilních aplikací v Kotlin
  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:
Android - Tvorba mobilních aplikací v Kotlin
  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:
Android - Tvorba mobilních aplikací v Kotlin
  1. Nacházíme se zpět 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 ú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:
Android - Tvorba mobilních aplikací v Kotlin
  1. V dalším okně označíme položku release a dole zaškrtneme obě políčka (volbu V1 i V2). Potvrdíme tlačítkem Finish, čímž spustíme build projektu:
Android - Tvorba mobilních aplikací v Kotlin
  1. Po dokončení buildu se v pravé dolní části okna 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:
Android - Tvorba mobilních aplikací v Kotlin
  1. Pokud byste si během buildu odskočili a toto oznámení propásli, klikněte na zelenou bublinku v pravé dolní části okna, 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:
Android - Tvorba mobilních aplikací v Kotlin

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

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

V následujícím cvičení, Řešené úlohy k 5.-7. lekci Android v Kotlin, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

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 35x (15.96 MB)
Aplikace je včetně zdrojových kódů v jazyce Kotlin

 

Předchozí článek
Kvíz - Tvorba GUI pro Android aplikace v Kotlin
Všechny články v sekci
Android - Tvorba mobilních aplikací v Kotlin
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 5.-7. lekci Android v Kotlin
Článek pro vás napsal Marek Urbańczyk
Avatar
Uživatelské hodnocení:
6 hlasů
Autor se věnuje programování v Kotlinu, Javě. Má také zkušenosti s C#.
Aktivity