Vývoj Android platformy

Nenásilný úvod do sveta vývoja embedded Androidu.

4 years ago   •   11 min read

By Vladimír Záhradník
Image by Pexels from Pixabay

Začať s vývojom Android platformy môže byť spočiatku zastrašujúce. Hoci nejakú dokumentáciu nájdete na domovskej stránke AOSP, nie je zďaleka úplná. A hneď ako sa pokúsite pridať nejaké funkcie do zdrojového kódu Androidu, len čo sa pozriete na ten masívny zdrojový kód, môžete sa cítiť stratení. Keď začnete prehľadávať Internet, nájdete blogy, možno podobné tomuto. Mnohé z nich sú zastaralé, ale aj tak poskytujú dôležité informácie, ktoré vás aspoň nasmerujú, kam sa máte začať pozerať.

Tento článok sa pokúsi vysvetliť terminológiu týkajúcu sa vývoja Android platformy. Nebude zďaleka úplný, ale dúfam, že vám poskytne dobrý počiatočný bod pre vaše snahy.

Android ekosystém a AOSP

Začnime tým, že si zadefinujeme, čo je to AOSP a aký má vzťah k Android ekosystému. AOSP je skratka pre Android Open Source Project. Tento projekt obsahuje zdrojový kód základného Android systému, ktorý Google zverejnil, aby umožnil ostatným používateľom a spoločnostiam vybudovať si ich vlastnú odnož Androidu. Zvyčajne to znamená preportovať AOSP kód, aby bežal na ich embedded platforme. V čase písania je najnovšia verzia AOSP 8.1.0 s kódovým označením Oreo, pozrite si čísla zostáv. Vy si viete zostaviť flashovateľný obraz, ktorý sa zvyčajne nazýva ROM a ktorý môžete spustiť na vašom zariadení. Avšak veľmi rýchlo zistíte, že mu chýbajú niektoré funkcie. Android softvér vo vašom telefóne zvyčajne pozostáva z týchto stavebných blokov:

Obraz s čistým AOSP má obmedzenú funkčnosť. Ak ho zostavíte pre telefón, môžete na takomto zariadení telefonovať. Tiež je v ňom webový prehliadač na základné prezeranie webu a zopár ďalších aplikácií. Ale nenájdete v ňom žiadny obchod s aplikáciami. Ak chcete nainštalovať do takto obmedzenej ROMky novú aplikáciu, viete to spraviť cez Android Debug Bridge.

adb install názov_aplikácie.apk

Alebo môžete aplikáciu skopírovať na SD kartu alebo vnútorné úložisko, napr. pomocou MTP, a nainštalovať ju kliknutím na jej názov súboru v Androide, čím sa zobrazí inštalačné dialógové okno. Tak či tak, potrebujete získať aplikáciu v APK formáte.

Rozdiely medzi ROMkami

Skratka ROM znamená read-only memory (pamäť určená len na čítanie). V skutočnosti je to flashovateľný binárny súbor a volá sa ROM len preto, že sa flashuje na diskový oddiel zariadenia, ktorý sa zvyčajne pripája v režime len na čítanie. Teda za normálnych okolností nie je možné modifikovať obsah tejto ROMky.

Je možné, že ste sa v minulosti čudovali, ako je možné, že niektoré predinštalované aplikácie nie je možné odinštalovať, ale len zakázať. Dôvod je ten, že sú uložené priamo v tejto ROMke, ktorú bežne Android neupravuje. Ak telefón obnovíte do továrenských nastavení, tieto aplikácie v ňom stále budú.

Originálna (stock) vs. upravená (custom) ROM

Originálna ROMka je operačný systém predinštalovaný do zariadenia jeho výrobcom. Zvyčajne, keď sa bavíme o Androide, prichádza predinštalovaná s rôznymi OEM aplikáciami a upraveným Android UI prostredím. Ide v podstate o systém odvodený od AOSP. Názory na takéto vylepšenia sa medzi používateľmi líšia, ale vo všeobecnosti väčšina používateľov telefónu tieto veci veľmi nerieši a používajú to, čo je predinštalované. Zvyčajne originálne ROMky dostávajú online aktualizácie. Medzi významné príklady takýchto systémov patria Emotion UI od Huawei, TouchWiz od Samsungu, Sense od HTC, MIUI od Xiaomi alebo Xperia UI od Sony. Tieto systémy odvodené od AOSP zvyčajne nemajú ich zmeny zverejnené a vy nemôžete zahrnúť vylepšenia z takýchto systémov do vašej vlastnej Android ROMky. MIUI je výnimka, jej zdrojový kód nájdete na GitHube. Originálna ROMka je často ten najstabilnejší softvér, aký môžete na vašom zariadení mať, pretože jeho výrobca je priamo zodpovedný za vývoj a testovanie.

