Ezen a blogon célkitűzésként a Middleware téma körüli bejegyzések szerepelnek, melyek közül első látásra kicsit kilóghat a mobil platformokra való fejlesztés. Minden Middleware komponensnek azonban kapcsolata lehet (és van) egy megjelenítő felülettel, melyen a végfelhasználó az előállított adatokat el tudja érni.
A mobil operációs rendszerek családjának egyik legmeghatározóbb tagja az Android OS. A platform fejlesztője az Open Handset Alliance, melynek több más IT gyártó mellett a Google is tagja. Népszerűsége mind mobiltelefonok, mind tabletek vonatkozásában vitathatatlan és folyamatosan nő: míg 2010 júniusában hozzávetőlegesen 160.000 androidos készüléket aktiváltak naponta, addig ez a szám 2011 júniusára 500.000-re nőtt.
Két részes bevezető jellegű sorozatunkban áttekintjük a platform legfőbb jellegzetességeit elsősorban alkalmazásfejlesztői szempontból. A sorozat nem kíván átfogó és minden részletre kiterjedő Android referenciává válni, sokkal inkább egy olyan „induló tudás” átadása a cél, mely birtokában egyszerűen elkezdhető a szoftverfejlesztés e platformra. Vágjunk is bele!
Az operációs rendszer magja egy nyílt Linux kernel, az alkalmazások futtatása pedig a Dalvik virtuális gép segítségével történik. Ez egy olyan módosított és mobilkészülékekre optimalizált Java virtuális gép, melyet speciálisan arra terveztek és fejlesztettek, hogy párhuzamosan több példány is futhasson belőle. Megjegyzendő, hogy bár Java virtuális gépről beszélünk, standard Java alkalmazások nem futtathatók a rendszeren, a Dalvik ugyanis speciális bájtkódot használ. A következő ábra áttekintő jelleggel bemutatja a rendszer architektúráját a főbb komponensekkel.
Forrás: http://developer.android.com/guide/basics/what-is-android.html
Mint az már említésre került, a rendszer Linux kernelre épül, annak is a 2.6-os verziójára. A kernel szolgáltatásait felhasználva számos C/C++ nyelvű osztálykönyvtár nyújt magasabb szintű szolgáltatásokat a felsőbb rétegeknek. Az ábrán „Core Libraries”-ként feltüntetett könyvtárak már Java osztálykönyvtárakat jelölnek: ezek a „hagyományos” Java platform legalapvetőbb könyvtárainak megvalósításai. Alkalmazásfejlesztői szempontból az architektúra „Application Framework” rétege a legfontosabb, hiszen fejlesztés során ez a réteg fedi el előlünk az alacsonyabb szintű szolgáltatásokat és funkcionalitásokat. Lényeges, hogy fejlesztés során ugyanazt a keretrendszert és ugyanazokat az API-kat használhatjuk, mint amik a „beépített” alkalmazások számára is elérhetők. Ez a magyarázata annak, hogy Android esetében bármely gyári alkalmazás (pl. telefon/SMS/ébresztő alkalmazás) szabadon lecserélhető tetszőleges másik, azonos funkcionalitást biztosító szoftverre.
Az egyes alkalmazások – legyen szó gyári vagy később telepített alkalmazásról – saját folyamaton (processzen) belül, saját felhasználó nevében futnak. Minden alkalmazáshoz tartozik ugyanis egy egyedi felhasználó (linuxos userid), mely automatikusan létrejön a telepítése során. Fontos, hogy az egyes alkalmazásoknak nincs jogosultsága más alkalmazások fájljait elérni. Az alkalmazások közötti adatmegosztásra ugyanakkor van más lehetőség, erről a későbbiekben még lesz szó.
A platform bevezető jellegű megismerése után most tekintsük át a lehetőségeket „fejlesztői szemüvegen” keresztül. Az Android SDK – mely természetesen ingyenes – a fejlesztéshez szükséges API-kat és eszközöket fogja össze. A fejlesztés Java nyelven történik, az ajánlott fejlesztői környezet pedig az Eclipse. Az Eclipse IDE-hez rendelkezésre áll ugyanis az Android Development Tools (ADT) plugin, mely nagyban megkönnyíti az alkalmazások megvalósítását, fordítását, telepítését és debuggolását. Támogatott az eszközön való debuggolás is (on-device debug), mely során az alkalmazásunk mobilkészüléken fut, miközben a debug funkciók használhatók a fejlesztőeszközben. Az SDK része egy jól konfigurálható emulátor is, mellyel különböző Android verziójú, különböző méretű kijelzővel rendelkező készülékek emulálhatók. Ahogy az más mobilplatformok esetén is elmondható, úgy Androidnál sem helyettesíthető a készüléken való tesztelés az emulátoros teszteléssel, de mindenképp meggyorsítja a fejlesztést. A következő ábrán az emulátoron futó Google Maps alkalmazást szemlélteti.
Android platformra történő fejlesztés során különböző típusú komponensekből építjük fel alkalmazásunkat. Az egyes komponensek eltérőek többek között futtatásuk módja és a rendszerrel való interakciójuk szempontjából. Bár különálló alkotóelemekként tekinthetünk rájuk, természetesen képesek kommunikálni egymással. Négy fő komponens típust különböztetünk meg az alábbiak szerint.
- Activity: egy adott, felhasználó által végzett tevékenység elvégzését teszi lehetővé általában egyetlen képernyő megjelenítésével és a kapcsolódó funkcionalitás megvalósításával. Pl. egy levelező szoftver esetén külön activity valósíthatja meg a levelek listájának megjelenítését, egy adott levél tartalmának megjelenítését és új levél írását. A példából is érzékelhető: az activity-k nem különálló szigeteket alkotnak, közöttük információkat kell tudni átadni. Pl. a levéllistázó activity-nek át kell adnia a kiválasztott e-mailt a levél tartalmát megjelenítő activity-nek, miután a felhasználó kiválasztott egy e-mailt olvasásra. Fejlesztői szempontból ez a legalapvetőbb komponens típus, minden alkalmazásban található legalább egy activity.
- Service: szolgáltatás alatt háttérben futó, általában hosszan futó funkcionalitást értünk Android esetén. Felhasználói felülettel nem rendelkezik, egy másik komponens, pl. egy activity indíthatja. Példaként hozhatók a zenelejátszók, melyek esetén a lejátszást szolgáltatásként szokás megvalósítani, hiszen tipikusan hosszan fut és a felhasználó közben más alkalmazásokat is használhat.
- Content providers: ahogy az korábban már említésre került, az egyes alkalmazások nem érik el más alkalmazások fájljait. A content providerek segítségével mégis lehetővé válik, hogy egy alkalmazás egy másik alkalmazás által kezelt adatokat lekérdezhessen, vagy akár módosíthasson. Pl., ha olyan alkalmazást készítünk, melyhez szükségünk van a felhasználó névjegykártyáira (contactjaira), elkérhetjük azokat a megfelelő content providertől. Lehetőségünk van ugyanakkor saját providerek megvalósítására is, ha más alkalmazások számára elérhetővé akarjuk tenni az alkalmazásunk által kezelt adatokat, vagy azok egy részét.
- Broadcast receiver: különböző rendszereseményekről (pl. elforgatták a készüléket (orientációváltás), alacsony az akku töltöttség, stb.) értesülhetünk broadcast receiverek segítségével. Felhasználói felülettel nem rendelkeznek, de megjeleníthetnek értesítéseket a status baron (notification formájában).
Mindig az aktuális feladat, a megvalósítandó követelmények függvénye, hogy milyen típusú komponensekből kell felépítenünk alkalmazásunkat. Általánosságban elmondható, hogy kezdő Android fejlesztőknek először az activity-ket célszerű jobban megismerniük. Részletes leírás az egyes komponensekről erről az oldalról kiindulva érhető el.
A platform nyíltságának köszönhetően számos érdekes megoldás válik lehetővé mobilalkalmazások fejlesztése során a fenti komponens típusok kapcsán. Alkalmazáson belül természetes, hogy a különböző komponensek „váltogatják” egymást, ahogy a felhasználó különböző műveleteket végez. Lehetőség van azonban arra is, hogy más alkalmazások egy-egy konkrét komponensét aktiváljuk alkalmazásunkon belülről. Így pl. ha szoftverünkben szeretnénk e-mail küldési lehetőséget biztosítani, de nem akarjuk megvalósítani az ehhez szükséges funkcionalitást és felhasználói felületet, aktiválhatjuk a telefonon megtalálható e-mail alkalmazás (pl. a gyári GMail) új üzenet küldő komponensét, amikor a felhasználó e-mail írását kezdeményezi. A rendszer ekkor elindítja a levelezőszoftver processzét (ha az még nem fut) és aktiválja az adott komponenst. Miután a felhasználó megírta és elküldte levelét, a saját alkalmazásunk folytatja futását. Lehetőség van adatok átadására is mindkét irányban: a fenti példánál maradva átadható az idegen alkalmazás komponensének a címzett e-mail címe, az idegen alkalmazás komponense pedig futása végén visszaadhat alkalmazásunknak valamilyen státuszinformációt.
Mint az a fenti bevezető jellegű leírásból is érzékelhető, egy összetett és lehetőségek igen széles körét kínáló platformmal találja magát szemben az a fejlesztő, aki Android alkalmazások készítésére adja a fejét. A következő részben áttekintjük a fejlesztés elkezdéséhez szükséges további alapismereteket, valamint gyakorlati szempontból is betekintünk a sajátosságokba.
Győrffy Csaba