Android alkalmazásfejlesztési alapismeretek Kozák Ferenc 2014.08.26. www.innobile.hu
Bevezetés elé Piaci részesedés - Felhasználók 2
Bevezetés elé Piaci részesedés - Felhasználók WP az iphone előtt Finn Olasz Magyar Maláj Mexico Lengyel + még 19 piac 3
Bevezetés elé Piaci részesedés - Felhasználók 4
Bevezetés elé Piaci részesedés - Felhasználók Magyarország 2013 Q2 432 ezer okostelefon eladás 49%-os növekedés Android 84% iphone és WP 7-7% Legfrisebb adatok szerint WP 10% felett 5
Bevezetés elé Piaci részesedés - Fejlesztők 6
Bevezetés elé Piaci részesedés - Alkalmazások száma BlackBerry 150 ezer Windows Phone 300 ezer App Store 1.2 millió Android 1.3 millió 7
Bevezetés elé Piaci részesedés Fejlesztői bevételek 8
Bevezetés Az android sikerének okai I. Brand lett az OS-ből Google Egységes rendszer képe NEM AZ! Linux alapú teljesen nyílt Nem csak mobilkészüléken Átkonfigurálható a rendszer (root) 9
Bevezetés Az android sikerének okai II. Számos webes szolgáltatás beépítve (Gmail, YouTube, Google Docs, Picasa ) ios-hez hasonló UX Széles készülékpaletta Minőség, ár, teljesítmény Gyors fejlesztés Marketing 10
Bevezetés Az android története Android Incorporated felvásárlása 2007 Open Handset Alliance bejelenti 80+ vállalat 14 operátor T-mobile, Vodafone, Sprint 23 készülékgyártó ASUS, Dell, Samsung 22 félvezetőgyártó Intel, Nvidia 17 szoftvergyártó Google, Ebay 12 egyéb Fluktál a résztvevők összetétele Tagok ingyen kapják meg az OS-t 11
Bevezetés Az android története 2008 HTC G1 12
Gyártóknak miért érte meg? Kicsi Nagy Könnyű betörés a piacra Remek ár/érték Új márkák Szolgáltató, mint gyártó Ingyenes Nincs saját OS Eladás csökken Létkérdés 13
Akiknek nem érte meg Apple ios Microsoft Google vs MS Nokia Symbian miatt kicsit beragadtak Android elutasítása után a MS felé fordultak és lett Windows Phone + Lumia 14
Android evolúció Gyors fejlődés Nagy különbségek Visszafele kompatibilitás Vannak törések Név mindig valamilyen édesség 15
1.0 1.1 Android evolúció 2008 október Apple pie Rengeteg gyermekbetegség Nehézkes használat UI, UX megbukott Inkább demó 2009 február Banana bread Nem hozott nagy változást 16
1.5 1.6 Android evolúció 2009 április Cupcake UI, UX reform, animációk Új kernel Szoftveres billentyűzet 2009 szeptember Donut Android market Hangfelismerés 17
2.0-2.3.3 Android evolúció 2009 október Eclair Új UI (HTML5, tablet támogatás) Multi-touch 2010 május Froyo JIT támogatás 2010 december Gingerbread Nexus S Új UI, NFC, Szenzorok sora 18
3.0 3.2 Android evolúció 2011 január Honeycomb TABLETre optimalizált UI, UX Többmagos processzorok 2011 május USB eszközök támogatása Widgetek 2011 július Szinte csak optimalizálás 19
Android evolúció 4.0 4.4.4 2011 október Ice cream sandwich 2-es és 3-as verziók egyesítése Skálázható felület majd később Ma ismert menü, feladatkezelő és készenléti kijelző 2012 július, november, 2013 július Jelly bean 2013 október Kit Kat ART futtatókörnyezet opcionálisan 20
Jövő? Android evolúció 5.0 - Android L Material design Letölthető a fejlesztői verzió 21
Jelenlegi felállás Mire éri meg fejleszteni és mire nem? 22
Platform felépítése 23
Fejlesztés Saját SDK Dokumentáció, példakódok (Java) AVD manager, ADB driver, DDMS 3rd Party kiegészítők (Google APIk) Gazdag API UI elemkészlet Stílusok, témák Arcfelismerés Szenzorok NFC, Wifi De van NDK is multiplatform, számításigényes feladatokhoz (C++) 24
Fejlesztés Eclipse ADT - múlt Plugin Eclipse előnyei, hátrányai Android Studio (béta) - jövő JetBrains IntelliJ alapú (PhpStorm, WebStorm, ) Apple Xcode mintára 0.8 de már most jobb WYSIWYG Editor 25
Android futtatási környezete Sandbox mode biztonságos környezet Saját virtuális gép Saját Linux process Szükséges legkevesebb jogosultság Különféle jogok hozzáférésekhez Telefonkönyv, szenzorok, sms, internet Telepítésnél nézitek mihez adtok jogot? 26
Alkalmazás felépítése Számos komponens, amik lazán csatolva kapcsolódnak egymáshoz 4 fajta Activity Service Content Provider Broadcast Reciever Különböző szerep Önállóan aktiválódhatnak Más alkalmazás is hívhatja őket Manifest állományban vannak leírva 27
Activity Tipikusan egy képernyő, amin valamit lehet csinálni Sok ilyen alkot egy alkalmazást Lapozunk köztük Egymást hívogatják Tipikusan egy fő activityből mehetünk a többibe 28
Service Háttérben futó szolgáltatás Nincs felülete Zenelejátszó Hálózati állomány letöltő Activity Indíthatja Csatlakozhat hozzá 29
Content provider Tartalmat szolgáltat Fájl, SQLite, WEB, Perzisztens adattár Nyilvános, más alkalmazások is látják Telefonkönyv, SMSek, Hívási előzmények is így érhetőek el 30
Broadcast reciever Rendszer szintű eseményeket kapja el Bejövö hívás, alacsony töltöttség, Írhatunk sajátot, alkalmazás jelzi, ha elkészült valamivel Nincs UI Más alkalmazások kezelik le a jelzéseiket(elindulnak, kiírnak valamit) 31
Mire jó ez? Rendkívül rugalmas a komponensek halmaza miatt Egyik alkalmazás activity-je indíthat egy másikban levőt (Intent) Ha végeztünk, visszatérhetünk az eredetibe Felhasználónak egybefüggőnek tűnik Újrafelhasználhatóság fontos 32
Manifest XML alapú Alkalmazás leírása Komponensek paraméterei Követelmények Engedélyek internet, névjegy API minimum szint Hardware Szenzorok, kamera API Google Maps, Market, Facebook Telepítéskor kerül feldolgozásra Rendszer számára csak az itt levő dolgok léteznek 33
Erőforrások res mappa és azon belül speciálisan több más XML alapú felületek /res/layout Képek res/drawable Animációk res/anim Stílus res/values/styles.xml Szövegek - res/values/strings.xml Színek res/values/colors.xml Egyedi azonosítójuk van R.java állományba generálódnak Minősítőkkel készülékre szabható 34
Felhasználói felületek Legfontosabb UI, UX Lehetnek eltérések Számtalan eltérő készülék Gazdag beépített UI elemekben, de mi is készíthetünk újat Stílus, XML átírás Teljesen új View 35
Képernyőfelbontások Automatikus mechanizmus Könnyű programozni Erőforrás fájlokat kell definiálni Más layout telefonhoz, tablethez, órához Egy APK fájl, de akár minden készülék támogatható Sok probléma van vele így is 36
Képernyőfelbontások Fogalmak Fizikai képátló small, normal, large, extra large Pixelsűrűség dpi (dots per inch) ldpi, mdpi, tvhdpi, hdpi, xhdpi, xxhdpi Orientáció álló, fekvő (változó vagy rögzített) Felbontás px (nem használatos UI-nál) Sűrűség független felbontás virtuális dip = dp * (dpi / 160) Szükség van rájuk 37
Képernyőfelbontások 38
Erőforrások futás időben Lehetőség van más-más erőforrás használatára a méret és sűrűség függvényében Különböző layoutok, drawable Nem csak kijelző, akár nyelv is lehet minősítő Nincs szükség minden kombinációra, elég lehet 1 is res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png res/ layout/ layout.xml layout-small/ layout.xml layout-large/ layout.xml layout-xlarge-land/ layout.xml res/ values/ strings.xml values-en/ strings.xml values-fr/ strings.xml values-de/ strings.xml 39
Mit érünk el ezekkel? 40
Layoutok XML Drag&Drop vagy kézzel írjuk Gyakori elemek Linear-, Relative-, Frame-, TableLayout Grid-, Tab-, List-, Web-, Scroll- MapView Widgetek Button, ImageButton, DatePicker, EditText Felugró ablakok Toast, Alert-, ProgressDialog Lehet kódból is létrehozni felületet Hozzáadni XML-ben definiált blokkot 41
Térjünk vissza az Activitykhez Manifestben definiáljuk az indulásit Action - alkalmazás fő belépési pontja Category - jelenjen meg az indítható programok listájában 42
Activity életciklus Callback függvények Felül kell definiálni őket Ős osztálybeli metódusának meghívása super.oncreate super.onresume stb FONTOS: csak az onpause garantált Le kell kezelni az activity állapotának mentését és visszatöltését 43
Állapot mentés - visszatöltés 44
Activity indítása Intent segítségével action data extra startactivity(intent) Explicit vagy Implicit Explicit van címzett Implicit rendszer majd eldönti PendingIntent - időzítve 45
Alkalmazások stackje Back stack Activityk egymáson LIFO Vissza gomb innen vesz ki Több ilyen is lehet párhuzamosan - Multitask 46
Demo I. Készítsük el az első Alkalmazást Projekt felépítése Minimális layout Resource-ok Nézzük meg az életciklust Emulator Igazi készülék Logolás Eseménykezelés 47
Fragmentek Majdnem mint az Activityk Képernyő egy nagyobb részéért felelős objektumok Modulárisabban lehet építkezni, több ilyen is kihelyezhetünk egy felületre, de lehet csak egyet is (telefon/tablet) Fragment mindig Activityhez csatolt 48
Fragmentek 49
Fragmentek Dinamikus és statikus csatolás Kódból Fragmant manager kezeli őket XML <fragment> tag Hivatalos support library 1.6-ig ViewPager is fragmenteket használ 50
Listák ListView amely egy ListAdapter-t tartalmaz Ez tárolja és jeleníti meg a benne levő elemeket Hozzáadás, törlés, szerkesztés Értesíti az UI-t a változásról Ki lehet kényszeríteni 51
Adatkötés Adatok kivezetése az UI-ra Adapter kell hozzá, mely tárolja az objekumokat ListView, GridView, ExpandableListView, Ha nem ugyanolyanok az elemek ScrollView sok Viewval Általában saját adapter kell Minimális tudással is könnyű 52
Demo II. Fragment alapú alkalmazás Kezdő Fragment egy lista, ami betölt egy másik Fragmentet az adott tartalommal 53
Adattárolás Alkalmazás lelke Beállítások Adatok Cache Állapot Flag 54
Lehetőségek adattárolásra SharedPreferences Kulcs-érték Privát tár Csak az alkalmazás éri el (rootolt telefon) SD tár SQLite Hálózat 55
Shared Preferences Alaptípusok mentése hosszútávra OS elfedi a valós tárolást Private, World_readable, World_writable Több ilyen is lehet egy alkalmazásnak getsharedpreferences(string name, int mode) Preferences Framework XML alapú Beállításokhoz, PreferenceActivity 56
Fájlkezelés Internal storage Védett Jogosultság mint a SharedPrefnél Externak storage SD kártya, bárki által olvasható Lehet belső memóriában is Ha alkalmazáshoz kellenek akkor a res/raw mappába tegyük 57
SQLite Teljes értékű relációs adatbázis (MySQL) Nincs ORM Van SQL szintakszis Tranzakciók Prepared statement Kulcsok Fileokban tárolódik, lassú lehet 58
Hálózati tárolás Felhő Saját szerver Google cloud platform szintű támogatással 59
Service - érintőlegesen 2 típus Lehet egyszerre mindkettő is Indított Valamilyen komponens elindítja Fut a komponens után is Feladatot hajt végre majd leáll (OS nem fogja) Csak a hívó fér hozzá Kapcsolt Magától indul Kapcsolódásig fut hosszabb életű Többen is használhatják Nem kell leállítani 60
Service életciklus 61
Helymeghatározás Elvárt szolgáltatás Számtalan alkalmazás erre épül Helyfüggő szolgáltatások Módjai GPS Mobilhálózat GPS+Mobilhálózat A-GPS WLAN 62
Helymeghatározás Korlátok Pontosság Energiafogyasztás Szabadtér Google Location API Rendszerszintű DataProvider 63
Google Maps Térkép megjelenítése Teljes szabadság rajta Nagyítás Térkép/műhold Overlayek POI-k Egyéb vonalak, ábrák rajzolása Play Services SDK része 64
Hálózati kapcsolat Lehetőség van a WIFI és 3G kapcsolat kezelésére, ellenőrzésére Mire jó ez? Az alkalmazással tudunk a hálózathoz kapcsolódni, le- és feltölteni dolgokat. Socket TCP/UDP HTTP/HTTPS HttpURLConnection vagy HttpClient 65
HTTP lekérés Amíg letöltődik valami addig mi történik? Fagyás nem elfogadható az UI felületen Más szálban kell letöltenünk, hogy ne blokkoljuk a fő szálat Letöltés után az UI-t módosítjuk, DE Android csak fő szálból enged módosítani Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) Handler AsyncTask 66
Demo III. Hálózati kapcsolat, letöltés UI blokkolással Kijavítva AsyncTask segítségével Beállítások menü XMLből SharedPreferences beolvasás, írás 67
Hálózati kommunikáció Kedden volt róla szó XML JSON CSV Lehet saját is Rengeteg példa és könyvtár 68
Android GCM Értesítések (Facebook, Google) Ne a mobil kérdezzen, fordított irány Szerver oldali implementáció kell Ingyenesen lehet regisztrálni Rövid üzenetek(4kbyte) Sok meglévő szerver oldali implementáció 69
Értesítések Nem csak a hálózatról kaphatunk figyelmeztetést Alkalmazás is küldhet a notification bar-ra Status bar ikon Extended status bar info (és Intent indítás) LEDek villogtatása Vibrálás Hanglejátszás 70
Demo IV Notification alkalmazás 71
Mit csinálhatunk még? Multimédia Kamera Arcfelismerés Hangfelvétel Hanglejátszás MP3 lejátszás Video lejátszás Hangfelismerés TextToSpeech 72
Telefonhívások Bejövő, kimenő hívások kezelés Eseménykezelés Programozott hívás Intent segítségével Action_call Action_dial Saját tárcsázó Saját VoIP kliens 73
SMS kezelés 4.0 tól akár a teljes SMS alkalmazás lecserélhető Névjegyek, naptárbejegyzések, hívásnapló hozzáférhető Hogy érhetjük el őket? SMS-t telefónián keresztül Tableten nincs 74
Szenzorok Komplett arzenál Gyorsulásmérő Iránytű Fényerősség érzékelő Közelségérzékelő Giroszkóp Elforgatás Hőmérséklet Páratartalom Nyomés Lekérdezhetőek és rendszer szinten használhatóak 75
Szenzorok használata Mindig eseménykezelten Mérés után onchange metódus hívódik Óvatosan az erőforrással Állítsuk be a mérések gyakoriságát Állítsuk le mindig csak akkor mérjen amikor kell 76
Tesztelés Teszt keretrendszer JUnit Mit kell tesztelni? Felületet megjelenés, helyes interakciók Üzleti réteg funkciókat, amiket megvalósítottunk Akkuhasználat Orientáció, billentyűzet váltás 77
Tesztelésnél kibukó gyakori hibák NullPointer, ANR, SecurityError Felhasználó nem megfelelően használja nem a mi fejünkkel gondolkodik Fel kell készülni a nem rendeltetésszerű használatra is Külső szolgáltatás, komponens nem specifikusan működik, ezáltal a mi alkalmazásunk is váratlan hibát produkálhat 78
Memória és energia menedzsment Különösen fontos Nem korlátlan a kapacitás Akkumlátor gyorsan lemerül Memória max 20MB Egy nagyobb kép el tudja vinni GC van, nem mi irányítunk 79
Garbage Collector Nem azonnal szabadul fel Gyorsan lefut De! sok elem esetén belassulhat és akadhat az UI Optimalizálni kell Újrahasznosítás Static változók DDMS Memory Allocation Tracker 80
DDMS 81
Google Play Rengeteg hasznos szolgáltatás Felhasználói hitelesítés Alkalmazáson belüli fizetés Licenszelés Backup Statisztikák 82
Google developer console KÉP 83
Google developer console KÉP 84
Biztonsági kérdések Minden program saját felhasználóval Rootolás után hozzáférhetővé válik a rendszer /data/data/hu.csomag.nev Káros alkalmazások Engedélyeket figyelni kell Emelet díjas sms-ek, telefonhívások Adatokhoz hozzáférés Pl SMSben kapott 2 szintű azonosítás 85
Biztonsági kérdések Playen kívülről telepített alkalmazások Amazon Store, HTC Apps belefér Csomagtelepítés spoofolható Szétcsatolt folyamat Google távolról hozzáfér a telefonhoz Killswitch Storeba feltöltésnél automatikus ellenőrzés Fő kockázat a felhasználó 86
Élet a telefonon és tableten túl Smart Watch Google Tv Google Glass Autók Szinte bármi (hűtő, sütő, kenyérpirító) Mindenre rátehető és rá is teszik. 87
Ami mindenkit érdekel Hogyan fogunk úgy fürödni a pénzben, mint Dagobert bácsi? Erre kicsi az esély, inkább zsebpénz lesz 88
Mivel tudunk pénzt keresni Kód eladása megrendelőnek Kód licenszelése megrendelőnek Alkalmazás eladása felhasználónak Reklámok Alkalmazáson belüli vásárlás 89
Alkalmazás eladása Különböző Alkalmazás boltokon keresztül Apple App Store Google Play Windows Store Amazon App store 70% - a fejlesztőé általában 90
ios vs Android 91
Okok Android sokkal elterjedtebb a szegényebb országokban az olcsó készülékek miatt Akinek telik drága iphonera az az alkalmazást is megveszi Más a felhasználók magatartása 92
Reklámok Mindegyik platformnak van saját reklám APIja AdMob iad WP Advertising Vannak 3rd party által készítettek is TapJoy AdFonic 1000 megjelenés $0.5 - $1 Semmibe nem kerül, de nem is hoz sokat Idegesítő lehet 93
In-App Purchase Freemium model elterjedése Ingyenes alkalmazás Új funkciók Élet Játékpénz Reklám eltüntetése Jelenleg ez a legelterjedtebb Jól működik 94
In-App purchase Store-on keresztül vásárolunk Megbízható Gyors Egyszerű Ingyen ki tudja mindenki próbálni az alkalmazást, de kényelmi szolgáltatásokat adhatunk pénzért Pszichologiai okai is vannak 95
In-App purchase 2013 96
Fejlesztői licenszek Apple 1 évre $99 Szigorú ellenőrzés Publikálás is körülményes 100 eszköz, éves megújításnál törölhető belőle 97
Fejlesztői licenszek Google Egyszeri $25 Minimális ellenőrzés Publikálás nincs ellenőrízve Legszabadabb a fejlesztés Nincs eszköz limit 98
Fejlesztői licenszek Windows Phone 8 Évi $99 Szigorú ellenőrzés Google és Apple között valahol 3 eszköz, de cserélhető 99