Na druhej strane, ktorákoľvek osoba alebo komunita môže spraviť upravenú ROMku. Môže ísť o upravenú originálnu ROMku (akýmkoľvek spôsobom) alebo môže byť zostavená od nuly. Napríklad, originálnu ROMku je možné upraviť vymazaním predinštalovaných aplikácií a pridaním ďalších. Vedľa súboru na stiahnutie by ste vždy mali nájsť popis zmien. Aktualizáciu upravenej ROMky na novšiu verziu, ak je vôbec vydaná, robí takmer vo všetkých prípadoch ručne sám používateľ, ale existuje zopár výnimiek.

Už som spomenul, že upravené ROMky nemusia byť nutne založené na Androide. Dobrým príkladom je nedávny port Sailfish OS pre Xperiu X. Tento telefón bol pôvodne dodávaný s Androidom, ale môže na ňom bežať systém založený na Linuxe.

AOSP ROM

Keď hovoríme o AOSP ROM, ide o upravenú ROMku, ktorú ľudia vytvárajú zo zdrojového kódu AOSP s minimálnymi zmenami. Vzhľad a správanie takejto ROMky majú najbližšie k tomu, čo ponúka Google na ich vlajkových telefónoch ako Google Pixel 2.

Často má táto ROMka v názve AOSP a väčšinu času ju vydáva jednotlivec, ktorý vlastní rovnaký telefón alebo tablet ako vy. Pozrite sa sem, aby ste videli stránku s funkciami takejto ROMky.

Komunitné Android distribúcie

Sú z veľkej časti postavené na AOSP zdrojovom kóde, ale majú nad ním implementované vlastné zmeny. Zvyčajne sú všetky ich úpravy verejne dostupné, napríklad na GitHube. Ich vzhľad a správanie sú veľmi podobné AOSP ROMke, ale často majú tieto distribúcie implementované dodatočné vizuálne vylepšenia nad kódom AOSP. Pretože sú tieto distribúcie riadené komunitou, dovtedy kým nejaký vývojár používa telefón, ako je ten váš, je dobrá šanca, že budete mať podporu pre váš telefón dávno po tom, ako výrobca vášho telefónu prestal zverejňovať aktualizácie. Čím populárnejšie je vaše zariadenie, tým rozšírenejšiu podporu zvyčajne dostane. A vždy si môžete zariadenie podporovať sami, ako sa vraví: „ušpiniť si ruky.“

Medzi najznámejšie komunitné Android distribúcie patria:

Lineage OS je podľa môjho názoru z nich dvoch oveľa rozšírenejší. Jeho najväčšou výhodou je podpora pre veľké množstvo telefónov, tabletov a tiež pre Android TV krabičky.

Výrobcovia čipov (vendori), výrobcovia zariadenia (OEM), binárne ovládače a OEM aplikácie

Možno si myslíte že výrobca čipu a zariadenia je ten istý, tiež som si to myslel. Ale sú rôzni. Následuje podrobný popis.

Výrobca čipu (vendor)

Výrobca čipu produkuje čip alebo čipy použité vnútri zariadenia. Zvyčajne ide o vysoko integrovaný obvod, známy tiež ako SoC. Takéto SoC systémy obsahujú procesor, pamäť, Bluetooth, WiFi a tiež majú oddelené obvody, ktoré zabezpečujú mobilnú konektivitu, nazývame ich baseband procesor. Keď vydá Google novú hlavnú verziu Androidu, výrobca čipu upraví kód, aby korektne fungoval s jeho čipmi. Medzi významných výrobcov patria Qualcomm, Broadcom, MediaTek a Intel.

Výrobca SoC poskytuje referenčnú implementáciu Androidu založenú na AOSP, ktorú môže výrobca zariadenia prispôsobiť. Súčasťou tejto implementácie sú tiež binárne ovládače pre SoC komponenty. Binárne ovládače v tomto kontexte znamenajú to, že výrobca zariadenia nemá prístup k zdrojovým kódom ovládačov.

Výrobca zariadenia (OEM)

OEM (Original Equipment Manufacturer) je výrobca vášho telefónu alebo tabletu. Vyberie si SoC, na ktorom postaví svoj produkt — navrhne preňho obal, vyberie vhodný displej a ďalšie komponenty a všetky tieto kúsky pospája dokopy, aby vytvoril plnofunkčný produkt. Výrobca zariadenia je zákazníkom výrobcov čipov.

