Sissejuhatus Androidi opsüsteemi

Androidi opsüsteem on avatud lähtekoodiga süsteem. Paljud inimesed väidavad, et see on Linux, kuid see pole täiesti tõsi. Kuigi Androidil on tuumad, mis sarnanevad Linuxi omadega, on see ainus, mis on sarnane. Täna käsitleme sügavamalt Androidi opsüsteemi sisemisi külgi, mis on protsessid, raamistik ja muud sarnased struktuurid. Alustame siis põhitõdedest ja vaatame Androidi opsüsteemi sisemist juuri.

Pärast iPhone'i ja Windows Lumia Seriesi, st Microsofti Windowsiga seotud telefonide vabastamist, soovis Google sama teha. Kuid nad tahtsid midagi, mis võiks olla avatud lähtekoodiga. Selle peamine põhjus oli see, et igaüks sai seda siluda, muudatusi vastavalt soovile muuta. Siis tuli Linuxi idee. Linux on täielikult avatud lähtekoodiga operatsioonisüsteem ja kogukond on kogu maailmas selle laialdaselt aktsepteerinud. See on üks neist opsüsteemidest, mida kasutatakse isegi rohkem kui Windows või Mac OSX. Pealegi on Linux võimeline käivitama peaaegu kõiki muid asju, mida saaks kasutada nii Macis kui ka Windowsis. Seega otsustas Google välja töötada opsüsteemi mobiiltelefonile, millel on sama põhiline sisemine kest nagu Linuxi oma, nii et see ühilduks peaaegu kõigega ja välimine kest oleks välja töötatud vastavalt vajadusele, millal ja ka selles, kus seda vaja on.

Androidi opsüsteem avatud lähtekoodiga projektina (AOSP)

Androidil on võimalus meie enda seadme draivereid ja funktsioone vabalt muuta, leiutada ja rakendada. Kui nüüd rääkida, siis on Androidi opsüsteemi viis erinevat kihti. See on järgmine:

Nagu ülaltoodud pildil näete, on esimene kiht rakenduse raamistik, teine ​​on Binderi IPC puhverserverid, kolmas koosneb Androidi süsteemiteenustest, neljas on HAL või täisvormiks Riistvara abstraktsiooni kiht ja viimane olles Linuxi tuum. Nagu ma juba ütlesin, näete, et Androidi opsüsteem koosneb ainult Linuxist Kernelist. Vaatame nüüd neid kõiki ükshaaval.

Androidi rakenduste raamistik

Rakenduse arendajad kasutavad seda rakenduste raamistikku Androidi jaoks. Sellel Androidi osal on vähemalt midagi vaja teha riistvarakihiga. Androidi rakendused on programmeeritud Java keeles. Pärast rakenduse programmeerimist aitavad Androidi SDK tööriistad andmeid ja ressursifaile, näiteks XML-faile, jar-faile, manifestifaile ning muid pilte ja muid asju koondada ühte arhiivipaketti laiendiga .apk. Seda apk-faili saab kasutada rakenduse installimiseks Android-seadmetele vaid ühe klõpsuga. Kuna Androidi opsüsteem käitub nagu Linuxi keskkond, on ka rakenduse käitumine siin sama. Iga rakendust peetakse teisest eraldi kasutajaks ja see töötab oma virtuaalmasinas. See muudab rakenduse programmeeritud koodi isoleerituks ja takistab ka selle nakatumist teistelt, kui pole selgesõnaliselt öeldud. Igal teisel rakendusel on oma kasutajatunnus ja igal teisel protsessil on oma virtuaalne masin.

Androidi rakenduste raamistik töötab vähima privileegi põhimõttel. Vähimate privileegide põhimõte tähendab, et alati, kui uut rakendust tuleb käivitada, kuid mälu pole saadaval, sulgeb Androidi süsteem automaatselt vana rakenduse, mida pole taustal töötamiseks vaja. See on Androidi opsüsteemi turvalisuse üks paremaid osi. See põhimõte võimaldab igal rakendusel oma tööks vajalikku juurdepääsu ainult sellele. Seega ei saa rakendus saada luba selleks, mida pole ette nähtud. See omakorda loob Androidi opsüsteemi enda sees väga turvalise keskkonna.

Binderi IPC on tuntud kui Binderi protsessidevaheline suhtlus. See liides võimaldab programmeerijal luua rakenduse, et suhelda teiste rakendustega. Sagedamini ei suhtle rakendused, vaid protsessid. Binderi IPC aitab korraga käivitada mitut protsessi samal ajal. See köiteteostus on hangitud Androidi opsüsteemi kerneli kaudu. Nüüd on tõstatatud küsimusi, miks peab sideaine tuumas püsima ja miks ei saa see käivituda Linuxi IPC mehhanismidest? Selle peamiseks põhjuseks on asjaolu, et sideaine väldib erinevalt teistest Linuxi süsteemi IPC-mehhanismidest ruumi tarbetut eraldamist. Kui olete kuulnud terminist "magic in python", siis näeks see Binderi STK rakenduste arendajale välja, kuna see on nende eest täielikult varjatud ja näib lihtsalt töötavat, erinevalt kõrgetasemelisest raamistikust, kus peate panema selle selgesõnaliselt toimima. See võimaldab kõrgetasemelisel raamistikul suhelda androidi opsüsteemi teenustega.

