Vývoj hybridných mobilných aplikácií
vývoj hybridných aplikácií pomocou rámca Apache Cordova
Oznamy
Motivácia
- Úvod do tvorby hybridných aplikácií
- podstata, princíp
- html5
- viaceré rámce
WarmUp
Ešte predtým, ako začneme so samotným vývojom, si potrebujeme pripraviť prostredie. Potrebujeme zabezpečiť tieto veci:
- nainštalovať node.js
- nainštalovať Cordovu
- vytvoriť samotný projekt
- pridať platformy, pre ktoré budeme projekt vyvíjať
Installing Cordova
npm install -g cordova
Create a project
cordova create torch sk.tuke.smart.torch Torch
kde:
torch
- je názov priečinka, v ktorom bude váš projekt vytvorenýsk.tuke.smart.torch
- je doména vašej spoločnosti/organizácie zapísaná opačneTorch
- je názov aplikácie
Samotné vytvorenie projektu je možné aj len s parametrom priečinka, čiže:
cordova create torch
cordova help create
Poznámka
Po vytvorení projektu je možné doménu spolu s názvom aplikácie zmeniť v konfiguračnom súbore config.xml
, ktorý sa nachádza v koreňovom priečinku projektu.
Adding a Platform
cordova platform ls
cordova platform add android
cordova platform add browser
cordova platform ls
Running Your Application
cordova run android
cordova run browser
Poznámka
Ak chcete pracovať priamo s Androidom, potrebujete mať vo vašom systéme dostupný systém Gradle. Buď si ho priamo nainštalujte a cestu k jeho binárke pridajte do systémovej cesty (alebo do premennej PATH
v linuxových systémoch) alebo si len nalinkujte binárku z inštalácie Gradle v Android Studiu.
Ak máme pripravené prostredie, môžeme vyskúšať spustiť samotnú aplikáciu. Pre spustenie aplikácie vo webovom prehliadači napíšme v príkazovom riadku príkaz:
cordova run browser
Týmto príkazom bol spustený server na adrese 8000, na ktorý sa je možné pripojiť a výslednú aplikáciu pozrieť. Cordova spustí prehliadač sama a výsledná aplikácia bude v prehliadači vyzerať nasledovne:
Ak však urobíme v kóde zmeny, potrebujeme opäť preložiť a spustiť novú verziu aplikácie. Miesto toho, aby sme tento proces opakovali pri každej zmene, využijeme príkaz cordova prepare browser
, pomocou ktorého vieme aktualizovaný kód nahrať na webový server Cordovy a nemusíme ho pritom vypnúť a znovu zapnúť. Tento proces vieme automatizovať napr. použitím nástroja entr
z príkazového riadku Linux-u nasledovne:
find www | entr cordova prepare browser
Je však možné doinštalovať rozšírenie s názvom Cordova Browser-Sync Plugin, ktoré zabezpečí aktualizovanie aplikácie o nový kód. Rozšírenie sa nainštaluje príkazom:
cordova plugin add cordova-plugin-browsersync
Podporu aktualizácie kódu na cieľovej platforme je následne možné zabezpečiť spustením platformy s prepínačom --live-reload
nasledovne:
cordova run browser -- --live-reload
Poznámka
Uvedené rozšírenie zabezpečí znovunahratie aktualizovanej verzie aplikácie na cieľovú platformu. Ak je cieľovou platformou prehliadač, nezabudnite jeho obsah obnoviť!
Podobne, ak chceme otestovať aplikáciu na platforme Android, napíšeme do príkazového riadku príkaz:
cordova run android
Výsledná aplikácia sa nachádza na nasledovnom obrázku:
Poznámka
Ak však nemáte v systéme vytvorený žiadny emulátor, aplikácia sa nespustí. Emulátor z príkazového riadku vytvoríte pomocou nástroja avdmanager
, ktorý sa nachádza v priečinku /tools/bin/
vašej inštalácie Android SDK. Jeho použitie môže vyzerať napríklad takto:
./avdmanager create avd -n test_phone -k "system-images;android-19;google_apis;x86"
Project Structure
Po vytvorení projektu bude jeho štruktúra vyzerať nasledovne:
. ├── config.xml ├── hooks/ ├── package.json ├── platforms/ │ ├── android/ │ └── browser/ ├── plugins/ ├── res/ └── www/ ├── css/ │ └── index.css ├── img/ │ └── logo.png ├── index.html └── js/ └── index.js
Význam jednotlivých priečinkov a súborov je nasledovný:
config.xml
- súbor s konfiguráciou projektuplatforms/
- priečinok, v ktorom sa nachádzajú nainštalované platformy (v našom prípade sa jedná o dve platformy Android a prehliadač)www/
- priečinok s našou aplikácioures/
- zdroje, medzi ktorými sa nachádza aj ikona aplikácie
Project Configuration
V súbore
config.xml
sa nachádza konfigurácia projektu. Význam jednotlivých položiek je nasledovný:widget
- The app reverse domain value that we specified when creating the app.name
- The name of the app that we specified when creating the app.description
- Description for the app.author
- Author of the app.content
- The app’s starting page. It is placed inside the www directory.plugin
- The plugins that are currently installed.access
- Used to control access to external domains. The default origin value is set to * which means that access is allowed to any domain. This value will not allow some specific URLs to be opened to protect information.allow-intent
- Allows specific URLs to ask the app to open. For example,will allow tel: links to open the dialer. platform
- The platforms for building the app.
Project Torch
Projekt samotný už poznáme z čias, keď sme ho robili pre Android. Tentokrát však skúsime jeho implementáciu pomocou webových technológií pomocou rámca Cordova.
O vizuál projektu sa bude starať webový rámec Bootstrap a o funkčnú časť sa bude starať rámec jQuery
Najprv stiahneme potrebné .js a .css súbory a umiestnime ich do príslušných priečinkov v priečinku
www/
. Konkrétne sa jedná o tieto súbory:- jQuery - stačiť nám bude súbor
jquery.min.js
, ale pre parádnejšie aplikácie je možné použiť aj jQuery Mobile - Bootstrap - stačiť nám budú súbory
bootstrap.min.js
abootstrap.min.css
- Popper - závislosť rámca Bootstrap, pozor však na sťahovanú verziu (musí byť umd)
- jQuery - stačiť nám bude súbor
Poznámka
Samozrejme je možné zmenšiť aplikáciu tým, že budeme príslušné súbory sťahovať pri spustení aplikácie z CDN serverov. Ak však chceme aplikáciu používať aj offline, nie je dobré sa spoliehať, že budeme mať určite nejakú verziu uloženú v cache.
Application Layout
Začneme podobne, ako v prípade baterky pre Android - rozložením aplikácie. Aplikácia sa bude skladať z jedného obrázku a jedného tlačidla.
Rozloženie aplikácie budeme vytvárať a upravovať v súbore
www/index.html
. Ten na začiatku upravíme tak, že z neho odstránime nepotrebné riadky a pridáme odkazy na knižnicu jQuery a našu aplikáciu:<#include "src/cordova_torch_default.index.html">
Nasledovné obrázky uložíme do priečinku
www/img/
Kód rozloženia bude vyzerať nasledovne:
html <img src="img/bulb_off.png"/> <br/> <button type="button">Turn On</button>
Ak teraz spustíme aplikáciu, bude vyzerať nasledovne:
Je na čase, aby sme sa pohrali trošku s vizuálom a zabezpečili, aby:
- pozadie aplikácie bolo čierne, a
- elementy boli umiestnené na stred (aspoň horizontálne)
Aktualizujeme teda súbor so štýlmi aplikácie
torch.css
nasledovne:css body { background-color: black; text-align: center; }
Po spustení bude aplikácia vyzerať nasledovne:
Torch Behavior
Teraz začneme upravovať správanie aplikácie v súbore
www/js/torch.js
. Začneme tým, že na tlačidlo pridáme udalosť, pomocou ktorej dôjde pri jeho stlačení k zmene jeho nápisu:javascript $('button').on('click', function(){ $(this).text('Turn Off'); });
Keď overíme funkcionalitu, zistíme, že po prvom kliknutí dôjde k zmene textu tlačidla, ale naspäť k jeho zmene nedôjde. Potrebujeme teda opäť uchovávať stav baterky a pri jeho zmene aktualizujeme text tlačidla. ```javascript var isOn = false;
$(‘button’).on(‘click’, function(){ if(isOn == true){ isOn = false; $(this).text(‘Turn On’); }else{ isOn = true; $(this).text(‘Turn Off’); } }); ```
Teraz už pôjde po stlačení tlačidla pekne prepínať. Až na to, že na žiarovke k žiadnemu prepínaniu nedôjde. Ošetríme teda kliknutie aj na žiarovku, vytvoríme funkciu
update()
, ktorá bude zodpovedná za aktualizáciu baterky pri zmene stavu a budeme ju volať pri stlačení tlačidla alebo pri kliknutí na obrázok:<#include "src/torch.js">
Ak teraz vyskúšame aplikáciu, tak sa bude správať presne tak, ako má. Teda až na jednu maličkosť, ktorou je práve rozsvietenie svetla na telefóne. Na to sa teraz pozrieme.
Let There be Light!
Cordova nemá v základe všetku potrebnú funkcionalitu. Je ju však možné rozširovať pomocou plugin-ov. K nim sa dostaneme prostredníctvom vyhľadávača priamo zo stránky http://cordova.apache.org/plugins/
Tu sa teda skúsime do vyhľadávača zadať kľúčové slovo flashlight
Našťastie nájdeme plugin s názvom cordova-plugin-flashlight, ktorý nainštalujeme do našej aplikácie príkazom:
cordova plugin add cordova-plugin-flashlight
Poznámka
Pri inštalovaní nezabudnite na to, že musíte byť vo vnútri priečinku s vašim projektom!
To, či sa podarilo plugin úspešne nainštalovať, uvidíme na príkazovom riadku priamo po jeho inštalácii. Rovnako však môžeme skontrolovať obsah súboru
config.xml
alebo spustiť nasledovný príkaz, ktorým nám vypíše zoznam všetkých nainštalovaných plugin-ov:cordova plugins
Na stránke plugin-u je možné vidieť rovnako aj ukážku jeho použitia. Upravíme teda funkciu
update()
nasledovne:function update(){ if(isOn == true){ = false; isOn $('button').text('Turn On'); $('img').attr('src', 'img/bulb_off.png'); // switch off window.plugins.flashlight.switchOff(); else{ }= true; isOn $('button').text('Turn Off'); $('img').attr('src', 'img/bulb_on.png'); // switch on window.plugins.flashlight.switchOn( function() {}, // optional success callback function() {}, // optional error callback intensity: 0.3} // optional as well {; ) } }
Na to, aby sme funkcionalitu tohto plugin-u mohli vyskúšať, samozrejme potrebujeme aplikáciu spustiť na reálnom zariadení s OS Android. V prehliadači nám bude Cordova vypisovať pri volaní chybu.
cordova android run
Okrem týchto funkcií je však možné využiť aj funkciu
toggle()
, ktorá sama zabezpečí prepínanie kamery na základe jej vnútorného stavu. To vieme s výhodou využiť a upraviť celý kód nasledovne:<#include "src/torch_with_flashlight.js">
Building Application Package
Ak chceme vytvoriť z výslednej aplikácie balíček pre zvolenú mobilnú platformu, použijeme príkaz
build
:cordova build android
Conclusion
Resources
- slajdy z prednášky
- Apache Cordova: Get Started Fast
- Create your first Cordova app
- Learn Cordova - tutoriál s označením absolute beginners
- Which to Use: Cordova or PhoneGap? - John M. Wargo, author of Apache Cordova 4 Programming, explains how two software products with similar names are now in many ways quite different, but both are essential and widely used in app development.
- avdmanager