Szükséges eszközök
- Legalább JAVA 6 vagy frissebb, abból is a JDK változat. A JRE változat nem elegendő.
Kell egy development IDE. Több alkalmazás mondja magáról, hogy erre a legjobb. Az ingyenesek közül például a NetBeans vagy az Eclipse, de a Google saját favoritja a Android Development platform (Intelij alapú) csomag talán a legjobb. Nem részletezem, hogy miért. A fizetősek közül a Zend Stúdió 10-et és az újabbakat lehet használni Android fejlesztésre. Én a Google Android platformját használom.
- Kellhet egy igazi, esetleg rootolt Androidos okostelefon, ami nem baj ha sok memóriával, nagy háttértárral rendelkezik.
- Ha profi fejlesztőként a Google felhőbe, a Google Play-be szeretnénk feltölteni az alkalmazásainkat, akkor egyszer ki kell fizetnünk $25 regisztrációs díjat és a Google accountunkkal kapcsolódni hozzá. Innentől tudunk olyan alkalmazásokat fejleszteni, amelyet a Google Playről le tudunk telepíteni egy telefonra.
- Kell egy kis JAVA tudás, mert az Androidos felületek natív programozási nyelve a JAVA.
Az Android rendszer felépítése, rétegei
Az Android rendszer egy speciális operációs rendszer, amely egyfajta Linux kernelre épülő réteges rendszer. Monolitikus, azaz nem futás közben töltődnek be a részei, hanem a rendszer indulásakor minden része betöltődik.
- A rendszer legalsó rétege egy Linux kernel, amely felel általában a különböző hardver szintű kezelésért (memória, elektromos fogyasztás, folyamatok ütemezése, stb.) és ezen a szinten találhatók a különböző driverek is. egy"mezei" felhasználó ezen a szinten nemigen programozik.
- A következő szinten találhatók a rendszer részét képező szolgáltatás könyvtárak, programkönyvtárak, mint például SSL, SQLite, OpenGL/ES, WebKit, stb. Ezeket C/C++ nyelven fejlesztették ki.
- Erre a rétegre épül az Android program futtató környezete, a Dalvik virtuális gép (Dalvik VM), amelynek a feladata az Androidra készített programok biztonságos futtatása. Ez hasonlít a PC-ken megszokott Java Virtual Machine = JVM szerepéhez. A Dalvik a JVM újratervezett, átdolgozott optimalizált verziója.
A Dalvik tulajdonságai
A dalvik és a JVM nem kompatibilis egymással, azaz az egyikre fordított alkalmazás nem fut a másikon.
Új utasításkészlete van
A Java programok nem egy-egy .class fájlba fordulnak, hanem Dalvik Executable formátumba, amelynek .dex a kiterjesztése és kisebb, mint a .class fájlok mérete.
A Java itt csak, mint programozási nyelv jelenik meg.
Ez a Java sokféle szempontból nem az a Java!
A Dalvik gépen a kód felügyelt módban fut, tehát engedély nélkül nem éri el a virtuális gépen kívüli világot.
A Dalvik a memóriakezelést szemétszedő algoritmussal oldja meg (garbage collector - gc), de mivel kevés a telefonokon a memória, ezért nem szabad memóriapazarló alkalmazásokat írni.
A Dalvik felett találhatók a JAVA nyelven írt alkalmazási keretrendszer - Application Framework - egységei és az Androidos rendszerre írt rendszer alkalmazások. Az Application Framework segítségével lehet felhasználói alkalmazásokat írni, az Androidos rendszer alkalmazásai pedig felhasználói alkalmazások.
Az Android alkalmazásokhoz használt terminológia
Az androidos alkalmazások neve Application, röviden app.
A hagyományos alkalmazások jellemző tulajdonságai. végrehajtanak feladatokat ( task = feladat, programszál ), információt jelenítenek meg a képernyőn és adatokkal dolgoznak. Ezeket általában függvényekkel oldják meg, esetleg osztályokkal. A programozók általában ezeket programozási egységeknek, esetleg programozási blokkoknak hívják.
Az androidos alkalmazások olyan környezetben futnak, ahol az erőforrások szűkösek, kevés memória, nem túl gyors processzor és kicsi háttértár áll rendelkezésre. Ennek megfelelően az App-ok életciklusa is kissé más, mint a hagyományos gépeken. Az Android alkalmazások programozási blokkjai az alábbiak:
Context: Olyan programozási blokk, amely központi szerepet foglal el egy App esetén. Lényegében az App minden része hivatkozhat rá, elérheti. Ezen keresztül lehet elérni rendszer erőforrásokat. A Context osztály (class) android.content.Context. Az osztály példányosítása esetén Context objektumot kapunk, amely egy Application objetum kiterjesztése.
Activity (Tevékenység): Az Android platformon a taskok (= feladatok) neve az Activity. Az Activity olass (android. app.Activity) valósítja meg. Az Androidos alkalmazások általában több tevékenységből állnak. Tipikusan egy Activity-hez tartozik egy képernyő is. Az Activity-k leszármazottjai a Context osztálynak is, így minden funkcióval rendelkezik, amivel a Context class. Lényegében egyfajta alkalmazás szintű globális névtér.
Fragment: Az újabb Android verziókban egy képernyő tartalmat több egymástól részben független folyamat is létrehozhat. Ezeket a folyamatokat az Activity-k indíthatják el. Ezek lesznek a Fragment-ek, amelyek egy Activity-hez tartoznak, egy képernyő részének tartalmát állítják elő. A Fragment class (android.app.Fragment) gyakran úgy tervezik meg, ami az Activityk felhasználói élményét növeli meg. (méret, a képernyő tartása, stb...) .
Intent (szándék, kérés): Az Android aszinkron üzenetküldő mechanizmusa, amellyel taskok kérnek szolgáltatást egy Activity-től. Minden kérés egy szándék-ba van csomagolva. Úgy is érthetjük, hogy minden kérés egy olyan üzenet, amely valaminek elvégzését kér. Az Intent class (andorid.content.Intent) az elsődleges módszer arra, hogy alkalmazások összetecői - activity-k vagy szolgáltatások kommunikáljanak egymással.
Service (Szolgáltatás): Szolgáltatás az olyan komponens, amelynek nincsen felhasználói interface-e. Ezek például háttérben folyamatosan futó, vagy az időnként elinduló alkalmazások, folyamatok (időzített kérések stb.) Az Tevékenységek előtérben futnak és van felhasználói interface-ük, aszervízek a háttérben futnak. A Service class (android.app.Service) a Context kiterjesztése.
Application Context
Az Application Context az alkalmazásban a legmagasabb szintű funkcionalitás központi helyszíne. A Context osztály segítségévelezzel tudunk az alkalmazás minden részén elérhető adatokat használni, műveleteket végezni. Ennek segítségével lehet különböző Activity-ken átnyúló szolgáltatásokat definiálni.
Az Activity és Service osztályokban lévő getApplicationContext() metódussal tudjuk a Context objektumot létrehozni.
Ha létrejött az objektum, utána ezt az alábbiakra tudjuk használni:
- Alkalmazás erőforrások használat (képek, stringek, grafikák)
- az alkalmazás beállítási adatainak elérése
- Az alkalmazás saját fájljainak és könyvtárainak elérése
- Nem lefordított alkalmazás részek elérése
- Rendszerszintű szolgáltatások elérése
- Saját SQLite adatbázisok elérése
- Alkalmazás jogok kezelése (permission)
Alkalmazás erőforrások elérése (Resources) a Context objektum segítsgével
A getResource() metódussal tudjuk elérni az alkalmazás erőforrásait az erőforrás azonosító segítségével. Pl. legyen az R.java nevű osztály az azonosítók automatikusan generált osztálya. Ekkor egy stringet így érünk el:
String udvozlet = getresources().getString(R.string.hello);
Az alkalmazás megosztott paramétereinek elérése a Context objektum
Az alkalmazás beállításainak, jelenlegi állapotának adatait a getSharedPreferencies() metódussal tudjuk elérni.
Fájlok, könyvtárak elérése
Később írok róla.
Az alkalmazás Assets elérése
Az alkalmazás nem lefordított erőforrásait a getAssets() metódussal tudjuk elérni. Ez visszatér az AssetManager egy példányával (android.content.res.AssetManager) és megnyithatjuk az eszközt a neve segítségével.