7. diel - Android programovanie - Dokončenie implementácie kalkulačky
V dnešnom tutoriále si ukážeme ladenie Android aplikácie a vygenerujeme
inštalačný súbor .apk
kalkulačky.
Testovanie a ladenie aplikácie
Android Studio ponúka niekoľko nástrojov, ktoré nám pomôžu pri ladení aplikácie. Pomôže nám aj pri hľadaní chýb, ktoré by mohli spôsobovať pády aplikácie. Poďme sa s nimi veľmi stručne zoznámiť! Najprv si popísané pomocníkov vymenujeme:
- Android Profiler
- Debugger a boj s errormi
- Nástroj Logcat
Nástroj Android Profiler je dostupný od verzie Android Studia 3.0. Tento
nástroj poskytuje dáta v reálnom čase. Vďaka nim môžeme zistiť, ako
naša aplikácia využíva prostriedky ako procesor, pamäť, pripojenie k
internetu a batériu. Android Profiler nájdeme v menu pod položkou
View -> Tool Windows -> Profiler. Otvorí sa
nám okno (viď. nasledujúci obrázok). Aby sme videli nejaké dáta, musíme
spustiť aplikáciu na nejakom zariadení. Po spustení projektu
SimpleCalc
, na nami vytvorenom virtuálnom zariadení, v Profileri
uvidíme niečo podobné tomu čo je na nasledujúcom obrázku:
Pokiaľ, po spustení aplikácie, nevidíte žiadne dáta, kliknite na
tlačidlo +
v ľavom hornom rohu v okne Profilera, vpravo od
nápisu SESSIONS. V rozbalenej ponuke zvoľte aktuálny projekt.
Využitie batérie je možné sledovať iba pri aplikáciách bežiacich na zariadení s Androidom 8.0 (API 26) a vyššie.
Debugging
Ladenie je jednou zo základných súčastí každodenného života vývojárov. Vždy sa snažíme písať bezchybný kód a bezchybné aplikácie. Ladenie nám umožňuje prechádzať jednotlivé riadky kódu, sledovať obsah premenných aplikácie atď. Najlepšie bude ukázať si to na príklade. V projekte kalkulačky si v debuggeri zobrazíme obsah niektorých premenných. Určíme miesta v kóde, v ktorých budeme chcieť "dať pauzu". Tieto body sa volajú breakpointy a vytvoríme ich kliknutím vľavo vedľa riadku, ktorý nás zaujíma - viď obrázok:
Po kliknutí na popísané miesto ľavým tlačidlom myši sa na ňom zobrazí červené koliesko. Ďalším kliknutím na koliesko tento breakpoint zrušíme. Zoznam všetkých breakpointov zobrazíme kliknutím na záložku Favorites na ľavej strane okna, kde v otvorenom okne rozbalíme ponuku Breakponits. Pri každom vidíme názov súboru a číslo riadku, na ktorom sa daný breakpoint nachádza. Dvojklikom na akýkoľvek breakpoint v tomto zozname sa presunieme do miesta v kóde, kde tento breakpoint je:
Ako je vidieť na predchádzajúcom obrázku, máme v kóde celkom dva breakpointy.
Teraz spustíme aplikáciu v zariadení (skutočné alebo virtuálne) tlačidlom so zeleným chrobákom - viď obrázok:
Vo chvíli, keď je vykonávaný príkaz, ktorý je označený breakpointom, je aplikácia pozastavená a otvorí sa okno debuggeru, v ktorom nájdeme niektoré naše premenné, vrátane hodnôt, ktoré v tej chvíli obsahujú. Ukážme si ďalší obrázok, na ňom je šípkou označená aj zelená ikona, vďaka ktorej môžeme pokračovanie v behu aplikácie. Teda pokiaľ sa neobjaví ďalší breakpoint, na ktorom sa aplikácia znovu zastaví:
Zobrazenie errorov pri páde aplikácie
Nie sme dokonalí a aj napriek všetkej snahe sa nájde chvíľa nepozornosti
av kóde urobíme chybu, ktorá sa prejaví až za behu aplikácie. Pád
aplikácie a reakciu Android Studia na nej si opäť ukážeme na príklade. A
to tak, že v projekte kalkulačky zámerne vytvoríme podmienky na pád. V
súbore MainActivity.kt
zakomentujeme tento riadok kódu v metóde
onCreate()
:
spinnerOperation = findViewById(R.id.spinnerOperation)
Ide o premennú, uchovávajúcu referenciu na Spinner
v XML,
ktorým užívateľ vyberá matematickú operáciu. Zakomentovaním zabránime
inicializácii premennej spinnerOperation
.
Chyba nastane už pri štarte aplikácie, pretože sa na konci metódy
onCreate()
pokúsime komponentu Spinner
nastaviť
adaptér. Premenná spinnerOperation
nie je inicilizovaná a
aplikácia spadne s chybou
UninitializedPropertyAccessException
.
Otvoríme si v menu okno Logcat takto: View -> Tool Windows -> Logcat a spustíme aplikáciu. V tomto prípade nemusíme aplikáciu spúšťať v debug móde, stačí aplikáciu iba spustiť tlačidlom so zelenou šípkou:
Čoskoro po spustení dôjde k pádu aplikácie av okne Logcatu sa objaví hromada červeného text s dôvodom pádu. V tomto texte nájdeme modrý podčiarknutý text (vyzerá ako odkaz). Keď naň klikneme, presunieme sa v kóde na ten riadok, v ktorom k chybe došlo. Pokiaľ je v Logcate takto označených miest viac, máme tak aj odkazy na časti kódu, ktorých vykonávaniu pádu bezprostredne predchádzalo.
Nástroj Logcat
Tento nástroj sme už načali v predchádzajúcom odseku o boji s errormi a
ešte ho stretneme v lekcii o životnom cykle Activity, kedy si v Logcate
necháme vypisovať volanie metód životného cyklu hlavnej aktivity aplikácie
Hello World!
V okne Logcat sa zobrazujú rôzne systémové správy
a správy, ktoré do kódu pridáme sami. Správy sú zobrazované v reálnom
čase jedna za druhou a je možné v nich listovať spätne a prezerať staršie
správy. Môžeme vytvoriť rôzne filtre na zobrazovanie vybraných správ
alebo zobrazovať iba vlastné správy generované kódom aplikácie. A
samozrejme, ako už vieme, zobrazuje aj errory spôsobujúce prípadný pád
aplikácie za behu. Pre zobrazovanie správ v Logcate je nutná inštalácia
konkrétnej aplikácie do zariadenia (pripojeného k počítaču káblom alebo
vytvoreného virtuálneho zariadenia). Zopakujem, že Logcat otvoríme v menu
View -> Tool Windows -> Logcat alebo kliknutím
na záložku v dolnej časti Android Studia. Pomocou triedy Log
môžeme v kóde vytvárať správy, ktoré budú zobrazené v Logcate, tu
zoradené od najvyššej k najnižšej priorite:
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)
Log.d("muj_tag", "Some message from the application code")
Pri vytváraní správy je dobrým zvykom ako tag nepoužívať priamo
textový reťazec, ale vopred deklarovanú konštantu typu String
takto:
var MUJ_TAG = "muj_tag" Log.d(MUJ_TAG, "Some message from the application code")
Opäť si popísané vyskúšame v projekte kalkulačky. Jednu správu
vložíme do metódy onCreate()
:
Log.d(MUJ_TAG, "onCreate()")
Druhú správu pridáme do metódy calculate()
:
Log.d(MUJ_TAG, "Výpočet: $number1 ${spinnerOperation.selectedItem} $number2 = $result" )
Vďaka týmto správam môžeme v okne Logcatu sledovať volanie metódy
onCreate()
a tiež každý výpočet.
Otvoríme Logcat a do poľa pre filtrovanie správ vložíme
tag:muj_tag
pre zobrazenie iba našich správ, označených týmto
tagom a level:debug
pre zobrazenie iba do úrovne
debug
:
Filtrovanie správ je veľmi užitočné. Systémových správ je totiž Logcatom vypisovaných pomerne veľa a hľadanie vlastných správ by bolo komplikované.
Aplikácia je hotová, ukázali sme si, akým spôsobom ju ladiť a zbavovať
chýb, poďme si teda vygenerovať inštalačný súbor .apk
,
vďaka ktorému môžeme zaistiť jej distribúciu
Vygenerovanie inštalačného súboru aplikácie
Dajme tomu, že potrebujeme vytvorenú aplikáciu publikovať (nemám teraz na mysli priamo Google Play), niekomu odoslať na otestovanie alebo sa s ňou len budeme chcieť pochváliť. Na to musíme vytvoriť inštalačný súbor. V niekoľkých nasledujúcich krokoch si prejdeme postup, ako na to:
1. V menu kliknite na Build av rozbalenej ponuke zvoľte Generate Signed Bundle/APK:
1. V okne Generate Signed Bundle or APK zaškrtnite druhú možnosť (APK) a potvrďte tlačidlom Next:
1. V ďalšom okne budete vyzvaní na zadanie cesty a hesla k úložisku kľúčov a na zadanie názvu konkrétneho kľúča tejto aplikácie a jeho hesla. To preto, že každý inštalačný balíček musí byť podpísaný. My zatiaľ žiadne úložisko kľúčov ani žiadny kľúč vytvorený nemáme, preto klikneme na tlačítko Create New:
1. V okne Choose keystore file, v hornej časti, zvolíme cestu k
miestu, kde budeme mať úložisko kľúčov, v dolnej časti okna toto
úložisko pomenujeme a potvrdíme tlačidlom OK. Takto, na zvolenom
mieste, v počítači, vytvoríme súbor .jks
, kam môžeme
ukladať naše budúce kľúče:
1. Otvorí sa nám okno New Key Store. V hornej časti vidíme cestu k práve vytvorenému úložisku kľúčov. Pod cestou k úložisku zvolíme nejaké jeho heslo a na potvrdenie zopakujeme do vedľajšieho poľa. V ďalšej časti okna už budeme vytvárať nový kľúč k našej aplikácii s kalkulačkou. Na obrázku je vidieť príklad, ako všetky polia vyplniť. Opäť potvrdíme tlačidlom OK:
1. Nachádzame sa späť v okne Generate Signed Bundle or APK z bodu
3), ale s už vyplnenými údajmi o použitom kľúči. Pri ďalšom generovaní
súboru .apk
teda použijeme vytvorený kľúč z úložiska
kľúčov a body 4) a 5) budú vynechané, pretože stlačením tlačidla
Choose existing... nájdeme umiestnenie úložiska kľúčov, zadáme
jeho heslo, ďalej zadáme meno konkrétneho kľúča (Key alias), jeho
heslo a potvrdíme tlačidlom Next:
1. V ďalšom okne označíme položku release a dole zaškrtneme obe políčka (voľbu V1 i V2). Potvrdíme tlačidlom Finish, čím spustíme build projektu:
1. Po dokončení buildu sa v pravej dolnej časti okna objaví oznámenie o
dokončení akcie ao umiestnení vygenerovaného súboru .apk
.
Kliknutím na modrej locate bude súbor zobrazený v priečinku:
1. Ak by ste si počas buildu odskočili a toto oznámenie prepásli, kliknite na zelenú bublinku v pravej dolnej časti okna, ktorá informuje o nových udalostiach. Mala by byť zelená. Pokiaľ je červená, znamená to, že sa niečo nepodarilo. Kliknutím na bublinku zobrazíme okno, v ktorom nájdeme to, čo potrebujeme:
Týmto máme hotovú prvú aplikáciu aj s vygenerovaným inštalačným
.apk
súborom;-)
Kompletný Kotlin kód vrátane jednotlivých XML súborov máte v prílohe.
V budúcej lekcii, Android programovanie - Životný cyklus aktivity , si vysvetlíme, čo je to aktivita a popíšeme si jej životný cyklus v Android aplikáciách.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 50x (15.96 MB)
Aplikácia je vrátane zdrojových kódov v jazyku Kotlin