V niektorých prípadoch môže byť výrobca zariadenia zároveň výrobca čipov niektorých komponentov. Typickým príkladom je spoločnosť Sony, ktorá používa fotoaparáty vyvinuté v ich divízii. V takýchto prípadoch poskytuje Sony ovládače a potrebný kód na to, aby tieto fotoaparáty fungovali.

Výrobca zariadenia integruje všetky komponenty, robí testovanie, úpravu AOSP a zvyčajne tiež pribalí do systému zopár jeho aplikácií. Tie môžu do systému pridať nové funkcie, pridať alternatívne obchody aplikácií alebo jednoducho len poskytnúť alternatívy pre niektoré aplikácie od Googlu.

Pokiaľ chcete vedieť viac, pozrite sa na tento článok od Sony.

Android jadro

Android jadro je založené na čistom linuxovom jadre, do ktorého vývojári Androidu pridali zmeny, aby podporovalo ich špecifickú funkčnosť:

  • Wake locky
  • Low-memory killer
  • Ovládač Binder IPC
  • Anonymnú zdieľanú pamäť (ashmem)
  • Ovládač alarmu
  • Logger

Postupom času sa väčšina týchto rozšírení stala generickejšia a boli začlenené do čistého Linuxu, ale potrebujete ich zapnúť v konfigurácii jadra. Taktiež platí, že rôzne ovládače sú stále iba v staging strome Linuxu.

Aby ste mohli zostaviť linuxové jadro s podporou pre Android, potrebujete len pridať potrebné riadky do konfigurácie zostavenia linuxového jadra:

CONFIG_ASHMEM=y
CONFIG_STAGING=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_LOGGER=y
CONFIG_ANDROID_RAM_CONSOLE=y
CONFIG_ANDROID_LOW_MEMORY_KILLER=y

Čisté jadro, dokonca so zapnutými rozšíreniami pre Android, pravdepodobne na vašom zariadení nenabehne. Preto zvyčajne výrobcovia SoC poskytujú upravené zdrojové kódy jadra založené na čistom jadre. Neskôr tieto zdrojové kódy používajú výrobcovia zariadení, aby prispôsobili jadro pre ich zariadenia. Keďže je linuxové jadro pod GPLv2 licenciou, zmeny urobené výrobcom čipu alebo zariadenia by mali byť k dispozícii komukoľvek, kto o ne požiada. Zvyčajne sú upravené zdrojové kódy jadra na GitHube výrobcu zariadenia, podobe ako v tomto repozitáre pre zariadenia Xperia. Niektorí výrobcovia zariadení však ignorujú licencie a neposkytujú pre svoje zariadenia zdrojové kódy upraveného jadra. Preto je vždy dobrým zvykom spraviť si pred kúpou telefónu nejaký prieskum.

Väčšinu času nepotrebujete kompilovať jadro zo zdrojového kódu a jednoducho použijete to, ktoré bolo zostavené pre originálnu ROMku. To by malo pre vašu ROMku fungovať vtedy, ak je hlavná verzia Androidu vo vašej ROMke aj tej originálnej totožná. Avšak, ak chcete dostať do jadra ďalšiu funkčnosť, napríklad povoliť podporu pre IPv6, budete musieť jadro zostaviť zo zdrojového kódu.

Linaro

Linaro je organizácia, ktorá okrem iného pomáha jej členom s rozbehaním platformy a udržiava upravené jadro pre Android. Také, ktoré blízko sleduje hlavný vývojový strom Linuxu. Výrobcovia čipov a následne zariadení odvádzajú svoje jadrá zo stromu organizácie Linaro. Medzi členmi sú Google, Qualcomm, Samsung a mnoho ďalších.

Baseband procesor a certifikácia

V ére hlúpych telefónov bol baseband procesor jediným procesorom v telefóne. Riešil mobilnú konektivitu, Bluetooth, displej telefónu, interakciu s používateľov a mnoho iných vecí.

