Android

Android on älypuhelimille, taulutietokoneille ja älytelevisioille suunniteltu ohjelmistopino, joka sisältää käyttöjärjestelmän, väliohjelmistoja ja käyttäjän perusohjelmia. Siinä käytetään avoimen lähdekoodin Linux-käyttöjärjestelmän ydintä. Androidia kehitti alun perin Android Inc., jonka Google myöhemmin osti. Nykyisin sen kehittämisestä vastaa Open Handset Alliance Googlen johdolla.

Android julkistettiin 5. marraskuuta 2007 Open Handset Alliancen perustamisen yhteydessä. Open Handset Alliance koostuu 84 laitteisto- ja ohjelmistovalmistajasta sekä teleoperaattorista. Suurin osa Androidin koodista on julkaistu Android Open Source Projectissa (AOSP).

Ominaisuudet 

Androidin ohjelmistopino koostuu Linux-ytimestä, Bionic-C-kirjastosta ja muista järjestelmäkirjastoista sekä järjestelmäohjelmista. Lisäksi käyttöjärjestelmässä on Android-sovelluskehys ja sovellusohjelmat, jotka suoritetaan Android Runtime (ART) -ajoympäristöllä (ennen versiota 5.0 Dalvik-virtuaalikoneella). Käytettävissä olevat C-kieliset kirjastot ovat muun muassa surface manager, OpenCore media framework, SQLite-relaatiotietokantajärjestelmä, OpenGL ES 2.0 -ohjelmointirajapinta, WebKit-selainmoottori, SGL-grafiikkamoottori ja SSL.

Sovelluksien käyttämä grafiikkakirjasto on siirtynyt Skia-kirjastoon, jossa on Vulkan-rajapinnan tuki laitteistokiihdytykseen.

Android on tukenut 32-bittisiä ARM, MIPS ja x86 -arkkitehtuureita sekä 64-bittisiä ARM v8, x86-64 ja MIPS-64 -arkkitehtuureita Android 5.0 Lollipop -versiosta lähtien. MIPS-tuki on poistettu Android NDK r17 -versiossa. Tammikuussa 2023 Google ilmoitti RISC-V-suorittimen tuesta.

Arkkitehtuuri 
Androidin arkkitehtuuri alimpana (lähimpänä laitteistoa) on Linux-ydin. Ydin on muokattu versio Linuxista, jossa on joitakin lisäyksiä järjestelmän toimintaa varten.
Ytimen päällä on HAL-kerros (). HAL-kerros erottaa laitteistovalmistajien kirjoittamat ajurit Androidin sovellukehyksestä.
HAL-kerroksen päällä ovat järjestelmän palvelut, jonka päällä on Binder-IPC. Ylimpänä on Androidin sovelluskehys, jota sovelluskehittäjät useimmiten käyttävät.

Linux-ytimen käytön johdosta Androidia on toisinaan kutsuttu Linux-jakeluksi kuten Ubuntu, Debian ja Red Hat. Androidissa ei kuitenkaan ole samaa ohjelmistopinoa kuin tyypillisessä Linux-jakelussa ja ei siksi ole rinnastettava jakelu.

Android käyttää A/B-osiointimallia, jossa päivitykset asennetaan toiselle osiolle toisen ollessa käytössä. Kun laite käynnistetään uudestaan käyttöön otetaan päivitetty osio edellisen jäädessä varalle. Päivityksen vikatilanteessa järjestelmä palaa käyttämään aiempaa osiota. Vastaavaa menettelyä käyttää myös muun muassa ChromeOS.

Sovelluskehitys 

Androidiin tarkoitettuja sovelluksia voidaan kirjoittaa Java- ja Kotlin-kielellä ja se käyttää Googlen kehittämiä Java-kirjastoja.
Kotlin on vuodesta 2019 lähtien suositeltu kieli sovelluskehittäjille.

Android SDK -kehityspaketti sisältää useita kehityksessä käytettäviä työkaluja. Lisäksi Android NDK -ohjelmistokehityspaketilla voidaan kehittää sovelluksia C- ja C++-kielillä.

Android-sovellukset käyttävät XML-pohjaista resurssijärjestelmää, jonka mukaan sovelluskehys valitsee sopivan vaihtoehtoisen resurssitiedoston käytetyn alustan mukaan (kuten älypuhelin tai tabletti). Sovellukset asennetaan laitteisiin APK- tai Android App Bundle -pakettitiedostoilla.

Nykyiset ominaisuudet ja määrittelyt

