Android

Bevezetés

Az Android egy mobil eszközökkel kapcsolatos fogalom. Magában foglal egy operációs rendszert, egy köztes réteget és néhány fontos alkalmazást. Az Android SDK biztosítja az eszközöket és az API-kat, amelyek szükségesek az Android platformra való, Java nyelven történő fejlesztéshez.

Android architektúra

A következő ábra az Android operációs rendszer főbb komponenseit szemlélteti.

Alkalmazások (Applications)

Az Android gyárilag tartalmaz néhány központi alkalmazást, mint például email kliens, SMS program, naptár, térképek, böngésző, telefonkönyv, stb. Ezek az alkalmazások mind Java nyelven íródtak.

Alkalmazások keretrendszere (Application Framework)

Az Android egy nyílt fejlesztői platformot nyújt, ezáltal a fejlesztők egy gazdag eszköztárat kapnak az alkalmazásaik készítéséhez. Kihasználhatják a hardver adta lehetőségeket, hozzáférhetnek helyi információkhoz, futtathatnak háttérszolgáltatásokat, figyelmeztetéseket és értesítéseket helyezhetnek a státussorba és még sorolhatnám. A fejlesztők teljes hozzáférést kapnak ugyanahhoz a keretrendszerhez, mint amit a központi alkalmazások is használnak.

Könyvtárak (Libraries)

Az Android tartlamaz egy sor C/C++ könyvtárat. Ezek a könyvtárak az alkalmazások keretrendszerén keresztül érhetők el. Néhány fontosabb könyvtár:

Futási idő (Android Runtime)

Az Android egy sor központi könyvtárt tartalmaz, amelyek biztosítják a Java nyelv főbb könyvtárai funkcionalitásának elérhetőségét. Minden Android alkalmazás egy külön folyamatként fut, a saját Dalvik virtual machine példányával. A Dalvik virtual machine-t úgy készítették el, hogy egy eszköz több VM-t is képes legyen hatékonyan futtatni. A virtuális gépről később részletesebben is szó lesz.

Linux Kernel

Az Android a központi rendszerszolgáltatások, mint például biztonság, memóriakezelés, folyamatkezelés, driver model megvalósítására Linux 2.6-os rendszerre támaszkodik. A kernel is egy a hardver és a többi szoftverelem közötti absztrakciós réteg szerepét tölti be.

Egy Android alkalmazás szerkezete

Egy alkalmazás élete

Az Android alkalmazások Java nyelvek íródnak. Az SDK eszközök egy tömörített .apk (Android package) fájlba fordítják a kódot. Ezt a fájlt lehet telepíteni egy Androidot futtató eszközre. A telepített alkalmazások a saját sandboxukban léteznek. Az Android operációs rendszer többfelhasználós Linux rendszer, amiben minden alkalmazás külön felhasználónak számít, minden alkalmazáshoz tartozik egy egyedi felhasználói ID. Emellett minden folyamat saját virtuális géppel rendelkezik, így az alkalmazás kódja elkülönülve fut a többi alkalmazástól. Alapértelmezésben minden alkalmazás saját Linux folyamatként fut, ami akkor indul el, amikor bármelyik komponensét az alkalmazásnak futtatni kell és akkor ér véget, ha nincs rá többé szükség, vagy a rendszernek fel kell szabadítania a memóriáját más alkalmazások részére. Így egy alkalmazás csak a hozzá szükséges komponensekhez fér hozzá, ezáltal egy nagyon biztonságos környezetet teremt, ahol az egyes alkalmazások nem férhetnek hozzá a rendszer részeihez, csak amelyekhez engedélyük van. Erre az alkalmazásnak külön engedélyt kell kérni. Ilyen engedélyeket kell kérni pl. a felhasználó telefonkönyvéhez, az SMSekhez, az SD kártyához, a Bluetooth-hoz, a kamerához stb. Ezeket az engedélyeket a felhasználó biztosíthatja telepítéskor.

Alkalmazások komponensei

Most, hogy már átlátjuk az alapjait, hogy hogyan működik egy alkalmazás a rendszerben, nézzük meg, milyen komponensekből épül fel.