Smartfóny stále používajú tento baseband procesor, ale len ako modem, ktorý sa pripája k mobilnej sieti. Hlavný SoC rieši všetky interaktívne funkcie ako intreakciu s používateľom a displej, a baseband procesor rieši mobilnú konektivitu. Baseband procesor má svoj operačný systém, ktorého zdrojové kódy sú uzavreté. Výrobcovia zariadení ho zrejme používajú ako čiernu skrinku. Spôsob integrácie tohto procesora do hlavného SoC sa líši. Jeden spôsob, ako môžu spolu komunikovať, je cez vnútornú sériovú linku, ktorá je dostupná hlavnému systému na rozhraní /dev/ttySx, kde x je nejaké číslo. Pokiaľ vám niečo hovoria AT príkazy starých vytáčacích modemov, toto rozhranie vám bude veľmi povedomé.

Napríklad, aby ste vytočili telefónne číslo, zadáte takýto príkaz:

atd<telefónne_číslo>

Pozrite sa na tento dokument. Je dobrým zdrojom informácií ohľadom AT príkazov.

Prečo samostatný baseband procesor?

Túto otázku vedia zodpovedať len výrobcovia čipov, ja v tomto prípade len hádam. Ale myslím si, že jedným z hlavných dôvodov je certifikácia na úrade FCC v USA a u iných podobných organizácií inde.

Zariadenie, ktoré sa pripája do mobilnej siete, musí pracovať podľa štandardov, hlavne tých, ktoré definuje 3GPP. Predstavte si záškodnícky telefón, ktorý by operátor vpustil do svojej siete. Tento telefón by generoval neplatné požiadavky alebo odpovede. Takýmto situáciám sa chceme vyhnúť, každé zariadenie musí spĺňať konkrétne štandardy.

V prípade baseband procesora sa uňho certifikuje návrh hardvéru a softvérová implementácia. Zakaždým, keď sa softvér zmení, tento procesor je potrebné recertifikovať. Tým, že ponecháme baseband procesor ako samostatnú jednotku, ktorá sa používa len ako modem, softvér pre hlavný SoC, t.j. Android, môžeme aktualizovať bez takejto dôkladnej recertifikácie. To neznamená, že nikto aktualizáciu netestuje. Znamená to len to, že to nie je taký zložitý a časovo náročný proces. Pamätajte, výrobcovia zariadení chcú poskytovať aktualizácie s bezpečnostnými opravami v horizonte mesiacov, nie rokov. A toto riešenie im to umožňuje.

Pokiaľ vás táto téma zaujíma viac, pozrite si tento vynikajúci článok.

Program kompatibility s Androidom

Keď som rozoberal rôzne typy ROMiek, tiež som spomenul, že výrobcovia zariadení môžu pridať do AOSP rôzne neštandardné funkcie, upraviť vzhľad, ale tiež zmeniť správanie. Do určitej miery je to žiadúce, pretože to umožňuje výrobcovi zariadenia vyniknúť medzi ostatnými, pričom ich systém odvodený od AOSP môže byť jedným z dôvodov, prečo si používatelia vyberú telefóny od neho.

Avšak z pohľadu Googlu, ten musí dávať dobrý pozor na to, ako veľmi sa produkt odkláňa od štandardného chovania. Preto ak chce výrobca zariadenia uviesť produkt, ktorý oficiálne obsahuje všetky štandardné Google aplikácie, takýto produkt musí prejsť programom kompatibility s Androidom.

Testovacia suita pre zaistenie kompatibility s Androidom

Zariadenie kompatibilné s Androidom by malo:

Komunitné ROM

Komunitných Android distribúcí odvodených od AOSP sa tento program kompatibility netýka a oficiálne nemôžu Google aplikácie distribuovať. Je na používateľovi, aby si tieto aplikácie niekde na Internete stiahol a nainštaloval.

Odklon od kompatibility s Androidom

Občas môže byť pre výrobcu zariadenia výhodné, aby sa odklonil od kompatibility s Androidom. Google aplikácie nepotrebuje, pretože buduje produkt na iné účely.

Predstavte si vzdialený terminál, ktorý má dotykovú obrazovku, zopár hardvérových tlačidiel a vlastné aplikácie na ovládanie ústredného kúrenia a iných IoT zariadení v domácnosti. Takéto zariadenie si môžete postaviť na ktorejkoľvek vývojovej platforme ako Raspberry Pi. Vďaka otvorenosti AOSP však môžete naplno rozvinúť vašu predstavivosť. Napríklad môžete rozšíriť Android Framework a SDK, aby pridávali novú funkčnosť.

Google aplikácie

Google Mobile Services (GMS) sú aplikácie a služby od Googlu, ktoré nie sú súčasťou AOSP. Google poskytuje tieto aplikácie jeho partnerom, ktorí spĺňajú požiadavky programu pre kompatibilitu Androidu a majú licenciu na použitie takýchto aplikácií. Často sa v komunite nazývajú Google Apps.