Päivityshistoria 

Androidista on julkaistu uusia versioita julkistuksen jälkeen. Uudet versiot yleensä korjaavat virheitä ja lisäävät uusia ominaisuuksia.

Androidin lähdekoodi (vuonna 2010) sisältää 12 miljoonaa koodiriviä, josta 3 miljoonaa riviä on XML-koodia, 2,8 miljoonaa riviä on C-koodia ja 2,1 miljoonaa riviä on Java-koodia.

Google on kehittänyt ”Generic Kernel Image” (GKI) projektia, jonka tavoitteena on helpommat päivitykset Androidissa käytettyyn käyttöjärjestelmän ytimeen. Tyypillisesti muutokset pitkän aikavälin tuen (”Long Term Support”, LTS) Linux-ytimestä tuodaan ”Android Common” -haaraan, josta viedään muutoksia järjestelmäpiirin tekijän haaraan ja lopulta varsinaisen laitekohtaisen ytimen haaraan. GKI-versio on ytimen käännös, jota voi käyttää kaikilla laitteilla.
Tavoitteena on toimittaa ytimen päivitykset Play-kaupan kautta. Aiemmin kehitetty Generic System Image (GSI) on Androidin versio, jota voidaan suorittaa kaikilla laitteilla modularisoinnin avulla. GKI vähentäisi kolme versiohaaraa yhdeksi. GKI on julkaistu Android-versiossa 12.
Ohjelmistokehityspaketin modularisoinnilla Google pyrkii toimittamaan uusia ominaisuuksia kehittäjille ilman koko käyttöjärjestelmän päivitystä.

Google on kertonut tavoitteesta vähentää teknistä velkaa kehitysmallilla, jossa uudet ominaisuudet päätyvät ylävirtaan ensinnä (upstream first). Valmistajakohtaiset ominaisuudet voidaan sijoittaa valmistajakohtaisiin moduuleihin.

Vuodesta 2019 lähtien Google on käyttänyt Rust-kieltä Android-käyttöjärjestelmän uusiin ominaisuuksiin Javan ja Kotlinin rinnalla. Rustista tuli tuettu kieli Android 12:ssa. Android Open Source Projectissa oli noin 1,5 miljoonaa riviä Rust-kielistä lähdekoodia vuoden 2022 lopussa ja Android 13:ssa 21 prosenttia uudesta natiivista koodista on tehty Rustilla.

Käyttöliittymät 
Vain harvat Android-laitteet käyttävät muokkaamatonta eli ”puhdasta” Androidia. Useimmat Android-valmistajat käyttävät laitteissaan esiasennettuna omaa käyttöliittymäänsä, joka eroaa puhtaasta Androidista oletussovellusten ja graafisen ilmeen osalta. Erityisesti monien kiinalaisten valmistajien käyttöliittymät muistuttavat graafiselta ilmeeltään Applen iOS:ää, ja niistä puuttuu iOS:n tavoin sovellusvalikko. Tunnettuja valmistajista riippumattomia versioita Androidista ovat muun muassa CyanogenMod ja sen seuraajaksi tehty LineageOS.

Suosio 
NPD Group -tutkimusyhtiön mukaan vuoden 2010 ensimmäisen neljänneksen aikana Android nousi Yhdysvaltain toiseksi myydyimmäksi mobiilialustaksi. BlackBerryn RIM-käyttöjärjestelmää käyttäviä mobiililaitteita myytiin eniten ja Applen iOS-käyttöjärjestelmää käyttäviä laitteita myytiin kolmanneksi eniten.

Android nousi älypuhelinten markkinajohtajaksi vuoden 2010 viimeisellä neljänneksellä. Gartner arvioi Androidin markkinaosuudeksi älypuhelimissa 52,5 % vuoden 2011 kolmannella neljänneksellä. Kesällä 2013 Androidin markkinaosuuden on arvioitu lähestyvän 70 %:ta. Vuoden 2015 toisella neljänneksellä Androidin markkinaosuus oli 82.8 %.

Älypuhelimien markkinosuudet vuoden 2016 lopussa jakaantuivat seuraavasti: Android 86,8 %, iOS 12,5 %, muut alle 1 %.

Androidista tuli internetin käytetyin alusta vuonna 2017 ohittaen mm. Windowsin. Googlen mukaan vuonna 2021 maailmassa on käytössä yli kolme miljardia Android-laitetta.

Androidille on julkaistu 2,9 miljoonaa sovellusta Google Play -kaupassa.

