Siirry sisältöön

Android arkkitehtuuri

Wikiopistosta



Android perustuu avoimeen lähdekoodiin. Avoimuus mahdollistaa jatkuvasti kehittyvän ja laajan uusien huipputeknologioiden hyödyntämisen sekä henkilökohtaisten mieltymysten mukaisen käyttäjäkokemuksen.[1] Androidin arkkitehtuurissa on kuusi peruskomponenttia: Sovelluskerros (Applications), sovelluskehys (Application Framework), natiivikirjastot (Libraries), Android Runtime, abstraktiokerros (Hardware Abstraction Layer) sekä Linux -ydin (Linux Kernel).[2]

Androidin kehitys

[muokkaa]

Andy Rubin, Chris White, Nick Sears ja Rich Miner perustivat Android Inc. -yhtiön Lokakuussa 2003 kehittääkseen käyttäjän mieltymykset ja tilin paikkatiedon huomiovan mobiililaitteen. Google osti Android Inc. -yhtiön Elokuussa 2005. Vuodesta 2007 Androidia on kehittänyt Open Handset Alliance[3], ryhmä matkapuhelin- ja teknologiajohtajia, jotka ovat sitoutuneet avoimeen mobiiliekosysteemiin.[4] Android -käyttöjärjestelmä kehittyy jatkuvasti. Jokaisella versiolla korjataan virheitä ja otetaan käyttöön uusia ominaisuuksia. Android-ekosysteemi on laajentunut älypuhelimista taulutietokoneisiin, televisioihin, puettaviin älylaitteisiin, autoihin sekä Internet of Things (IoT)-laitteisiin. [5][6]

Android arkkitehtuurin peruskomponentit[2] Komponentissa käytettävä ohjelmointikieli
Sovelluskerros Java, C/C++ (Go, Kotlin)
Sovelluskehys Java
Natiivikirjastot C/C++
Android Runtime Java/Kotlin (natiivikoodi), Dex-tavukoodi
Abstraktiokerros Java, C/C++
Linux-ydin C

Sovelluskerros (Applications)

[muokkaa]

Sovelluskerros sisältää laitteen toiminnallisuutta laajentavia ohjelmia eli sovelluksia. Sovellukset on kirjoitettu Android software development kitin (SDK) avulla, ja ne käyttävät yleensä Java ohjelmointikieltä, jonka lisäksi on voitu käyttää C ja C++ kieliä. Android tukee myös Go ja Kotlin ohjelmointikieliä. Javalla kirjoitetut ohjelmat vaativat Android Runtime kerroksella sijaitsevan Java Virtual Machine ohjelman, jonka avulla ART/Dalvik pystyy kääntämään koodin Androidissa toimivaksi sovellukseksi.[7] [8]

Sovelluskerroksella on joukko valmiiksi asennettuja sovelluksia, joista osa on puhelimen perusominaisuuksia, kuten tekstiviestit, yhteystiedot, puhelin, web-selain, kamera ja kartat. Sovelluksia voidaan lisäksi ladata laitteelle Internetistä APK:n (Android application package) avulla tai sovelluskaupasta (Google Play). Sovelluskaupassa voi selata, ladata, päivittää ja poistaa sovelluksia. Kolmannen osapuolen sovelluskaupat, kuten Amazon Appstore, tarjoavat myös sovelluksia, jotka eivät täytä kaikkia Google Playn vaatimuksia.[9] Google Playssa on Syyskuun 2018 tiedon mukaan noin 2,6 miljoonaa sovellusta.[10]

Sovelluskehys (Application Framework)

[muokkaa]

Sovelluskehys tarjoaa Java-luokkien muodossa palveluita, joita sovellusten kehittäjät voivat käyttää omissa sovelluksissaan. Android-sovelluskehyksen keskeisiin palveluihin kuuluu sisällön tarjonnan lisäksi mm. paikannuksen, pakkauksen, ilmoitusten, resurssien, aktiviteettien, näytön ja puhelimen hallinta.[2]

Ilmoitusten hallinta hallinnoi sovellusten käyttäjälle näyttämiä ilmoituksia. Resurssien hallinnan kautta sovelluksilla on pääsy koodiin sisällyttämättömiin resursseihin, kuten väriasetuksiin, lokalisoituihin merkkijonoihin ja käyttöliittymän asetuksiin. Aktiviteettien eli toimintojen hallinta ohjaa sovellusten käyttöä ja toimintojen pinoa (ns. Takaisin-navigointi). Näytön hallintaa käytetään sovellusten käyttöliittymien luomiseen. Puhelimen hallinnan metodeilla sovellukset voivat hyödyntää esimerkiksi puhelimen tiloja ja tiettyjä liittymätietoja. Pakettien hallinta noutaa laitteeseen jo asennettuihin sovelluspaketteihin liittyviä tietoja. Paikannuksen toiminnot liittyvät sijainnin hallintaan. [2]

Natiivikirjastot (Libraries)

[muokkaa]

Androidin natiivikirjastoissa käytetään C/C++ -ohjelmointikieliä.[11] Kirjastot sisältävät laajan ja monipuolisen toimintovalikoiman, kuten 2D- ja 3D-grafiikan hallinnan, salausprotokollaviestinnän, SQLite-tietokantahallinnan, ääni- ja videotoiston, bittikartat ja vektorifonttien esittämisen sekä Libc-järjestelmäkirjaston toteutuksen. Natiivikirjastot toimivat yhteistyössä Android Runtimen Java-kielisten ydinkirjastojen kanssa. Käytännössä natiivikirjastoja käytetään ydinkirjastojen API-sovellusten kautta. Java -ydinkirjastosta viitataan annetun tehtävän mukaisesti tarvittavaan natiivikirjastoon, joka suorittaa toiminnon yhteistyössä Linux-ytimen kanssa. Esimerkiksi 3D -grafiikan näyttämiseksi käsky menee OpenGL -ydinkirjastosta OpenGL ES -natiivikirjastolle, joka työskentelee Linux-ytimen kanssa työn suorittamiseksi näytöllä.[12]

Keskeisiä C/C++ natiivikirjastoja Tehtävä
WebKit Avoimeen lähdekoodiin perustuva verkkoselaimen moottori. [13]
OpenMAX AL Multimedian käsittely.[14]
Mediakehys Äänen ja videon prosessointi ja toisto sovelluksista, erillisistä tiedostoista tai verkkoyhteyden kautta.[11] [15]
OpenGL ES Äänentoiston ja grafiikan käsittely.[16][12]

Suoraan Androidin natiivikirjastoihin pääsemiseen tarvitaan natiivikehityksen ohjelmatyökalua (Native Development Kit NDK), jolla käsitellään C ja C++ -ohjelmointikieliä.[12]Androidin DNK tarjoaa joukon alkuperäisotsikoita ja jaettuja kirjastotiedostoja, jotka ovat vähitellen lisääntyneet uusien Android API-tasojen julkaisujen yhteydessä.[17] API-taso tarkoittaa kokonaislukua, joka yksilöi kulloisenkin Android-alustan version ja järjestelmän puitteet vuorovaikutukselle. Tasojen lisääntyessä rajapintaa laajennetaan uusilla toiminnoilla, säilyttäen samalla vanhat tasot aiempien versioiden yhteensopivuuden ja toimivuuden varmistamiseksi.[18]


Android Runtime

[muokkaa]

Android Runtime on ohjelmistokerros sovellusten ja käyttöjärjestelmän välillä. Kerros sisältää ART -virtuaalikoneen (Android 5.0 version jälkeen) tai Dalvik -virtuaalikoneen (ennen Android 5.0 versiota). Android Runtime luo jokaiselle sovellukselle oman virtuaalikoneen, jotta useiden sovellusprosessien yhtäaikainen suorittaminen mahdollistuu. Android Runtimen toiminta perustuu ART tai Dalvik -virtuaalikoneen muuntamiseen Android-alustalla käytettäväksi Javan luokkatiedostojen DEX(Dalvik Executable)- tavukoodiksi. Android Runtimen ydinkirjasto sisältää suurimman osan Java -ohjelmointikielen toiminnallisuudesta, jota sovelluskehittäjät käyttävät Android-sovelluksia ohjelmoidessa. Ydinkirjastoa käytetään verkkotyöskentelyyn sekä merkkijonojen ja tiedostojen käsittelyyn.[12] [2]

Keskeisiä Javapohjaisia ydinkirjastoja[12] Tehtävä
android.app Tarjoaa pääsyn sovellusmalliin ja on kaikkien Android-sovellusten kulma-kivi.
android.content Helpottaa sisällön saantia, julkaisemista ja lähettämistä sovellusten ja sovelluskomponenttien välillä.
android.database Käytetään sisällöntarjoajien julkaisemiin tietoihin pääsyyn. Sisältää SQLite-tietokannan hallintaluokat.
android.graphics Matalatasoisen 2D-grafiikan piirto-sovellusliittymä, jossa on värejä, pisteitä, filttereitä, suorakulmioita ja kangastyyppejä.
android.hardware Sovellusliittymä laitteille, kuten nopeusmittarille ja valoantureille.
android.opengl Java-käyttöliittymä OpenGL ES 3D -grafiikkarajapintaan.
android.os Mahdollistaa pääsyn tavanomaisiin käyttöjärjestelmän palveluihin, kuten viestit, järjestelmäpalvelut ja prosessien välinen viestintä.
android.media Äänen ja videon toisto.
android.net Mahdollistaa pääsyn verkkopinoon. Sisältää android.net.wifin jolla pääsee laitteen langattomaan pinoon.
android.provider Tarjoaa pääsyn tavallisiin Androidin sisällöntuottajatietokantoihin, kuten kalenteri- ja kontaktihakemiston ylläpitämiin tietokantoihin.
android.text Tekstin esittäminen ja käsittely laitteen näytöllä.
android.util Merkkijono- ja numeronmuunnoksen suorittaminen, XML-käsittely sekä päivämäärän ja ajan manipulointi.
android.view Sovelluskäyttöliittymien perusrakennelmat.
android.widget Runsaasti esiasennettuja käyttöliittymäkomponentteja, kuten painikkeet, tarrat, listanäkymät, ulkoasunhallintaohjelmia, valintanappeja jne.
android.webkit Web-selausominaisuuksien rakentaminen sovelluksiin.

Android Runtime tekee myös muistinhallintaa Android sovelluksille Garbage Collectorin (GC) avulla. Androidin GC on automaattinen prosessi, joka poistaa käyttämättömiä objekteja muistista. Sovelluksen tuottaessa monia objekteja myös ART laukaisee GC:n useasti, mikä kuluttaa prosessorin tehoa ja voi aiheuttaa ohjelman pysähtymisen, tai esimerkiksi näytön epävakautta ohjelmaa suoritettaessa. Tämä on huomiotava Androidin ohjelmistoja suunniteltaessa ja toteutettaessa.[19]

ART ja Dalvik virtuaalikoneen suurin eroavaisuus on ohjelmien suoritustavassa. Dalvik pohjautuu JIT(Just-in-Time) kääntäjään, joka sanansa mukaisesti kääntää ohjelmaa ”juuri ajallaan” suorituksen aikana. ART perustuu AOT(Ahead-of-Time) kääntäjään, jossa kääntäminen tehdään vain kerran ohjelman asennuksen yhteydessä. AOT:n etuna on prosessointiajan säästäminen ennalta käännetyllä koodilla, jolloin ohjelmat toimivat ja käynnistyvät nopeammin.[20]

Abstraktiokerros (Hardware Abstraction Layer)

[muokkaa]

Laitteiston abstraktiokerros (HAL) mahdollistaa Android-laitteen fyysisen laitteiston ja ohjelmistojen välisen sujuvan kommunikoinnin. Se tuo myös laitteistojen ominaisuudet Java API -kehitystä tukevalle tasolle. Abstraktiokerroksen tarkoituksena on piilottaa ulkoisten laitteiden erilaisuudet ja tarjota oheislaitteille yhtenäinen pohja yhteistyössä Linux-ytimen kanssa.[21] HAL-komponentteja on olemassa muun muassa kuulokkeille, kameroille, televisioille ja mediasoittimille.

Asbtraktiokerroksen hyötyjä ovat esimerkiksi ulkoisen laitteiston arkkitehtuurista riippumaton toiminta ja sovellusten optimaalisen tehokas käyttö.[22] Erilaiset HAL-tyypit toimivat eri Android -versioissa.[23]

Linux -ydin (Linux Kernel)

[muokkaa]

Adroidin arkkitehtuuri pohjautuu suomalaisen Linus Torvaldsin kehittämän avoimen lähdekoodin käyttöjärjestelmän Linux -ytimeen. [24] Linux ydin on lisensoitu ja käyttäjien käytettävissä lisenssillä GNU GPL versiolla 2.[25]

Ydin käsittää arkkitehtuurin ylempien osien toiminnan mahdollistavat ajurit sekä prosessien, virran- ja muistinhallinnan. Kaikille oleellisille Android-laitteen osille löytyy oma ajurinsa, kuten esimerkiksi näytölle ja kameralle.[26] Linux -ydin on valittu käytettäväksi Android-järjestelmissä sen yksinkertaisen ohjelmointimallin ja laajan valmiin ajurivaraston vuoksi.[27] Android-järjestelmälle on hyötyä myös Linux -ytimen turvallisuusominaisuuksista.[2] [28]Pääosin ydin on toteutettu C-kielillä.[29] Linux ytimen lähdekoodin pituus oli vuonna 2015 versiossa 4.1 jo yli 19,5 miljoonaa riviä.[30]

Turvallisuus

[muokkaa]

Androidin turvallisuusuhkien määrän kerrotaan kasvavan jatkuvasti eksponentiaalisesti [31]. Googlen asiantuntijat kuitenkin toppuuttelevat, että tietoturvayhtiöt paisuttelevat virheellisesti turvallisuusuhkien määrää kaupallisten tarkoitusperien vuoksi. [32] F-Securen teettämän tutkimuksen mukaan, vain 0,5% Android haittaohjelmista tulivat Google Playn kautta. [33]

Androidin haittaohjelmat liittyvät usein maksullisten numeroiden ja palveluiden hyväksikäyttöön, jossa esimerkiksi tekstiviestejä lähetetään saastuneista laitteista maksullisiin puhelinnumeroihin ilman käyttäjän hyväksyntää tai tietämystä. Muita yleisiä Android haittaohjelmien piirteitä ovat häiritsevien mainosten näyttäminen, sekä henkilökohtaisten tietojen lähettäminen kolmansille osapuolille. [34] Google pyrkii jatkuvasti lisäämään turvallisuutta tuomalla uusia turvallisuuspäivityksiä käyttäjien saataville. Vuonna 2016 yli 735 miljoona laitetta yli 200 eri laitevalmistajalta saivat Android turvallisuuspäivityksen [35]. Toisaalta vuonna 2015 Cambridgen yliopisto julkaisi tutkimuksen, jossa ilmoitettiin että 87,7% kaikista Android laitteista pitää sisällään turvallisuusuhkia [36].

Lähteet