Všetci dôveryhodní partneri Googlu môžu tieto aplikácie pridať do svojich ROMiek. Táto suita obsahuje aplikácie ako YouTube, Google Hudba a predovšetkým obchod Google Play, ktorý umožňuje nainštalovať iné aplikácie z oficiálneho obchodu.

Projekt Open GApps

Komunitné ROMky nespĺňajú požiadavky programu pre kompatibilitu od Googlu a preto neobsahujú Google aplikácie. Používatelia, ktorí chcú používať aplikácie a služby od Googlu, potrebujú tieto aplikácie niekde získať a nainštalovať ich samostatne.

V minulosti ste mohli nájsť tieto aplikácie roztrúsené po celom Internete. Avšak zvyčajne ste videli odkazy na stiahnutie v popise upravenej ROMky.

V súčasnosti je hlavným zdrojom týchto aplikácií projekt Open Gapps. Ukladá APK súbory Google aplikácií pre rôzne hlavné revízie AOSP a tiež pre rôzne architektúry procesora. Používatelia extrahovali binárky z oficiálnych obrazov od rôznych výrobcov zariadení. Ak pre vašu platformu nejaká aplikácia chýba, je to preto, že ju nikto ešte neposkytol. Pozrite si ich GitHub repozitár a zvážte, že tam prispejete, pokiaľ máte APK súbory, ktoré sa tam nenachádzajú.

Stiahnutie správneho balíka GApps je veľmi jednoduché a viete to docieliť v troch krokoch.

Najprv vyberte platformu podporovanú vaším zariadením a ROMkou. V súčasnosti sa takmer na všetkých novších telefónoch používa ARM64 (alebo ARMv8-A). Pokiaľ si nie ste istí, dohľadajte si špecifikácie k telefónu alebo sa opýtajte na fórach.

V ďalšom kroku si musíte vybrať hlavnú verziu Androidu, pre ktorú chcete balík stiahnuť. Android 8 používa iné aplikácie ako Android 6.

Nakoniec si vyberte variant GApps. Variant „stock“ obsahuje všetky aplikácie zahrnuté v zariadeniach Google Nexus/Pixel, avšak zaberá viac miesta ako variant „mini“ alebo „nano.“ Pokiaľ má vaše zariadenie menšiu vnútornú pamäť, nainštalujte jednoducho „nano“ alebo „pico“ balík. Obsahuje len tie nutné aplikácie, aby ste rozbehali Play Store. Potom si už môžete stiahnuť len tie aplikácie, ktoré potrebujete.

Balík GApps obsahuje inštalačný skript, ktorý nainštaluje aplikácie na systémový oddiel zariadenia určený len na čítanie.

Obmedzenia Googlu pre necertifikované zariadenia

V roku 2018 začal Google aplikovať obmedzenia pre necertifikované zariadenia. Znamená to, že už viac nemôžete pristupovať do obchodu Google Play, pokiaľ model vášho zariadenia nie je na zozname povolených zariadení. Avšak Google uznáva upravené ROMky a poskytuje spôsob, ako pridať na zoznam povolených zariadení aj to vaše. No pokiaľ používate oficiálnu ROMku napríklad na zariadení od Huawei, nuž, máte smolu!

Chybová správa „Zariadenie nie je certifikované“

Alternatívy pre Google Apps

Niektorí používatelia nutne nepotrebujú aplikácie od Googlu alebo služby od Googlu nechcú používať vôbec. Namiesto toho uprednostňujú slobodný softvér všade tam, kde je to možné. Zvyčajne to viete docieliť nainštalovaním alternatívneho obchodu s názvom F-Droid.

Okrem F-Droidu existujú aj ďalšie alternatívne obchody ako Amazon App Store, ktorý si spravuje sám Amazon. Je možné ho nainštalovať ako jediný obchod alebo vedľa obchodu od Googlu. Všetky zariadenia Amazon FireTV tento obchod používajú. Pod kapotou majú totiž všetky upravený Android.

Záver

Dúfam, že tento článok objasnil niektoré veci ohľadom celého Android ekosystému. Pokiaľ sa chcete dozvedieť viac, pozrite si webstránku XDA-Developers, ktorá je medzi vývojármi platformy veľmi populárna a poskytuje základné informácie, ktoré častokrát inde nenájdete.

Pokiaľ vám prišiel tento článok užitočný alebo máte návrhy, ako ho vylepšiť, dajte mi o tom vedieť do komentárov. Ďakujem!

Spread the word

Keep reading