Tietoturva 

Kuluttajajärjestö Whichin mukaan maaliskuussa 2020 kaksi viidesosaa maailman Android-laitteista oli tietoturvaltaan uhanalaisia, koska niihin ei enää tehdä ohjelmistopäivityksiä. Päivityksiä ei enää tehdä Androidin versioihin 1.0–7.0. Vielä maaliskuussa 2020 näitä ohjelmistoversioita pyörittäviä laitteita oli päivittäisessä käytössä yli miljardi kappaletta.

Androidin ”tehdasasetusten palautuksen” on todettu olevan tehoton menetelmä laitteella olevien tiedostojen tuhoamiseksi. Esimerkiksi yleinen tapa myydä käytetty laite vieraalle henkilölle nettihuutokaupassa aiheuttaa riskin vuotaa kaikki puhelimella olleet kuvat, kirjautumistiedot ja muut tiedostot. Tämä johtuu siitä että Android ei uudelleenkirjoita käytettyjä alueita muistista uudelleen bitti bitiltä.

Vuoden 2015 tammikuussa puolet Android-laitteista ovat suojaamattomia WebView-ominaisuudesta löytyneen haavoittuvuuden johdosta. Kyseinen haavoittuvuus koskee Jelly Bean (4.1–4.3) -versioita, joihin Google ei enää tee korjauksia. Tammikuussa 2015 suojaamattomia Android laitteita on noin miljardi. Androidin 4.4-versiossa WebView'sta luovuttiin ja tilalle otettiin Blink-renderöintimoottori, jossa vastaavaa haavoittuvuutta ei ole havaittu. Haavoittuvuuksien testaamiseen keskittynyt Metasploit julkaisi 15.1.2015 ohjelmastaan version, joka sisälsi 11 eri WebView-haavoittuvuutta, joita ei tulla korjaamaan.

Google aloitti elokuussa 2015 kuukausittaiset tietoturvapäivitykset Android-laitteilleen. Samalla Androidin asetuksiin lisättiin kohta, josta laitteen tietoturvatason voi tarkistaa. Isoista valmistajista ainakin LG, Motorola ja Samsung ovat sitoutuneet kuukausittaisten tietoturvapäivitysten toimittamiseen.
Google on lisännyt SELinuxin käyttöä sovelluksien oikeuksien rajoittamiseen. SELinux on ollut Androidissa versiosta 4.3 lähtien.

Paikkatiedon vakoilutoiminto 

Android-puhelimet ja tabletit lähettivät vuonna 2017 Googlelle tietoja puhelimen lähistöllä olevien tukiasemien osoitteista, vaikka käyttäjä olisi kytkenyt paikannustoiminnon pois puhelimen asetuksista tai vaikka puhelimessa ei olisi SIM-korttia paikallaan. Google ilmoitti marraskuussa 2017 lopettavansa automaattisen paikkatietojen keräämisen.

Variaatiot 
Androidista on eri versioita eri käyttötarkoituksiin kuten Android Wear päällepuettaviin laitteisiin ja Android Auto autoteollisuuteen.

Amazonilla on Androidista forkattu Kindle Fire -laitteille tarkoitettu Fire OS.
Androidin lähdekoodi on avointa lähdekoodia lukuun ottamatta Googlen omia Play-palveluita ja nimi Android on Googlen tavaramerkki.

Muun muassa Blackphonen PrivatOS on perustunut Androidiin ilman Google Play-palveluita. Lähdekoodit PrivatOS:n käyttämään versioon Linux-ytimestä on julkaistu kuten GPL-lisenssin alla vaaditaan, mutta suuri osa Android/AOSP-projektista on BSD- tai Apache-lisenssillä, joka ei vaadi lähdekoodien julkaisua eikä näitä osia ole siten julkaistu.

emteria.OS on AOSP-projektiin perustuva muokattu versio Androidista.

CyanogenMod on avoimen lähdekoodin versio, jonka seuraaja on LineageOS. Myös Replicant on avoimen lähdekoodin versio.

Muita variaatioita ovat muun muassa Huawein HarmonyOS, OnePlussan OxygenOS ja Nokian Nokia X Platform.

Katso myös 
 Android Auto
 Android One
 Android Things
 Android TV
 Android Wear
 Luettelo Android-valmistajista

Lähteet

Aiheesta muualla 

 Android-projektin sivusto
 Open Handset Alliancen sivusto

Seulonnan keskeiset artikkelit
Mobiilikäyttöjärjestelmät