|
Az android csomagjai.
Az androidhungary.com csapata kért meg rá, hogy írjak egy cikket az Android operációs rendszerek honosításának menetéről. Jelen cikk egy három részes sorozat első részeként az android apk-csomagjainak felépítését hivatott bemutatni. Vágjunk is bele!
Sokszor hallottam már, hogy semmi extra nincs az Androidban, hiszen ugyanúgy java csomagokból áll, mint a sima javás telefonokra telepíthető programok. Ez részben igaz, az Android javára épül, viszont nem csak egyszerű java platformról van szó, hiszen ott van mellette maga az Android platform. Az operációs rendszer felépítése a következő:
Linux kernel. Ez a nagyszerű rendszermag dobog az összes Android telefon szívében. A feladata, hogy összekösse a szoftvert a hardverrel, és kezelje az egyes eszközöket, pl.: kamera, g-szenzor, gps, stb.
Busybox. Ez a szoftver található meg általában az embedded linux eszközökön, pl.:routerekben, fényképezőgépekben, és mint azt példánk mutatja: telefonokban. A busybox egy kis hely- és erőforrásigényű shell alapú programgyűjtemény. Ez indítja el a telefon egyes funkcióit, mint pl. a Dalvik VM
Dalvik: Ez a szoftver már az Android csomag része, neki köszönhető, hogy platformfüggetlenül telepítgethetjük bármilyen Androidos készülékre a programjainkat. Nem más, mint egy virtuális gép, ami magát az androidot futtatja.
Framework: Az Android felahsználói felülete. A későbbiekben sok szó lesz róla.
Innen kezd érdekesebbé válni a dolog, mert eljutottunk arra a részre ahol az egyes alkalmazások futnak. Az Android alkalmazásai apk kiterjesztésű zip csomagokban vannak tárolva. Három helyen tárolódnak apk csomagok:
/system/framework/ - A framework egy részét is apk csomagok képzik, nevezetesen a framework-res.apk csomag. Ez nagyon fontos a rendszer számára, mivel alapvető adatokat tartalmaz a telefon felületének elrendezéséről, a felület grafikai elemeiről, az Android rendszer szöveges állományairól, az egyes ablakok/képernyők színezetéről, és még rengeteg dologról.
/system/app/ - Itt találhatóak a telefonra gyárilag feltelepített alkalmazások, mint például a Galéria, a Telefon, a Névjegyzék, stb.
/data/app/ - Itt pedig a marketből, vagy egyéb forrásból telepített alkalmazások kapnak helyet.
Az apk csomagok jelentik tehát mindazt, amit a kijelzőn láthatunk. A készülék minden képi, és szöveges eleme ezekben a csomagokban van meghatározva, tehát ha módosítani akarunk valamit, elég az apk-kat módosítani. Ennek két jól járható útja is van, az első az, ha megvannak az apk-k forrásai. Ez esetben könnyű dolgunk van, egyszerűen elhelyezhetjük a lokalizációnkat a csomagban, és azt lefordítva remélhetőleg egy már működő apk csomagot kapunk, amit használatba is vehetünk. Az esetek többségében viszont olyan apk-k fognak a kezeink közé kerülni, amik már módosításoakt tartalmaznak, vagy nem rendelkezünk a forrásával. Ez esetben jön képbe a másik út, ki kell bontanunk, és vissza kel fejtenünk a csomagot.
Ennek mibenlétét akkor láthatjuk át, ha jobban megismerjük a csomagokat. Mint azt már írtam, egyszerű zip állományokról van szó, tehát valamilyen archívum kezelővel meg is tudjuk nyitni a csomagokat.
Az apk-knak három nagyon fontos része van: az AndroidManifest.xml fájl, az src mappa és a res mappa.
AndroidManifest.xml: Ez az apk lelke. Ebben a fájlban vannak meghatározva az activity-k amik a program felületeit jelentik. Az apk csomagoknak rengeteg féle activityjük lehet, lehet indítható alkalmazás, widget, esetleg valamely rendszer menübe beépülő activity, lehet automatikusan induló, a háttérben futó alkalmazás, stb. Jó példa erre a Gallery.apk csomag, ami egyszerre tartalmazza a Galériát, a fényképezőt, a videórögzítőt, és a képkeret widgetet. Az AndroidManifest.xml fájlban határozható meg az is, hogy milyen engedélyekkel rendelkezzen a szóban forgó apk. Ez az a lista amit telepítéskor láthatunk, hogy mikhez fér hozzá az alkalmazás a telefonban.
Src mappa: Ezt a mappát nem láthatjuk, csak a forrásban. ha archívumkezelővel megnyitunk egy apk-t, classes.dex néven találhatunk benne egy fájlt. Ebbe a fájlba van belekódolva a teljes src mappa tartalma. Itt tárolódik a csomag java nyelvű utasításlistája, maguk a programok, amit a telefon futtat, ha elindítunk egy alkalmazást. Létezik mód a mappa visszafejtésére, de a lokalizációhoz nincs rá szükségünk.
Res mappa: Számunkra ez a legfontosabb része az apk-knak, itt tárolódik többek között az apk összes szövege, méghozzá nyelvenként külön-külön. a sorozat harmadik cikkje fog foglalkozni a res mappa működésével, tehát most nem fogom részletesen bemutatni az egyes állományokat. Fontos megemlíteni viszont, hogy archívumkezelővel kibontva itt sem fogunk több dolgot látni, mint a fájlok neveit, és a képeket. Az apk-k rengeteg xml fájlt tartalmaznak, viszont mindet titkosítva, így visszafejtés nélkül nincs lehetőségünk belenézni az állományokba, a tárolt mappák jelentős része nem is látszik, kódolva tartalmazza őket a resources.arsc fájl a csomag gyökerében.
Az utolsó mondatokkal rá is tértünk az apk fájlok védelmére. mivel a nem nyílt forrású csomagok a harmadik fél szellemi értékeit (az általa írt programot, grafikákat, stb.) tartlamazzák meg kell őket védeni a rossz szándékú felhasználástól. Ennek fényében a források nem, vagy csak részben visszafejthetőek, így nincs lehetőség a teljes forrás, vagy a forrás egyes részeinek máshol történő felhasználására. Aki kibontott egy apk-t az bizonyára felfigyelt a META-INF mappára. Itt tárolódik a csomag készítőjének aláírása, mert bizony minden egyes apk fájl egy egyedi kulccsal van hitelesítve, Ez a kulcs szavatolja az apk védelmét módosításokkal szemben. ha egy bit is megváltozik, az apk-t futtató környezet észlelni fogja, hogy érvénytelenül aláírt elamek vannak a csomagban, és visszautasítja azt, tehát az apk nem lesz működőképes. Megtehetjük azt, hogy generálunk saját kulcsot, amivel újra aláírjuk a csomagot, de az a csomag már nem a kiadó saját hitelesítését fogja hordozni, így nyílvánvalóvá válik a felhasználó előtt, hogy nem hivatalos, nem eredeti kiadású csomagot használ. Ezek a védelmi eljárások rányomhatnák a "FAIL" feliratú bélyeget a honosításokra, de szerencsére létezik egy mód, amivel a módosított csomagokat használatba vehetjük a telefonon: ha nem hivatalos romokra készítünk nem hivatalos update csomagokat.
Ahogy az egyes apk-knál, úgy a készülékek operációs rendszerét is védi egy kulcs, ennek eredményeként csak az operációs rendszer készítője által kiadott kulccsal aláírt frissítő csomagokat fogja elfogadni a recovery. Itt jön képbe a root. Akinek nem probléma a garancia vesztés, megteheti, hogy feloldja a telefonján a külső behatások ellen védő eljárásokat, rendszergazda jogokkal férhet hozzá a telefonon futó busyboxhoz, vagy más recoveryt telepíthet a készülékre, vagy valamelyik harmadik féltől származó szoftvert telepíthet a gyári rom helyére. Innentől kezdve, mivel a telefon már nem garanciális, megkezdhetjük a kedvenc romunk magyarítását. Az első lépés, hogy a rom csomagjából, ami ugyancsak egy zip ki kell bontanunk az apk-kat, vissza kell fejtenünk, és lokalizálnunk őket.
A következő cikk a csomagok kibontásával, újraépítésével, és aláírásával fog foglalkozni... |