android (v angličtině „endroid“)TakéAndroid OS, Android AOSP, Google AndroidZákladní

Definice

Android je operační systém postavený nad linuxovým jádrem, který vyvíjí Google a otevřeně uvolňuje jako projekt AOSP. Android pohání převážnou většinu chytrých telefonů, dále tablety, televize, hodinky i palubní systémy aut. Aplikace se pro něj píší hlavně v Kotlinu nebo Javě a distribuují přes Google Play i alternativní obchody.

Kategorie: Mobilní vývojAktualizováno

Než se na to spolehnete: Konkrétní číselné požadavky Google Play na targetSdk a pravidla distribuce v EU podle DMA se často mění, proto jsou v textu uvedeny bez konkrétních čísel a dat. Doména android-developers.googleblog.com nemusí projít kontrolou povolených hostitelů (není v seznamu jako developers.google.com), stejně tak developer.android.com a source.android.com; pokud je server zahodí, zůstane jen Wikipedia.

Z čeho se Android skládá

Android stojí na upraveném linuxovém jádru, nad kterým leží vrstva nativních knihoven (grafika, kodeky, kryptografie), běhové prostředí ART a sada systémových služeb. Aplikace nemluví s jádrem přímo: komunikuje se systémovými službami přes meziprocesovou komunikaci Binder. Každá aplikace běží pod vlastním uživatelským ID Linuxu, což je základ izolace mezi aplikacemi.

AOSP versus Android od Googlu

Android Open Source Project je otevřeně dostupný základ systému. Google Mobile Services (Play Store, Play Services, mapy, přihlášení účtem) jsou uzavřená nadstavba, kterou výrobce získává licencí a certifikací zařízení. Rozdíl je praktický: telefon s AOSP bez GMS neumí spustit aplikace závislé na Play Services, například část push notifikací nebo platby přes Google Pay. Odtud pramení i existence odnoží typu vlastních systémů čínských výrobců.

Jak se pro Android vyvíjí

Doporučeným jazykem je od roku 2019 Kotlin, dále funguje Java a přes NDK i C a C++. Standardní nástroj je Android Studio s buildem přes Gradle, výsledkem je balíček APK, respektive App Bundle (AAB), který Play Store vyžaduje pro nové aplikace a ze kterého sám generuje varianty pro konkrétní zařízení. Uživatelské rozhraní se dnes staví deklarativně v Jetpack Compose, starší projekty používají XML layouty. Vedle nativního přístupu běží na Androidu i hybridní aplikace ve WebView (Capacitor, Cordova) a multiplatformní frameworky jako Flutter nebo React Native.

Fragmentace a proč komplikuje život

Android běží na tisících modelů od desítek výrobců, každý s jiným rozlišením, čipsetem, vrstvou nad systémem a agresivitou správy baterie. Aktualizace systému doručuje výrobce, takže v terénu je vždy současně živých mnoho verzí. Vývojář si volí minSdk (nejnižší podporovaná verze) a targetSdk (verze, jejíž pravidla aplikace respektuje); Google Play navíc vynucuje minimální targetSdk pro nové nahrávky. Testování jen na jednom telefonu proto pravidelně končí chybami u zákazníků.

Oprávnění a bezpečnostní model

Citlivé funkce (poloha, kamera, kontakty, notifikace) vyžadují běhové oprávnění, které uživatel může kdykoli odebrat. Novější verze přidaly dočasná oprávnění, přibližnou polohu, automatické odebrání u nepoužívaných aplikací a Scoped Storage, který omezil volný přístup do souborového systému. Aplikace musí být podepsaná; Play navíc typicky spravuje podpisový klíč přes Play App Signing.

Kde Android běží kromě telefonu

Stejný základ nese Wear OS pro hodinky, Android TV a Google TV, Android Automotive přímo v palubní desce vozu a ChromeOS umí spouštět androidí aplikace. Sdílený systém neznamená sdílené UI: hodinky mají jiný vstup, televize se ovládá dálkovým ovladačem a fokusem, auto má striktní pravidla proti rozptylování řidiče.

Příklady z praxe

  1. Deklarace minSdk a targetSdk v Gradle

    E-shop chce podpořit starší telefony, ale zároveň splnit požadavky Google Play. V build skriptu modulu se nastaví nejnižší podporovaná verze a cílová verze API. Snížení minSdk rozšíří dosah, ale znamená víc kompatibilních větví v kódu.

    android {
        namespace = "cz.priklad.eshop"
        compileSdk = 35
    
        defaultConfig {
            applicationId = "cz.priklad.eshop"
            minSdk = 26      // Android 8.0
            targetSdk = 35
            versionCode = 42
            versionName = "3.1.0"
        }
    }
  2. Žádost o oprávnění k notifikacím

    Od Androidu 13 nestačí notifikace jen odeslat: aplikace si musí za běhu vyžádat oprávnění POST_NOTIFICATIONS. Doručovací aplikace, která to neošetřila, po aktualizaci systému přestala kurýrům zobrazovat upozornění na nové objednávky, přestože server zprávy dál odesílal.

    val launcher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { granted ->
        if (!granted) showFallbackBanner()
    }
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        launcher.launch(Manifest.permission.POST_NOTIFICATIONS)
    }

