**Android-sovelluskehitys** on Android-sovellusohjelmien luomista. Android-sovellusten kehittämiseen suositeltu ohjelmointikieli on Kotlin vuodesta 2019 lähtien. Myös Java on edelleen tuettu Android SDK -kehityspaketilla.
Android-sovelluksia voi kehittää myös käyttäen C++ -ohjelmointikieltä ja Android NDK:ta. Näiden tekniikoiden lisäksi on mahdollista toteuttaa niin sanottuja "hybridisovelluksia". Hybridisovellukset toimivat useammalla käyttöjärjestelmällä, mutta eivät pärjää suorituskyvyssä Android SDK:lla ja NDK:lla tehdyille sovelluksille. Lisäksi Android-laitteen sisäisiin laitteisiin, kuten kameraan tai kiihtyvyysanturiin päästään käsiksi vain käyttäen SDK:ta tai NDK:ta.

Android Runtime (ART) on Android-alustalla käytettävä ajoympäristö, joka kääntää ohjelmat natiiville konekielelle. ART on korvannut Dalvik-virtuaalikoneen Androidin versiosta 5.0 alkaen.

Android-kehitystyökalut
-----------------------

Android SDK on ohjelmistokehityspaketti (*Software Development Kit*), jota käytetään Android-sovellusten toteuttamiseen. Android SDK sisältää kaikki Android-sovelluksen luontiin tarvittavat kirjastot, mukaan lukien kirjastot käyttöliittymien tekoon sekä debuggaustyökalut ja muita työkaluja sovelluskehitykseen.

Virallinen Googlen tarjoama kehitysympäristö on Android Studio, jonka mukana tulee Android SDK. Muita kehitykseen käytettäviä ovat muun muassa Eclipse ja Microsoft Visual Studio.

Pelien kehitykseen käytettäviä työkaluja ovat muun muassa Unity ja Unreal Engine.

Lisäksi Pascal-kielellä voi kehittää Android-sovelluksia ja tätä tukevia työkaluja ovat muun muassa Delphi ja Lazarus.

Sovelluksien tekeminen
----------------------

Käyttöliittymiä voi tehdä Androidin omalla rajapinnalla (mm. Jetpack) tai esimerkiksi Flutter-kirjastolla.

Sovelluksien kehitykseen voidaan käyttää Java, Kotlin ja C++-ohjelmointikieliä. Sovellukset paketoidaan APK- tai Android App Bundle (AAB) -pakettitiedostoihin, jotka sisältävät sovelluksen ohjelmakoodin lisäksi muun tarvittavan datan ja resurssitiedostot. Sovellukset asennetaan APK-pakettitiedostoista laitteelle.

Eri kielille ja kulttuureille suunnatut tekstit ja muut tiedot sijoitetaan resurssitiedostoihin, jotka liitetään sovelluksen mukaan.

Ohjelmiston testaaminen
-----------------------

Androidille tehtyjä sovelluksia voi testata eri tavoin Android Studiossa: emulaattorilla, yksikkötesteillä (JUnit) ja erilaisten testaustyökalujen avulla (mm. App Crawler, Monkey Testing, monkeyrunner). Android Debug Bridge (adb) tukee testaamista fyysisellä laitteella langattoman yhteyden (Wi-Fi, Android 11 tai uudempi) tai USB-liitännän avulla.

Fyysisellä laitteella debuggaamista varten Android-puhelimesta löytyy valinnat, jotka kytketään päälle laitteen järjestelmäasetuksista.

Esimerkki
---------

Esimerkkikoodin tulos Android-älypuhelimessa.
Esimerkki Androidin Activity:stä. Activity on luokka, joka tarvitaan Androidissa aina käyttöliittymän näyttämistä varten.

```
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity\_main);
 // Näytetään pop-up, jossa teksti "Hello world!"
 Toast.makeText(this, "Hello world!", Toast.LENGTH\_SHORT).show();
 }
}

```

Tietoturva
----------

Jokainen Android-sovellus sijaitsee omassa hiekkalaatikossaan tietoturvan vuoksi:

* Android-käyttöjärjestelmä on usean käyttäjän Linux-käyttöjärjestelmä, jossa jokainen sovellus on eri käyttäjä
* järjestelmä asettaa jokaiselle sovellukselle yksilöllisen tunnuksen, joka on vain järjestelmän käytössä ja sovellus ei sitä tunne: järjestelmä asettaa käyttäjäoikeudet siten, että vain sovellukseen liitetty tunnus voi niitä käyttää
* jokaisella prosessilla on oma virtuaalikone, jolloin sovellukset suoritetaan eriytettyinä toisista sovelluksista
* jokainen sovellus suoritetaan omassa prosessissa

Sovellukset asennetaan APK-pakettitiedostoina tai Google Play -palveluun lähetettäväksi mahdollisesti myös Android App Bundle (.aab) -tiedostoina, joka on suositeltu muoto julkaistessa sovellusta.

Sovelluksen julkaiseminen
-------------------------