Androidi opsüsteemi süsteemiteenused

Teenus on kompileeritud kooditükk, mis töötab pikka aega androidi opsüsteemi taustal ilma ühtegi liidest andmata. Teenuse võib käivitada mis tahes rakendus, olgu see kasutaja või süsteem, kuid see töötab endiselt taustal, isegi kui rakendus on suletud. Siiski on kahte tüüpi teenuseid:

Alustatud teenused

Alustatud teenused käivituvad tavaliselt siis, kui mõni rakendus seda nõuab. Alustatud tüüpi teenus teeb tavaliselt siiski ainult ühe toimingu ega tagasta midagi.

Seotud teenused

Piiritletud teenused pakuvad kliendi ja serveri suhte liidest. Seotud teenus kestab seni, kuni esiplaanil olev rakendus töötab, ja see peatatakse, kui rakendustegevus on hävitatud.

Androidi süsteemiteenused pakuvad kasutajarakendustele vajalikku teavet, et nad saaksid korralikult töötada. Ja see süsteemiteenuste ja kasutajarakenduste vaheline suhtlus toimub kerneli Binderi IPC abil. Nüüd võib see üllatusena tulla, kuid mitte kõik Androidi rakendused pole Java-keeles kirjutatud. Mõni neist on kirjutatud C ja C ++ keeles. Need rakendused, mis peavad riistvaraga vahetus kontaktis olema, on kirjutatud C ja C ++. Selle peamiseks põhjuseks on asjaolu, et enamasti peavad süsteemiteenused olema riistvaraga pidevas kontaktis. Seetõttu on oluline, et kompileeritud kooditükk oleks ülikiire. Ja kui tegemist on riistvaralise kiirenduse ja suure jõudlusega, siis on C palju kiirem kui Java või mõni muu keel seal.

Pidevalt kasutatavad riistvarateenused, näiteks lähedussensorid, kiirendusmõõtur või puutetundlik ekraan tuleb kirjutada C-ga. Muu riistvara, näiteks kaamera või heli, kasutab enamasti JNI-kõnesid. Seega, kui te kunagi märkate, on puuteekraanid alati kiiremad kui kaamera käivitamine või muusikapala kaudu loo esitamine.

Süsteemiteenuse loomisel pange tähele, et teenused kipuvad põhiprotsessis käima ja see ei loo eraldi protsessi. Lühidalt, kui teie kood kavatseb teha mõnda protsessori ja GPU intensiivset tööd, näiteks kõrglahutusega mänge, siis peaksite eelistama samasse teenusesse uute lõimede loomist; muidu on dialoogiboksi „Rakendus ei reageeri” olemasolu alati suur.

Soovitatavad kursused

  • IT turvalisuse sertifitseerimise koolitus
  • Ruby on Rails kursuse täielik läbimine
  • Professionaalne CSS-koolitus
  • Programm HTML5 ja CSS3

Riistvara abstraktsiooni kiht

HAL ehk riistvara abstraktsiooni kiht on spetsiaalselt loodud müüjatele. Rakenduse arendajatel pole siin midagi vähe või peaaegu midagi teha. See kiht aitab funktsionaalsust sisestada ilma süsteemi muudatusi tegemata. Igal teisel süsteemil on erinevalt kujundatud HAL, kuna need on valmistatud seadmepõhiseks. HAL koosneb kahest tüüpilisest struktuurist: moodul ja seade.

Mooduli struktuur HAL-is salvestatakse jagatud teegina .so-vormingus, mis koosneb põhilistest metaandmetest nagu versiooninumber, mooduli kavandanud autor ja muud sarnased asjad. Seadme struktuur on toote tegelik riistvara. Sarnaselt mooduli omaga, kuid seadme struktuur määratleb üldise riistvarateabe põhjalikuma versiooni, mis sisaldab osundeid ja muud sarnast kraami, mis on iga riistvara jaoks eriline.

Linuxis suhtlevad rakendused süsteemikõnede kaudu alusvaraga riistvaraga. Kuid Androidi opsüsteemis suhtlevad rakendused riistvaraga Java API-de kaudu.

Linuxi tuum