[muokkaa]
  1. http://www.openhandsetalliance.com/android_overview.html Android Owerview 2018. Viitattu 19.11.2018 (englanti)
  2. 2,0 2,1 2,2 2,3 2,4 2,5 Viittausvirhe: Virheellinen <ref>-elementti; viitettä Developer ei löytynyt
  3. https://www.amazon.com/Android-Hackers-Handbook-Joshua-Drake-ebook/dp/B00K5B5Q80 Drake Joshua J., Fora Pau Oliva, Lanier Zach, Mulliner Colling, Ridley Stephen A. & Wicherski Gerge 2014. Android´s Hacker´s Handbook. John Wileys & Sons Inc. Indianapolis, Indiana. Viitattu 18.11.2018 (englanti)
  4. http://www.openhandsetalliance.com/oha_overview.html. Open Handset Alliance™ Overview 2018. Viitattu 19.11.2018 (englanti)
  5. http://lutpub.lut.fi/bitstream/handle/10024/158386/Android-ekosysteemin%20historia%20nykyisyys%20ja%20tulevaisuudenskenaariot.pdf?sequence=1 Tynkkynen Teemu 2018. Android-Ekosysteemin Historia, Nykyisyys ja Tulevaisuudenskenaariot. Kandidaatintyö. Lappeenrannan teknillinen yliopisto. Tietotekniikan koulutusohjelma. Viitattu 19.11.2018 (suomi).
  6. https://www.android.com Viitattu 20.11.2018 (englanti)
  7. https://ieeexplore-ieee-org.ezproxy.uef.fi:2443/document/6224270?arnumber=6224270 Hu Wei, Han Dan, Hindle Abram & Wong Kenny 2012. The build dependency perspective of Android's concrete architecture. University of Alberta. Department of Computing Science Edmonton, Canada. Viitattu 19.11.2018 (englanti)
  8. http://www.theseus.fi/bitstream/handle/10024/95453/Android_Vihonen_final.pdf?sequence=1&isAllowed=y Vihonen Lauri 2015. Android - Arkkitehtuuri ja pääkäyttäjäoikeuksien hallinnointi. Opinnäytetyö. Haaga-Helia ammattikorkeakoulu. Tietojenkäsittelyn koulutusohjelma. Viitattu 19.11.2018 (suomi)
  9. https://arstechnica.com/gadgets/2018/07/googles-iron-grip-on-android-controlling-open-source-by-any-means-necessary/ Google’s iron grip on Android: Controlling open source by any means necessary. Viitattu 19.11.2018 (englanti)
  10. https://www.statista.com/statistics/266210/number-of-available-applications-in-the-google-play-store/ Number of available applications in the Google Play Store from December 2009 to September 2018. Viitattu 19.11.2018 (englanti)
  11. 11,0 11,1 https://www.scribd.com/doc/28170469/Android-Grundlagen-und-Programmierung. Becker Arno & Pant Marcus 2010. Android – Grundlagen und Programmierung. Dpunkt.verlag GmbH. Heidelberg. (19, 50) Viitattu 20.11.2018 (saksa)
  12. 12,0 12,1 12,2 12,3 12,4 https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture An Overview of the Android Architecture 2016. Viitattu 19.11.2018 (englanti)
  13. https://webkit.org/ A fast open source web browser engine 2018. Viitattu 21.11.2018 (englanti)
  14. https://developer.android.com/ndk/guides/stable_apis#openmaxal-api14 Open max al. Viitattu 21.11.2018 (englanti)
  15. https://www.quora.com/What-is-the-Android-multi-media-framework Nandanikar Tejas 2017. What is the android multi-media framework? Viitattu 21.11.2018 (englanti)
  16. https://developer.android.com/ndk/guides/stable_apis#osl. Open sl es. Viitattu 21.11.2018 (englanti)
  17. https://developer.android.com/ndk/guides/stable_apis Android NDK Native APIs 2018. Viitattu 19.11.2018 (englanti)
  18. https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels What is API-level 2018. Viitattu 19.11.2018 (englanti)
  19. https://dzone.com/articles/understanding-android-gc-logs Viitattu 19.11.2018 (englanti)
  20. https://software.intel.com/en-us/blogs/2014/06/18/art-vs-dalvik-introducing-the-new-android-x86-runtime Viitattu 19.11.2018 (englanti)
  21. https://www.techopedia.com/definition/4288/hardware-abstraction-layer-hal Viitattu 20.11.2018 (englanti)
  22. https://source.android.com/devices/architecture/hal Viitattu 20.11.2018 (englanti)
  23. https://source.android.com/devices/architecture/hal-types Viitattu 20.11.2018 (englanti)
  24. https://source.android.com/devices/architecture Viitattu 18.11.2018 (englanti)
  25. https://www.linuxfoundation.org/open-source-management/2017/05/practical-gpl-compliance/ Viitattu 21.11.2018 (englanti)
  26. https://www.techotopia.com/index.php/ An_Overview_of_the_Android_Architecture Viitattu 18.11.2018 (englanti)
  27. http://hiqes.com/android-linux-kernel-drivers/ Viitattu 21.11.2018 (englanti)
  28. https://source.android.com/security/overview/kernel-security.html Viitattu 18.11.2018 (englanti)
  29. https://www.linuxjournal.com/article/4402 Viitattu 18.11.2018 (englanti)
  30. https://www.phoronix.com/scan.php?page=news_item&px=Linux-19.5M-Stats Viitattu 18.11.2018 (englanti)
  31. https://www.zdnet.com/article/android-malware-numbers-explode-to-25000-in-june-2012/ Viitattu 6.12.2018
  32. https://www.techadvisor.co.uk/feature/network-wifi/mobile-malware-exaggerated-by-charlatan-vendors-says-google-engineer-3320818/ "Mobile malware exaggerated by "charlatan" vendors, says Google engineer". PC Advisor. November 24, 2011. Viitattu 6.12.2018
  33. https://www.phonearena.com/news/Android-malware-perspective-only-0.5-comes-from-the-Play-Store_id36696 "Android malware perspective: only 0.5% comes from the Play Store", 2013, Phonearena.com. Viitattu 6.12.2018
  34. https://www.zdnet.com/article/android-malware-numbers-explode-to-25000-in-june-2012/ Viitattu 6.12.2018
  35. https://security.googleblog.com/2017/03/diverse-protections-for-diverse.html
  36. http://androidvulnerabilities.org/press/2015-10-08

Aiheesta muualla

[muokkaa]