A komponensek az alkalmazások építőkövei. Minden komponens egy különálló pont, amin keresztül a rendszer elérheti az alkalmazást. Némely komponens persze nem belépési pont a felhasználó számára, némelyek egymástól függnek, de mindegyik egy külön entitás, amelyik meghatározott szerepet játszik az alkalmazás életében.

Négy különböző típusát különböztethetjük meg egy alkalmazás komponenseinek.Minden komponenstípus különböző célt szolgál, valamint különböző életciklussal rendelkeznek, ami meghatározza, hogyan jön létre és szűnik meg a komponens.

Ez a négy típus a következő:

Egyedi nézőpontja az Android rendszernek, hogy bármelyik alkalmazás elindíthatja egy másik alkalmazás egy komponensét. Ehhez nem kell ismerni a másik alkalmazást, nem kell azt linkelni sem, csak egyszerűen meghívni a komponensét.

Amikor a rendszer elindít egy komponens, elindítja az alkalmazáshoz tartozó folyamatot is (ha az még nem fut) és inicializálja a komponenshez szükséges osztályokat. Így a komponens nem a saját alkalmazásunk folyamataként fog futni, hanem a saját alkalmazásának folyamataként. Ezek alapján az Android alkalmazásoknak nincs egyértelmű belépési pontja, mint más rendszereken futó alkalmazások esetén (nincs pl. main() függvény).

Mivel a rendszerben minden alkalmazás külön folyamatként fut külön engedélyekkel amelyek tiltják más alkalmazásoknak a hozzáférést a fájljaihoz, ezért egy alkalmazásból nem tudjuk közvetlenül elindítani egy komponensét egy másik alkalmazásnak. Azt csak a rendszer tudja megtenni. Ezért ehhez küldeni kell egy üzenetet a rendszernek, ami leírja az intentet egy komponens elindítására és a rendszer elindítja nekünk ezt a komponenst. Az intentekről később részletesebben is szó esik.

Komponens aktiválása

Három komponens a négyből (activity, service, broadcast receiver) aszinkron üzenetek segítségével aktivizálódik. Ezeket az üzeneteket hívjuk intentnek. Az intentek futási időben összekötik a különálló komponenseket. Ezáltal megállapítható, hogy melyik komponens melyik alkalmazáshoz tartozik.

Egy intentet egy Intent objektum valósít meg, amely definiál egy üzenetet vagy egy megadott komponens, vagy egy megadott típusú komponens indítására.

A content provider indítása nem intentek segítségével történik. Ez akkor aktiválódik, mikor egy kérés érkezik a ContentResolver felől. A content recolver kezeli az összes tranzakciót a content providerrel, így a komponensnek amelyiknek szüksége van valamilyen adatra a content providertől, nem kell közvetlenül a content providerrel kommunikálnia, elég a ContentResolver egy objektumának metódusait meghívnia. Ez egy rétegelt absztrakcióhoz vezet, ami nagyobb biztoságot ad.

A komponensek indítására több metódus is rendelkezésre áll, ezekről bővebben a Keretrendszer megfelelő pontjaiban lesz szó.

A forrás szerkezete

Egy Android alkalmazás forrása alapvetően a Javahoz hasonlóan csomagokba szervezett Java forrásfájlokból (src mappa), erőforrásfájlokból (res mappa), illetve az alkalmazás forrásának, az alkalmazásnak a lelkét képező AndroidManifest.xml fájlból állnak.

Az erőforrásfájlok többfélék lehetnek, a különböző típusú erőforrások különböző könyvtárba kell, hogy kerüljene a res-en belül. Ezek közül a legfontosabbak:

Részletesebb leírásuk a Resources menüpont alatt található.

Minen alkalmazásnak rendelkezni kell ezeken felül egy AndroidManifest.xml fájllal a gyökér könyvtárban. Az Android rendszernek szolgáltat bizonyos információkat az alkalmazásról, amelyeket a rendszernek ismernie kell, mielőtt az alkalmazás bármely részét futtatnánk. Részletes leírása az AndroidManifest.xml menüpont alatt található.