Yleisin paikka Android-sovelluksen julkaisemiselle on Google Play -kauppa. Tunnuksen tekeminen Play-kauppaan maksaa 25 dollaria. Maksulla Google pyrkii minimoimaan niin sanottujen roskasovellusten julkaisemista. Tunnusten luomisen jälkeen käyttäjä voi julkaista sovelluksia Play-kaupassa. Yleensä sovelluksen näkyviin tuleminen muille käyttäjille kestää sovelluksen julkaisemisesta muutamia tunteja. Aika on kuitenkin verrattain vähäinen verrattuna esimerkiksi Applen App Storeen tuleviin sovelluksiin, sillä Google ei tarkista sovelluksia.

Suorituskyvyn seuranta
----------------------

Android Studiossa on profilointityökalu suorittimen, muistin, verkon ja akun käytön mittaamiseen.

Android vitals on Googlen hanke sovelluksien vakauden ja suorituskyvyn seurantaan laitteilla, joiden käyttäjät ovat valinneet sen käytön. Tällä sovelluskehittäjät saavat tietoa käyttökokemuksen laatuun vaikuttavista seikoista kuten vakaudesta, suorituskyvystä, akun käytöstä ja oikeuksien kieltämisestä.

Ympäristömuuttujat
------------------

Android ei käytä ympäristömuuttujia, vaan property-järjestelmää. Jotkin tiedot voidaan asettaa ohjelman käännöksen yhteydessä ja joitakin voi muuttaa adb-komentotulkin avulla. Androidissa on `sysprop`-rajapinta property-arvojen käsittelyyn sovelluksesta. Propertyillä voidaan muuttaa myös käyttöjärjestelmän toimintaa, kuten SELinuxin käytäntöjä.

Lähteet
-------

* 
* 

### Viitteet

1. ↑  Google is adding Kotlin as an official programming language for Android development  17.5.2017. Verge. Viitattu 17.2.2020. (englanniksi)
2. ↑  Lardinois, Frederic: Kotlin is now Google’s preferred language for Android app development  7.5.2019. TechCrunch. Viitattu 19.2.2020. (englanniksi)
3. 1 2  Platform Architecture *developer.android.com*. Viitattu 29.2.2020. (englanniksi)
4. ↑  Experimental Google ART runtime in Android KitKat can bring twice faster app executions *phonearena.com*.  7.11.2013. Viitattu 29.2.2020. (englanniksi)
5. ↑  Command line tools *developer.android.com*. Viitattu 22.7.2022. (englanniksi)
6. 1 2  Alex Mullis: The best Android developer tools for getting started *androidauthority.com*.  7.4.2021. Viitattu 22.7.2022. (englanniksi)
7. ↑  How to Setup Eclipse for Android App Development *instructables.com*. Viitattu 22.7.2022. (englanniksi)
8. ↑  Android Development *visualstudio.microsoft.com*. Viitattu 22.7.2022. (englanniksi)
9. ↑  Android Jetpack *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
10. ↑  User Interface & Navigation *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
11. ↑  Flutter architectural overview *docs.flutter.dev*. Viitattu 18.7.2022. (englanniksi)
12. 1 2 3 4 5  Application Fundamentals *developer.android.com*. Viitattu 13.9.2020. (englanniksi)
13. ↑  Support different languages and cultures *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
14. ↑  Run apps on the Android Emulator *developer.android.com*. Viitattu 20.7.2022. (englanniksi)
15. ↑  Test in Android Studio *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
16. ↑  Test your app *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
17. ↑  Android Debug Bridge (adb) *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
18. ↑  Configure on-device developer options *developer.android.com*. Viitattu 21.7.2022. (englanniksi)
19. ↑  Android App Bundle *Android Developers*. Viitattu 10.6.2021. (englanniksi)
20. ↑  The Android Profiler *developer.android.com*. Viitattu 17.8.2022. (englanniksi)
21. ↑  Android vitals *developer.android.com*. Viitattu 17.8.2022. (englanniksi)
22. ↑  Add System Properties *source.android.com*. Viitattu 21.10.2023. (englanniksi)


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * n
* k
* m
Android |
| --- |
|  |
| **Kehittäjät**: Google & Open Handset Alliance |
|  |
| Android-ympäristö | 
* Android Runtime
* Dalvik-virtuaalikone
* APK
* Android App Bundle

 | Androidin logo |
|  |
| Sovelluskehitys | 
* Yleistä
* Kotlin
* Eclipse
* Android Studio
* Google I/O
* Delphi
* Lazarus
* Free Pascal

 |
|  |
| Sovelluskaupat | 
* Google Play
* Amazon Appstore
* Samsung Galaxy Apps
* F-Droid
* Aptoide
* GetJar

 |
|  |
| Johdannaiset | 
* Android Auto
* Android Things
* Android TV
* Android Wear

 |
|  |
| Vaihtoehtoiset käyttöliittymät | 
* Asus Zen UI (Asus)
* Color OS (Oppo)
* Emotion UI (Huawei)
* Flyme (Meizu)
* HTC Sense (HTC)
* MIUI (Xiaomi)
* Optimus UI (LG)
* TouchWiz, Samsung Experience, One UI (Samsung)

 |
|  |
| Forkit ja muut versiot | 
* Android-x86
* CyanogenMod
* Fire OS (Amazon)
* LineageOS
* Nokia X Platform
* OxygenOS (OnePlus)
* Replicant

 |
|  |
| Muuta | 
* Google Daydream
* Tango
* Roottaus
* Material design

 |
|  |
| 
* Android-sovellukset
* Android-pelit
* Android-valmistajat
* Android-pohjaiset laitteet

 |

 |