Androidi opsüsteemi jaoks Linuxi kerneli kompileerimine on sarnane põhilise Linuxi OS-i jaoks selle kompileerimisega. Ainus erinevus on see, et Androidi versioon on natuke arenenum kui Linuxi oma. Peamine põhjus, miks android-tuum koosneb lisafunktsioonidest, nagu näiteks äratuskellad, topeltpuudutus avamiseks ja muud sarnased funktsioonid, mis on manustatud mobiilsesse operatsioonisüsteemi. Sellised funktsioonid nagu wakelock on olulised, kuna kernel hakkab töötama kaasaskantava seadmega ning see peab olema mälu ja akuhalduse osas pisut agressiivsem; erinevalt tavalisest Linuxist, kus energiahaldus pole probleem. Need lisanõuded kutsutakse esile kernelis, mitte süsteemis, kuna need asjad ei tohiks sisseehitatud draivereid mõjutada.

Kui kuulete inimest ütlemas „selle Linux”, tähendavad nad tavaliselt kernelit, kuna see on mis tahes opsüsteemi kõige elementaarsem ja kõige olulisem osa. Peamine põhjus, miks android põhineb Linuxi kernelil, on selle avatud lähtekood. Igaüks võib minna edasi ja muuta Linuxi kerneli ilma riistvara piiranguteta ja isegi ilma honorariprobleemideta.

Erinevus Linuxi ja Androidi vahel

Nüüd oleme lõpuks jõudnud selle ajaveebi kõige segaseimasse etappi: Linux vs Android. Inimesed peavad androidi tavaliselt Linuxi distributsiooniks, kuid ma ütleksin, et neil on ainult 50% õigus. Kui android opsüsteem käivitub, laadib see tuuma põhimõtteliselt nagu iga teine ​​Linuxi distributsioon, kuid ülejäänud tarkvara erineb täielikult Linuxi omast. Linuxi rakendused ei tööta androidil ja ka vastupidi, kui neid pole komponeeritud chroot-keskkonnas. Tüüpilises Linuxi distros ja Androidis asuvad raamatukogud erinevad üksteisest täiesti. Põhimõtteliselt ei saa te juurdepääsu Androidi juurterminalile, nagu Linuxi puhul. See on peamine põhjus, miks inimesed tavaliselt installivad Busyboxi, SuperSU ja selle kahendkoodid pärast juurdumist, et neil oleks kernelile ja kestale detailsem käsurida. Androidis pole vaikekorpust, kuid selle saate hankida, installides google Play poest terminali emulaatori. Terminali emulaator näeb välja selline:

Androidi käitusaeg töötab Dalviku virtuaalmasinas. See Dalviku VM on tegelikult Java programmeerimiskeele tõlk. Kogu androidi käitusaeg kirjutatakse Androidis Java keeles ja kuna kõik androidi rakendused on kirjutatud Java keeles, muutub see rakenduste virtuaalses keskkonnas töötamiseks palju lihtsamaks ja sujuvamaks. Ja kuna kõik rakendused ja isegi käitusaeg on kirjutatud Java-vormingusse, on kõigil arendajatel Androidi opsüsteemi iga natuke teisendada palju lihtsam. Android oli tavaliselt mõeldud ühe kasutaja opsüsteemiks (erinevalt pulgakommist ja vahukommist, kus võib olla mitu kasutajat.) Selle lihtsamaks tegemiseks lubage mul see sel kujul panna. Androidi rakendused pole midagi muud kui Linuxi protsessid lõpus ja just nii nad kipuvadki töötama. Ja kuna ma olen juba eespool öelnud, et igal rakendusel on oma protsess, on kernel kergem luua iga protsessi jaoks eraldi UID ja käsitseda rakenduse faile ja mälu ilma täiendavate pingutusteta.

Selles on tegelikult enamat kui Androidi opsüsteemi põhitõed, mida ma eespool mainisin. Androidi põhiprotsess on nn Zygote ja see paistab silma sellega, mida ta teeb. See protsess algab tegelikult lähtestamiskäskudega, kui android käivitub. Ma ei hakka siin üksikasjalikult laskuma, kuid arvan, et Androidi kasutamise alustamiseks on Androidi opsüsteemi põhitõed tegelikult piisavad. Lisateabe saamiseks võite tegelikult külastada allikaid.android.com ja arendajaid.android.com, mis on google'i ametlik veebisait kõigi Androidi värskenduste jaoks.

Soovitatavad artiklid

Siin on mõned artiklid, mis aitavad teil Androidi opsüsteemi kohta rohkem üksikasju saada, nii et minge lihtsalt lingi kaudu.

  1. HTML5 vs Flash - kuidas nad erinevad
  2. 8 parimat kasulikku Office Suite'i rakendust teie Androidile
  3. Parimad 5 tasuta Androidi emulaatorit personaalarvutite jaoks
  4. Androidi intervjuu küsimused - kümme parimat küsimust
  5. Karjäär Androidi arendamisel
  6. IPhone'i ja Androidi 33 parimat erinevust

Kategooria: