Siirry sisältöön

Ero sivun ”Android arkkitehtuuri” versioiden välillä

Wikiopistosta
Poistettu sisältö Lisätty sisältö
Beil12 (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Jeminaje (keskustelu | muokkaukset)
Ei muokkausyhteenvetoa
Rivi 9: Rivi 9:
| kehittäjä = [[Google]]<br />[[Open Handset Alliance]]
| kehittäjä = [[Google]]<br />[[Open Handset Alliance]]
| kotisivu = [https://www.android.com/ www.android.com]
| kotisivu = [https://www.android.com/ www.android.com]
| ensimmäinen julkaisupäivä = 23. syyskuuta 2008<ref>{{Verkkoviite | osoite = https://android-developers.googleblog.com/2008/09/announcing-android-10-sdk-release-1.html | nimeke = Announcing the Android 1.0 SDK, release 1 | julkaisija = Google | viitattu = 22.11.2017}}</ref>
| ensimmäinen julkaisupäivä = 23. syyskuuta 2008<ref>https://android-developers.googleblog.com/2008/09/announcing-android-10-sdk-release-1.html Announcing the Android 1.0 SDK, release 1. Google.Viitattu 21.11.2018 (englanti)</ref>
| ensimmäinen julkaisu url =
| ensimmäinen julkaisu url =
| viimeisin versio = 9.0 Pie
| viimeisin versio = 9.0 Pie
| julkaisu päiväys = 2018<ref>{{Verkkoviite | Osoite = https://android-developers.googleblog.com/2018/08/introducing-android-9-pie.html | Nimeke = Introducing Android 9 Pie | Ajankohta = 6.8.2018 | Viitattu = 7.8.2018 | Kieli = {{en}} }}</ref>
| julkaisu päiväys = 2018<ref>https://android-developers.googleblog.com/2018/08/introducing-android-9-pie.html Introducing Android 9 Pie 2018. Viitattu 7.8.2018 (englanti)</ref>
| julkaisu url =
| julkaisu url =
| esikatselu versio =
| esikatselu versio =
Rivi 20: Rivi 20:
| kielet =
| kielet =
| lähdekoodimalli = Avoin lähdekoodi, mutta suuressa osassa laitteita on suljetun lähdekoodin osia
| lähdekoodimalli = Avoin lähdekoodi, mutta suuressa osassa laitteita on suljetun lähdekoodin osia
| lisenssi = Apache 2.0 ja GPLv2<ref name="Lisenssit">{{Verkkoviite | Osoite = http://source.android.com/source/licenses.html | Nimeke = Licenses | Tekijä = | Tiedostomuoto = | Selite = | Julkaisu = | Ajankohta = | Julkaisupaikka = | Julkaisija = Android Open Source Project | Viitattu = 10.06.2010 | Kieli = {{en}}}}</ref>
| lisenssi = Apache 2.0 ja GPLv2<ref name="Lisenssit"> http://source.android.com/source/licenses.html Licenses. Android Open Source Project 2010. Viitattu 21.11.2018 (englanti)</ref>
| ytimen tyyppi = Monoliittinen ydin
| ytimen tyyppi = Monoliittinen ydin
| käyttöliittymä =
| käyttöliittymä =
Rivi 36: Rivi 36:
[[File:ArkkitehtuurikokonaisuusSininen.jpg|thumb|500px|Androidin kokonaisarkkitehtuuri <ref>
[[File:ArkkitehtuurikokonaisuusSininen.jpg|thumb|500px|Androidin kokonaisarkkitehtuuri <ref>


Android Developers 2017 mukaillen: https://developer.android.com/guide/platform/index.html Viitattu 18.11.2018 </ref> ]]
https://developer.android.com/guide/platform/index.html Android Developers 2017 mukaillen. Viitattu 18.11.2018 (englanti) </ref> ]]


[https://fi.wikipedia.org/wiki/Android 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.<ref>Android Owerview 2018. http://www.openhandsetalliance.com/android_overview.html Viitattu 19.11.2018. </ref> Androidin arkkitehtuurissa on viisi komponenttia: Sovelluskerros (Applications), sovelluskehys ([https://en.wikipedia.org/wiki/Application_framework Application Framework]), natiivikirjastot (Libraries), [https://en.wikipedia.org/wiki/Android_Runtime Android Runtime] sekä [https://fi.wikipedia.org/wiki/Linux_(ydin) Linux -ydin] ([https://en.wikipedia.org/wiki/Linux_kernel Linux Kernel]).<ref name="developer">Platform Architecture 2018. https://developer.android.com/guide/platform/ Viitattu 19.11.2018. </ref>
[https://fi.wikipedia.org/wiki/Android 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.<ref>http://www.openhandsetalliance.com/android_overview.html Android Owerview 2018. Viitattu 19.11.2018 (englanti) </ref> Androidin arkkitehtuurissa on viisi komponenttia: Sovelluskerros (Applications), sovelluskehys ([https://en.wikipedia.org/wiki/Application_framework Application Framework]), natiivikirjastot (Libraries), [https://en.wikipedia.org/wiki/Android_Runtime Android Runtime] sekä [https://fi.wikipedia.org/wiki/Linux_(ydin) Linux -ydin] ([https://en.wikipedia.org/wiki/Linux_kernel Linux Kernel]).<ref name="developer">https://developer.android.com/guide/platform/ Platform Architecture 2018. Viitattu 19.11.2018 (englanti) </ref>


== Androidin kehitys ==
== Androidin kehitys ==
[https://en.wikipedia.org/wiki/Andy_Rubin Andy Rubin], Chris White, Nick Sears ja [https://en.wikipedia.org/wiki/Rich_Miner Rich Miner] perustivat Android Inc. -yhtiön Lokakuussa 2003 kehittääkseen käyttäjän mieltymykset ja tilin paikkatiedon huomiovan mobiililaitteen. [https://en.wikipedia.org/wiki/Google Google] osti Android Inc. -yhtiön Elokuussa 2005. Vuodesta 2007 Androidia on kehittänyt [https://fi.wikipedia.org/wiki/Open_Handset_Alliance Open Handset Alliance]<ref name="drake"> Drake Joshua J., Fora Pau Oliva, Lanier Zach, Mulliner Colling, Ridley Stephen A. & Wicherski Gerge 2014. Android´s Hacker´s Hanbook. John Wileys & Sons Inc: Indianapolis, Indiana.</ref>, ryhmä matkapuhelin- ja teknologiajohtajia, jotka ovat sitoutuneet avoimeen mobiiliekosysteemiin.<ref>Open Handset Alliance™ Overview 2018. http://www.openhandsetalliance.com/oha_overview.html Viitattu 19.11.2018. </ref> Android -käyttöjärjestelmä kehittyy jatkuvasti. Jokaisella [https://fi.wikipedia.org/wiki/Androidin_versiohistoria versiolla] korjataan virheitä ja otetaan käyttöön uusia ominaisuuksia. Android-ekosysteemi on laajentunut älypuhelimista taulutietokoneisiin, televisioihin, puettaviin älylaitteisiin, autoihin sekä [https://fi.wikipedia.org/wiki/Esineiden_internet Internet of Things] (IoT)-laitteisiin. <ref>Tynkkynen Teemu 2018. Android-Ekosysteemin Historia, Nykyisyys ja Tulevaisuudenskenaariot. Kandidaatintyö. Lappeenrannan teknillinen yliopisto. Tietotekniikan koulutusohjelma. http://lutpub.lut.fi/bitstream/handle/10024/158386/Android-ekosysteemin%20historia%20nykyisyys%20ja%20tulevaisuudenskenaariot.pdf?sequence=1 Viitattu 19.11.2018. </ref><ref>https://www.android.com Viitattu 20.11.2018.</ref>
[https://en.wikipedia.org/wiki/Andy_Rubin Andy Rubin], Chris White, Nick Sears ja [https://en.wikipedia.org/wiki/Rich_Miner Rich Miner] perustivat Android Inc. -yhtiön Lokakuussa 2003 kehittääkseen käyttäjän mieltymykset ja tilin paikkatiedon huomiovan mobiililaitteen. [https://en.wikipedia.org/wiki/Google Google] osti Android Inc. -yhtiön Elokuussa 2005. Vuodesta 2007 Androidia on kehittänyt [https://fi.wikipedia.org/wiki/Open_Handset_Alliance Open Handset Alliance]<ref name="drake"> Drake Joshua J., Fora Pau Oliva, Lanier Zach, Mulliner Colling, Ridley Stephen A. & Wicherski Gerge 2014. Android´s Hacker´s Hanbook. John Wileys & Sons Inc. Indianapolis, Indiana. Viitattu 18.11.2018 (englanti)</ref>, ryhmä matkapuhelin- ja teknologiajohtajia, jotka ovat sitoutuneet avoimeen mobiiliekosysteemiin.<ref>http://www.openhandsetalliance.com/oha_overview.html. Open Handset Alliance™ Overview 2018. Viitattu 19.11.2018 (englanti) </ref> Android -käyttöjärjestelmä kehittyy jatkuvasti. Jokaisella [https://fi.wikipedia.org/wiki/Androidin_versiohistoria versiolla] korjataan virheitä ja otetaan käyttöön uusia ominaisuuksia. Android-ekosysteemi on laajentunut älypuhelimista taulutietokoneisiin, televisioihin, puettaviin älylaitteisiin, autoihin sekä [https://fi.wikipedia.org/wiki/Esineiden_internet Internet of Things] (IoT)-laitteisiin. <ref>Tynkkynen Teemu 2018. Android-Ekosysteemin Historia, Nykyisyys ja Tulevaisuudenskenaariot. Kandidaatintyö. Lappeenrannan teknillinen yliopisto. Tietotekniikan koulutusohjelma. http://lutpub.lut.fi/bitstream/handle/10024/158386/Android-ekosysteemin%20historia%20nykyisyys%20ja%20tulevaisuudenskenaariot.pdf?sequence=1 Viitattu 19.11.2018 (suomi). </ref><ref>https://www.android.com Viitattu 20.11.2018 (englanti)</ref>


{| class="wikitable"
{| class="wikitable"
Rivi 62: Rivi 62:
== Sovelluskerros (Applications) ==
== Sovelluskerros (Applications) ==


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ä. Lisäksi Android tukee myös Go ja Kotlin ohjelmointikieliä. Javalla kirjoitetut ohjelmat vaativat Android Runtime kerroksella sijaitsevan Java Virtual Machine ohjelman, jonka avulla Dalvik pystyy kääntämään koodin Androidissa toimivaksi sovellukseksi.<ref>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. https://ieeexplore-ieee-org.ezproxy.uef.fi:2443/document/6224270?arnumber=6224270 Viitattu 19.11.2018. </ref> <ref>Vihonen Lauri 2015. Android - Arkkitehtuuri ja pääkäyttäjäoikeuksien hallinnointi. Opinnäytetyö. Haaga-Helia ammattikorkeakoulu. Tietojenkäsittelyn koulutusohjelma. http://www.theseus.fi/bitstream/handle/10024/95453/Android_Vihonen_final.pdf?sequence=1&isAllowed=y Viitattu 19.11.2018. </ref>
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ä. Lisäksi Android tukee myös Go ja Kotlin ohjelmointikieliä. Javalla kirjoitetut ohjelmat vaativat Android Runtime kerroksella sijaitsevan Java Virtual Machine ohjelman, jonka avulla Dalvik pystyy kääntämään koodin Androidissa toimivaksi sovellukseksi.<ref>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. https://ieeexplore-ieee-org.ezproxy.uef.fi:2443/document/6224270?arnumber=6224270 Viitattu 19.11.2018 (englanti) </ref> <ref>Vihonen Lauri 2015. Android - Arkkitehtuuri ja pääkäyttäjäoikeuksien hallinnointi. Opinnäytetyö. Haaga-Helia ammattikorkeakoulu. Tietojenkäsittelyn koulutusohjelma. http://www.theseus.fi/bitstream/handle/10024/95453/Android_Vihonen_final.pdf?sequence=1&isAllowed=y Viitattu 19.11.2018 (suomi) </ref>


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.<ref>Google’s iron grip on Android: Controlling open source by any means necessary. https://arstechnica.com/gadgets/2018/07/googles-iron-grip-on-android-controlling-open-source-by-any-means-necessary/ Viitattu 19.11.2018. </ref> Google Playssa on Syyskuun 2018 tiedon mukaan noin 2,6 miljoonaa sovellusta.<ref>Number of available applications in the Google Play Store from December 2009 to September 2018. https://www.statista.com/statistics/266210/number-of-available-applications-in-the-google-play-store/ Viitattu 19.11.2018. </ref>
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.<ref>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) </ref> Google Playssa on Syyskuun 2018 tiedon mukaan noin 2,6 miljoonaa sovellusta.<ref>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) </ref>


== Sovelluskehys (Application Framework) ==
== Sovelluskehys (Application Framework) ==


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, toimintojen, näytön ja puhelimen hallinta.
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, toimintojen, näytön ja puhelimen hallinta.<ref name="developer"></ref>


Ilmoitusten hallinta sallii sovellusten näyttää käyttäjälle 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. <ref name="developer"></ref>
Ilmoitusten hallinta sallii sovellusten näyttää käyttäjälle 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. <ref name="developer"></ref>
Rivi 74: Rivi 74:
== Kirjastot (Libraries) ==
== Kirjastot (Libraries) ==


Androidin natiivikirjastoissa käytetään [https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B C/C++] -ohjelmointikieliä. Kirjastot sisältävät laajan ja monipuolisen toimintovalikoiman, kuten 2D- ja 3D-grafiikan hallinnan, [https://fi.wikipedia.org/wiki/TLS TLS-salausprotokollaviestinnän], [https://fi.wikipedia.org/wiki/SQLite 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ä.<ref name="An Overview">An Overview of the Android Architecture 2016. https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture Viitattu 19.11.2018. </ref>
Androidin natiivikirjastoissa käytetään [https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B C/C++] -ohjelmointikieliä. Kirjastot sisältävät laajan ja monipuolisen toimintovalikoiman, kuten 2D- ja 3D-grafiikan hallinnan, [https://fi.wikipedia.org/wiki/TLS TLS-salausprotokollaviestinnän], [https://fi.wikipedia.org/wiki/SQLite 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ä.<ref name="An Overview">https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture An Overview of the Android Architecture 2016. Viitattu 19.11.2018 (englanti) </ref>


{| class="wikitable"
{| class="wikitable"
! Keskeiset C/C++ natiivikirjastot<ref>Becker Arno & Pant Marcus 2010. Android – Grundlagen und Programmierung. Dpunkt.verlag GmbH. Heidelberg. https://www.scribd.com/doc/28170469/Android-Grundlagen-und-Programmierung Viitattu 20.11.2018.</ref>
! Keskeiset C/C++ natiivikirjastot<ref>Becker Arno & Pant Marcus 2010. Android – Grundlagen und Programmierung. Dpunkt.verlag GmbH. Heidelberg. https://www.scribd.com/doc/28170469/Android-Grundlagen-und-Programmierung Viitattu 20.11.2018 (saksa)</ref>
! Tehtävä
! Tehtävä
|-
|-
Rivi 87: Rivi 87:
|}
|}


Suoraan Androidin natiivikirjastoihin pääsemiseen tarvitaan natiivikehityksen ohjelmatyökalua (Native Development Kit NDK), jolla käsitellään C ja C++ -ohjelmointikieliä.<ref name="An Overview"></ref>Androidin DNK tarjoaa joukon alkuperäisotsikoita ja jaettuja kirjastotiedostoja, jotka ovat vähitellen lisääntyneet uusien Android API-tasojen julkaisujen yhteydessä.<ref>Android NDK Native APIs 2018. https://developer.android.com/ndk/guides/stable_apis Viitattu 19.11.2018. </ref> 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.<ref>What is API-level? 2018. https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels Viitattu 19.11.2018. </ref>
Suoraan Androidin natiivikirjastoihin pääsemiseen tarvitaan natiivikehityksen ohjelmatyökalua (Native Development Kit NDK), jolla käsitellään C ja C++ -ohjelmointikieliä.<ref name="An Overview"></ref>Androidin DNK tarjoaa joukon alkuperäisotsikoita ja jaettuja kirjastotiedostoja, jotka ovat vähitellen lisääntyneet uusien Android API-tasojen julkaisujen yhteydessä.<ref>https://developer.android.com/ndk/guides/stable_apis Android NDK Native APIs 2018. Viitattu 19.11.2018 (englanti) </ref> 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.<ref>https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels What is API-level 2018. Viitattu 19.11.2018 (englanti) </ref>







Rivi 132: Rivi 129:
|}
|}


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.<ref>https://dzone.com/articles/understanding-android-gc-logs Viitattu 19.11.2018. </ref>
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.<ref>https://dzone.com/articles/understanding-android-gc-logs Viitattu 19.11.2018 (englanti) </ref>


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.<ref>https://software.intel.com/en-us/blogs/2014/06/18/art-vs-dalvik-introducing-the-new-android-x86-runtime Viitattu 19.11.2018. </ref>
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.<ref>https://software.intel.com/en-us/blogs/2014/06/18/art-vs-dalvik-introducing-the-new-android-x86-runtime Viitattu 19.11.2018 (englanti) </ref>


== Laitteiston abstraktiokerros (Hardware Abstraction Layer) ==
== Laitteiston abstraktiokerros (Hardware Abstraction Layer) ==


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.<ref>https://www.techopedia.com/definition/4288/hardware-abstraction-layer-hal Viitattu 20.11.2018.</ref> HAL-komponentteja on olemassa muun muassa kuulokkeille, kameroille, televisioille ja mediasoittimille.
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.<ref>https://www.techopedia.com/definition/4288/hardware-abstraction-layer-hal Viitattu 20.11.2018 (englanti)</ref> 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ö.<ref>https://source.android.com/devices/architecture/hal Viitattu 20.11.2018.</ref> Erilaiset HAL-tyypit toimivat eri Android -versioissa.<ref>https://source.android.com/devices/architecture/hal-types Viitattu 20.11.2018</ref>
Asbtraktiokerroksen hyötyjä ovat esimerkiksi ulkoisen laitteiston arkkitehtuurista riippumaton toiminta ja sovellusten optimaalisen tehokas käyttö.<ref>https://source.android.com/devices/architecture/hal Viitattu 20.11.2018 (englanti)</ref> Erilaiset HAL-tyypit toimivat eri Android -versioissa.<ref>https://source.android.com/devices/architecture/hal-types Viitattu 20.11.2018 (englanti)</ref>




== Linux -ydin (Linux Kernel) ==
== Linux -ydin (Linux Kernel) ==


Alimmaisena Android-rakenteen pohjalla löytyy Linux ydin(eng. Linux kernel). Se rakentuu suomalaisen Linus Torvaldsin kehittämälle käyttöjärjestelmän ytimelle, jota on kuitenkin avoimen koodin pohjalta kehitetty eteenpäin muutamin lisäyksin.<ref>https://source.android.com/devices/architecture Viitattu 18.11.2018</ref> Linux ydin on lisensoitu ja käyttäjien käytettävissä lisenssillä GNU GPL versiolla 2.<ref>https://www.linuxfoundation.org/open-source-management/2017/05/practical-gpl-compliance/ Viitattu 21.11.2018</ref>
Adroidin arkkitehtuuri pohjautuu suomalaisen Linus Torvaldsin kehittämän avoimen lähdekoodin käyttöjärjestelmän Linux -ytimeen. <ref>https://source.android.com/devices/architecture Viitattu 18.11.2018 (englanti)</ref> Linux ydin on lisensoitu ja käyttäjien käytettävissä lisenssillä GNU GPL versiolla 2.<ref>https://www.linuxfoundation.org/open-source-management/2017/05/practical-gpl-compliance/ Viitattu 21.11.2018 (englanti)</ref>


Ydin käsittää arkkitehtuurin ylempien osien toiminnan mahdollistavat ajurit sekä virranhallinnan, prosessien hallinnan ja muistinhallinnan. Kaikille oleellisille Android-laitteen osille löytyy oma ajurinsa, kuten esimerkiksi näytölle, kameralle ja niin edelleen.<ref>https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture Viitattu 18.11.2018</ref> Linux ydin on valittu käyttöön Android-järjestelmiin sen yksinkertaisen ohjelmointimallin, kuin laajan valmiin ajurivaraston vuoksi.<ref>http://hiqes.com/android-linux-kernel-drivers/ Viitattu 21.11.2018</ref> Pääosin ydin on toteutettu C-kielillä.<ref>https://www.linuxjournal.com/article/4402 Viitattu 18.11.2018</ref> Linux ytimen lähdekoodin pituus oli vuonna 2015 versiossa 4.1 jo yli 19,5 miljoonaa riviä.<ref>https://www.phoronix.com/scan.php?page=news_item&px=Linux-19.5M-Stats Viitattu 18.11.2018</ref>
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.<ref>https://www.techotopia.com/index.php/ An_Overview_of_the_Android_Architecture Viitattu 18.11.2018 (englanti)</ref> Linux -ydin on valittu käytettäväksi Android-järjestelmissä sen yksinkertaisen ohjelmointimallin ja laajan valmiin ajurivaraston vuoksi.<ref>http://hiqes.com/android-linux-kernel-drivers/ Viitattu 21.11.2018 (englanti)</ref> Android-järjestelmälle on hyötyä myös Linux -ytimen turvallisuusominaisuuksista.<ref>https://developer.android.com/guide/platform/ Viitattu 18.11.2018 (englanti)</ref><ref>https://source.android.com/security/overview/kernel-security.html Viitattu 18.11.2018 (englanti)</ref>Pääosin ydin on toteutettu C-kielillä.<ref>https://www.linuxjournal.com/article/4402 Viitattu 18.11.2018 (englanti)</ref> Linux ytimen lähdekoodin pituus oli vuonna 2015 versiossa 4.1 jo yli 19,5 miljoonaa riviä.<ref>https://www.phoronix.com/scan.php?page=news_item&px=Linux-19.5M-Stats Viitattu 18.11.2018 (englanti)</ref>


Linux ytimen käyttö mahdoillistaa lisäksi android-järjestelmälle etuja Linuxin turvallisuus ominaisuuksista.<ref>https://developer.android.com/guide/platform/ Viitattu 18.11.2018</ref><ref>https://source.android.com/security/overview/kernel-security.html Viitattu 18.11.2018</ref>


== Lähteet ==
== Lähteet ==
Rivi 157: Rivi 153:
== Aiheesta muualla ==
== Aiheesta muualla ==
* [https://developer.android.com/studio/ Android-studio]
* [https://developer.android.com/studio/ Android-studio]
* [https://en.wikipedia.org/wiki/Android_(operating_system)]
* [https://fi.wikipedia.org/wiki/Androidin_versiohistoria]
* [https://fi.wikipedia.org/wiki/Android-sovelluskehitys]
* [https://fi.wikipedia.org/wiki/Luettelo_Android-valmistajista]


[[luokka:Tietojenkäsittelytiede | Android | Arkkitehtuuri]]
[[luokka:Tietojenkäsittelytiede | Android | Arkkitehtuuri]]

Versio 21. marraskuuta 2018 kello 15.08

Android
Kehittäjä Google
Open Handset Alliance
Toiminnallinen tila Aktiivinen
Julkaistu 23. syyskuuta 2008[1]
Viimeisin vakaa versio 9.0 Pie (2018[2])
Ytimen tyyppi Monoliittinen ydin
Lähdekoodimalli Avoin lähdekoodi, mutta suuressa osassa laitteita on suljetun lähdekoodin osia
Lisenssi Apache 2.0 ja GPLv2[3]
Kotisivu www.android.com
Tiedosto:ARKKITEHTUURIPALLO.jpg
Tiedosto:Android arkkitehtuuri yksinkertainen.jpg
Android -arkkitehtuurin peruselementit
Tiedosto:ArkkitehtuurikokonaisuusSininen.jpg
Androidin kokonaisarkkitehtuuri [4]

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.[5] Androidin arkkitehtuurissa on viisi komponenttia: Sovelluskerros (Applications), sovelluskehys (Application Framework), natiivikirjastot (Libraries), Android Runtime sekä Linux -ydin (Linux Kernel).[6]

Androidin kehitys

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[7], ryhmä matkapuhelin- ja teknologiajohtajia, jotka ovat sitoutuneet avoimeen mobiiliekosysteemiin.[8] 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. [9][10]

Komponentti Kieli
Sovellukset Java, C/C++ (Go, Kotlin)
Sovelluskehys Java
Kirjastot C/C++
Android Runtime Java/Kotlin (natiivikoodi), Dex-tavukoodi
Laitteiston abstraktiokerros ---
Linux-ydin C

Sovelluskerros (Applications)

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ä. Lisäksi Android tukee myös Go ja Kotlin ohjelmointikieliä. Javalla kirjoitetut ohjelmat vaativat Android Runtime kerroksella sijaitsevan Java Virtual Machine ohjelman, jonka avulla Dalvik pystyy kääntämään koodin Androidissa toimivaksi sovellukseksi.[11] [12]

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.[13] Google Playssa on Syyskuun 2018 tiedon mukaan noin 2,6 miljoonaa sovellusta.[14]

Sovelluskehys (Application Framework)

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, toimintojen, näytön ja puhelimen hallinta.[6]

Ilmoitusten hallinta sallii sovellusten näyttää käyttäjälle 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. [6]

Kirjastot (Libraries)

Androidin natiivikirjastoissa käytetään C/C++ -ohjelmointikieliä. Kirjastot sisältävät laajan ja monipuolisen toimintovalikoiman, kuten 2D- ja 3D-grafiikan hallinnan, TLS-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ä.[15]

Keskeiset C/C++ natiivikirjastot[16] Tehtävä
LibWebCore .
SGLite .
Media FrameWork .

Suoraan Androidin natiivikirjastoihin pääsemiseen tarvitaan natiivikehityksen ohjelmatyökalua (Native Development Kit NDK), jolla käsitellään C ja C++ -ohjelmointikieliä.[15]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

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.[15] [6]

Keskeiset Javapohjaiset ydinkirjastot[15] 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-selausominaisuuksein 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]

Laitteiston abstraktiokerros (Hardware Abstraction Layer)

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)

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.[28][29]Pääosin ydin on toteutettu C-kielillä.[30] Linux ytimen lähdekoodin pituus oli vuonna 2015 versiossa 4.1 jo yli 19,5 miljoonaa riviä.[31]


Lähteet

  1. https://android-developers.googleblog.com/2008/09/announcing-android-10-sdk-release-1.html Announcing the Android 1.0 SDK, release 1. Google.Viitattu 21.11.2018 (englanti)
  2. https://android-developers.googleblog.com/2018/08/introducing-android-9-pie.html Introducing Android 9 Pie 2018. Viitattu 7.8.2018 (englanti)
  3. http://source.android.com/source/licenses.html Licenses. Android Open Source Project 2010. Viitattu 21.11.2018 (englanti)
  4. https://developer.android.com/guide/platform/index.html Android Developers 2017 mukaillen. Viitattu 18.11.2018 (englanti)
  5. http://www.openhandsetalliance.com/android_overview.html Android Owerview 2018. Viitattu 19.11.2018 (englanti)
  6. 6,0 6,1 6,2 6,3 https://developer.android.com/guide/platform/ Platform Architecture 2018. Viitattu 19.11.2018 (englanti)
  7. Drake Joshua J., Fora Pau Oliva, Lanier Zach, Mulliner Colling, Ridley Stephen A. & Wicherski Gerge 2014. Android´s Hacker´s Hanbook. John Wileys & Sons Inc. Indianapolis, Indiana. Viitattu 18.11.2018 (englanti)
  8. http://www.openhandsetalliance.com/oha_overview.html. Open Handset Alliance™ Overview 2018. Viitattu 19.11.2018 (englanti)
  9. Tynkkynen Teemu 2018. Android-Ekosysteemin Historia, Nykyisyys ja Tulevaisuudenskenaariot. Kandidaatintyö. Lappeenrannan teknillinen yliopisto. Tietotekniikan koulutusohjelma. http://lutpub.lut.fi/bitstream/handle/10024/158386/Android-ekosysteemin%20historia%20nykyisyys%20ja%20tulevaisuudenskenaariot.pdf?sequence=1 Viitattu 19.11.2018 (suomi).
  10. https://www.android.com Viitattu 20.11.2018 (englanti)
  11. 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. https://ieeexplore-ieee-org.ezproxy.uef.fi:2443/document/6224270?arnumber=6224270 Viitattu 19.11.2018 (englanti)
  12. Vihonen Lauri 2015. Android - Arkkitehtuuri ja pääkäyttäjäoikeuksien hallinnointi. Opinnäytetyö. Haaga-Helia ammattikorkeakoulu. Tietojenkäsittelyn koulutusohjelma. http://www.theseus.fi/bitstream/handle/10024/95453/Android_Vihonen_final.pdf?sequence=1&isAllowed=y Viitattu 19.11.2018 (suomi)
  13. 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)
  14. 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)
  15. 15,0 15,1 15,2 15,3 https://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture An Overview of the Android Architecture 2016. Viitattu 19.11.2018 (englanti)
  16. Becker Arno & Pant Marcus 2010. Android – Grundlagen und Programmierung. Dpunkt.verlag GmbH. Heidelberg. https://www.scribd.com/doc/28170469/Android-Grundlagen-und-Programmierung Viitattu 20.11.2018 (saksa)
  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://developer.android.com/guide/platform/ Viitattu 18.11.2018 (englanti)
  29. https://source.android.com/security/overview/kernel-security.html Viitattu 18.11.2018 (englanti)
  30. https://www.linuxjournal.com/article/4402 Viitattu 18.11.2018 (englanti)
  31. https://www.phoronix.com/scan.php?page=news_item&px=Linux-19.5M-Stats Viitattu 18.11.2018 (englanti)

Aiheesta muualla