Časté omyly

MýtusAndroid je Linux, takže na něm poběží běžné linuxové programy.
Ve skutečnostiAndroid sice používá linuxové jádro, ale nemá GNU userland, klasickou distribuci knihoven ani obvyklý init systém. Desktopové linuxové binárky se bez rekompilace a přizpůsobení nespustí.
MýtusAndroid je celý open source, Google do něj nemluví.
Ve skutečnostiOtevřený je AOSP. Google Play, Play Services a řada systémových aplikací jsou uzavřené a výrobce k nim potřebuje licenci plus certifikaci zařízení, jinak telefon Play Store nedostane.
MýtusKdyž aplikace funguje na mém telefonu, funguje všude.
Ve skutečnostiFragmentace zařízení, výrobcovské nadstavby a odlišná správa běhu na pozadí způsobují, že se chování liší napříč značkami. Testování na více verzích API a modelech je nutnost, ne luxus.

Časté dotazy

Kotlin, nebo Java pro nový projekt na Androidu?
Kotlin je pro nové androidí projekty výchozí volba. Google jej od roku 2019 označuje za preferovaný jazyk, nové knihovny Jetpack i dokumentace vycházejí primárně v Kotlinu a Jetpack Compose je čistě kotlinové API. Java zůstává plně podporovaná a obě řeči se v jednom projektu míchají bez problémů, takže starší kódová základna se dá převádět postupně. Pro tým, který Javu roky používá, není nutné přepisovat vše; nový kód se ale vyplatí psát v Kotlinu kvůli null-safety, korutinám a kratšímu zápisu.
Jaký je rozdíl mezi APK a AAB?
APK je hotový instalační balíček, který obsahuje kód a zdroje pro všechny podporované konfigurace zařízení. AAB (Android App Bundle) je publikační formát: vývojář nahraje jeden bundle a Google Play z něj sám vygeneruje a podepíše optimalizované APK pro konkrétní procesorovou architekturu, hustotu displeje a jazyk. Výsledkem je menší stažení. Google Play vyžaduje pro nové aplikace AAB, zatímco pro distribuci mimo obchod, testování nebo sideload se dál používá APK.
Musí se aplikace pro Android publikovat přes Google Play?
Publikace přes Google Play není jediná cesta. Android umožňuje instalaci z jiných zdrojů, takže aplikaci lze distribuovat přes alternativní obchody (Galaxy Store, Huawei AppGallery, F-Droid), přes vlastní web jako APK nebo v podnikovém prostředí přes správu mobilních zařízení. Play přesto zůstává hlavní kanál kvůli dosahu, aktualizacím a platbám. V Evropské unii navíc pravidla nařízení o digitálních trzích tlačí na širší otevření distribučních kanálů, což se průběžně mění.
Co znamená targetSdk a proč ho Google Play vynucuje?
targetSdk je verze Android API, jejíž pravidla chování aplikace prohlašuje za podporovaná. Systém podle něj rozhoduje, zda na aplikaci uplatní nová omezení, nebo jí ponechá starší kompatibilní chování. Google Play vyžaduje pro nové aplikace a aktualizace targetSdk blízko aktuální verze, aby uživatelé dostali novější bezpečnostní a soukromí chránící pravidla, například běhová oprávnění a Scoped Storage. Zvýšení targetSdk proto není formalita: vyžaduje otestovat, co se v dané verzi změnilo, a kód přizpůsobit.
Jak se řeší fragmentace verzí Androidu v praxi?
Fragmentace se v praxi řeší kombinací několika opatření. Vývojář zvolí minSdk podle reálného zastoupení verzí v cílové zemi, používá knihovny AndroidX a Jetpack, které novější API zpřístupní i starším verzím, a rozdíly v chování větví podle Build.VERSION.SDK_INT. Následuje testování na emulátorech s různými úrovněmi API a na fyzických zařízeních hlavních výrobců, protože nadstavby Samsungu, Xiaomi či Huawei mění zejména správu procesů na pozadí a notifikace. Postupné uvolňování verze v Play Console pomáhá chyby odhalit dřív, než se dostanou ke všem.

Zdroje

  1. Android (operating system)(otevře se v novém okně)Wikipedia, 2024

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.