Inleiding tot Android-besturingssysteem

Het Android-besturingssysteem is een open-source systeem. Veel mensen zeggen dat het Linux is, maar dat is niet helemaal waar. Hoewel Android kernels heeft die vergelijkbaar zijn met die van Linux, is dat het enige dat vergelijkbaar is. Vandaag gaan we dieper in op de binnenkant van het Android-besturingssysteem, de processen, het framework en andere vergelijkbare structuren. Laten we dus beginnen bij de basis en een kijkje nemen in de kern van het Android-besturingssysteem.

Na de release van iPhone en Windows Lumia Series, dwz de Microsoft Windows-gerelateerde telefoons, wilde Google hetzelfde doen. Maar ze wilden iets dat open source kon zijn. De belangrijkste reden hiervoor was dat iedereen het kon debuggen, wijzigingen kon aanpassen zoals ze wilden. Toen kwam het idee van Linux. Linux is een volledig open-source besturingssysteem en wordt wereldwijd geaccepteerd door de gemeenschap. Het is een van die besturingssystemen die zelfs meer wordt gebruikt dan Windows of Mac OSX. Trouwens, Linux heeft de mogelijkheid om bijna elk ander ding dat op zowel Mac als Windows kan worden uitgevoerd, uit te voeren. Daarom besloot Google een besturingssysteem te ontwikkelen voor een mobiele telefoon met dezelfde basisschaal als die van Linux, zodat het compatibel is met bijna alles en de buitenste schil zou worden ontwikkeld als, wanneer en ook hoe het nodig is.

Android-besturingssysteem als Open Source Project (AOSP)

Android heeft de mogelijkheid om onze eigen stuurprogramma's en functies vrij te wijzigen, uit te vinden en te implementeren. Nu om over te spreken, er zijn vijf verschillende lagen van een Android-besturingssysteem. Het gaat als volgt:

Zoals u in de bovenstaande afbeelding kunt zien, is de eerste laag het Application Framework, de tweede is de Binder IPC Proxy's, de derde bestaat uit de Android-systeemservices, de vierde is de HAL of de volledige vorm is Hardware Abstraction Layer en de laatste zijnde de Linux-kernel. Zoals ik eerder al zei, kun je zien dat het enige deel van de Linux waaruit een Android-besturingssysteem bestaat, de Linux-kernel is. Laten we ze allemaal een voor een bekijken.

Android Application Framework

Dit app-framework wordt gebruikt door app-ontwikkelaars voor Android. Dit deel van Android heeft op zijn minst iets te doen met de hardwarelaag. Android-applicaties zijn geprogrammeerd in de Java-taal. Na het programmeren van een app, helpen de Android SDK-tools bij het compileren van de gegevens en de bronbestanden zoals de XML-bestanden, de jar-bestanden, manifestbestanden en andere afbeeldingen en dergelijke in één enkel archiefpakket met een '.apk'-extensie. Dit apk-bestand kan worden gebruikt om de app te installeren met slechts een enkele klik op de Android-apparaten. Omdat het Android-besturingssysteem zich gedraagt ​​als een Linux-omgeving, is het app-gedrag hier ook hetzelfde. Elke app wordt beschouwd als een afzonderlijke gebruiker van de andere en draait op zijn eigen virtuele machine. Hierdoor wordt de geprogrammeerde code van de app geïsoleerd en wordt ook voorkomen dat deze van anderen wordt geïnfecteerd, tenzij expliciet vermeld. Elke andere app heeft zijn eigen USER ID en elk ander proces heeft zijn eigen virtuele machine.

Het Android Application Framework werkt volgens het principe van de minste privilege. Het minste Privilege-principe betekent dat wanneer een nieuwe app moet worden uitgevoerd, maar er geen beschikbaar geheugen is, het Android-systeem automatisch de oude applicatie zal afsluiten die niet op de achtergrond hoeft te worden uitgevoerd. Dit is een van de beste onderdelen van de beveiliging van het Android-besturingssysteem. Dit principe maakt het mogelijk dat elke app alleen die toegang heeft die nodig is om zijn werk te doen. Een app kan dus geen toestemming krijgen voor wat niet is bedoeld. Dit zorgt op zijn beurt voor een zeer veilige omgeving binnen het Android-besturingssysteem zelf.

Binder IPC staat bekend als Binder Inter-Process Communication. Via deze interface kan een programmeur een applicatie maken om met andere applicaties te communiceren. Vaker zijn het niet de applicaties die communiceren, het zijn de processen. Binder IPC helpt om meerdere processen tegelijkertijd op hetzelfde niveau uit te voeren. Deze binder-implementatie is afkomstig van de kernel van het Android-besturingssysteem. Nu zijn er vragen gerezen waarom de binder in de kernel moet blijven, en waarom niet kan worden uitgevoerd vanuit de Linux IPC-mechanismen? De belangrijkste reden hiervoor is dat het bindmiddel de onnodige toewijzing van ruimte vermijdt in tegenstelling tot andere IPC-mechanismen in het Linux-systeem. Als je hebt gehoord van de term 'magie in python', dan is dat wat een Binder IPC eruit zou zien voor een applicatie-ontwikkelaar, omdat het volledig voor hen verborgen is en het gewoon lijkt te werken, in tegenstelling tot het kader op hoog niveau waar je moet het expliciet laten werken. Hierdoor kan het framework op hoog niveau communiceren met de android-besturingssysteem-services.

Systeemservices van Android-besturingssysteem

Een service is een gecompileerd stuk code dat lange tijd op de achtergrond van een Android-besturingssysteem wordt uitgevoerd zonder een interface te geven. Elke toepassing, of het nu gebruiker of systeem is, kan een service starten, maar deze blijft op de achtergrond actief, zelfs als de toepassing is gesloten. Er zijn echter twee soorten services:

Gestart Services

Gestarte services starten meestal wanneer een toepassing hierom vraagt. Een Gestart type service voert echter meestal slechts één bewerking uit en retourneert niets.

Gebonden services

Bounded services bieden een client-server relatie-interface. Gebonden service wordt uitgevoerd totdat de toepassing op de voorgrond wordt uitgevoerd en wordt gestopt zodra de activiteit van de toepassing is vernietigd.

De systeemservices van Android verschaffen de gebruikersapplicaties de nodige informatie om deze correct te laten werken. En deze communicatie tussen de systeemservices en de gebruikerstoepassingen gebeurt met behulp van de Binder IPC van de kernel. Nu kan het verrassen, maar niet alle applicaties in een Android zijn geschreven in Java. Sommigen van hen zijn geschreven in C en C ++. Toepassingen die in nauw contact met de hardware moeten staan, zijn geschreven in C en C ++. De belangrijkste reden hiervoor is dat de systeemservices meestal constant in contact moeten staan ​​met de hardware. Dit maakt het belangrijk dat het gecompileerde stuk code extreem snel is. En als het gaat om hardwareversnelling en hoge prestaties, is C veel sneller dan Java of een andere taal die er is.

Hardwareservices die constant worden gebruikt, bijvoorbeeld: naderingssensoren, versnellingsmeter of het aanraakscherm moeten in C worden geschreven. Andere hardware zoals de camera of het geluid maakt meestal gebruik van de JNI-oproepen. Dus als u ooit opmerkt, zullen de aanraakschermen altijd sneller zijn dan het starten van een camera of het afspelen van een nummer via een muziekspeler.

Houd er bij het maken van een systeemservice rekening mee dat services meestal in het hoofdproces worden uitgevoerd en dat er geen afzonderlijk proces wordt gemaakt. Kortom, als uw code wat CPU- en GPU-intensief werk gaat doen, bijvoorbeeld games met hoge definitie, dan zou u liever nieuwe threads maken in dezelfde service; anders is er altijd een grote kans dat het dialoogvenster 'App reageert niet' wordt weergegeven.

Aanbevolen cursussen

  • IT-veiligheidscertificeringstraining
  • Voltooi de Ruby on Rails-cursus
  • Professionele CSS-training
  • Programma op HTML5 en CSS3

Hardware-abstractielaag

HAL of Hardware Abstraction Layer is specifiek ontworpen voor leveranciers. Applicatie-ontwikkelaars hebben hier weinig of bijna niets te doen. Deze laag helpt bij het invoegen van functionaliteit zonder wijzigingen aan het systeem aan te brengen. Elk ander systeem heeft een anders ontworpen HAL omdat ze apparaatspecifiek zijn gemaakt. HAL bestaat uit twee typische structuren: module en apparaat.

De modulestructuur in HAL wordt opgeslagen als een gedeelde bibliotheek in .so-indeling die bestaat uit de basismetagegevens zoals het versienummer, de auteur die de module heeft ontworpen en soortgelijke zaken. De apparaatstructuur is de daadwerkelijke hardware van het product. Vergelijkbaar met die van de module, maar de apparaatstructuur definieert een uitgebreidere versie van de generieke hardware-informatie die verwijzingen en andere soortgelijke dingen bevat die speciaal zijn voor elke hardware.

In Linux communiceren applicaties met de onderliggende hardware via systeemaanroepen. Maar in een Android-besturingssysteem communiceren de applicaties met de hardware via Java API's.

Linux-kernel

Het compileren van een Linux-kernel voor een Android-besturingssysteem is vergelijkbaar met het compileren voor een basis Linux-besturingssysteem. Het enige verschil is dat de Android-versie iets geavanceerder is dan die van Linux. De belangrijkste reden hiervoor is dat de Android-kernel bestaat uit extra functies zoals de wakelocks, dubbeltikken om te ontgrendelen en andere soortgelijke functies die zijn ingebed in het mobiele bedieningsapparaat. Functies zoals wakelock zijn belangrijk omdat de kernel op een draagbaar apparaat gaat werken en het een beetje agressiever moet zijn in geheugen- en batterijbeheer; in tegenstelling tot de basis Linux waar energiebeheer geen probleem is. Deze aanvullende vereisten worden eerder in de kernel dan in het systeem veroorzaakt, omdat deze dingen geen invloed hebben op de ingebouwde stuurprogramma's.

Wanneer je een persoon 'Linux' hoort zeggen, bedoelen ze meestal de kernel, omdat deze het meest elementaire en toch het belangrijkste onderdeel van een besturingssysteem is. De belangrijkste reden waarom Android op Linux-kernel is gebaseerd, is dat het open source is. Iedereen kan doorgaan en de Linux-kernel wijzigen zonder enige hardwarebeperking of zelfs royaltyproblemen.

Verschil tussen Linux versus Android

Dus nu hebben we eindelijk de meest verwarrende fase van deze blog bereikt: Linux versus de Android. Mensen beschouwen Android meestal als een Linux-distributie, maar ik zou zeggen dat ze slechts 50% gelijk hebben. Wanneer het Android-besturingssysteem opstart, laadt het de kernel net als elke andere Linux-distributie, maar de rest van de software is totaal anders dan die van Linux. Linux-applicaties draaien niet op Android en andersom tenzij ze zijn gecompileerd in een chroot-omgeving. De bibliotheken die typisch zijn voor een Linux distro en Android zijn totaal verschillend van elkaar. In principe kun je in Linux geen toegang krijgen tot de root-terminal in Android. Dit is de belangrijkste reden waarom mensen Busybox, SuperSU en zijn binaries meestal na het rooten installeren, zodat ze een meer gedetailleerde opdrachtregeltoegang hebben tot de kernel en de shell. Er is geen standaardshell in Android, maar je kunt er een krijgen door een terminal-emulator van Google Play Store te installeren. Terminal Emulator ziet er zo uit:

De Android-runtime werkt op een Dalvik Virtual Machine. Deze Dalvik VM is eigenlijk een tolk voor de programmeertaal Java. De hele Android-runtime is geschreven in Java in Android, en omdat alle applicaties van Android in Java zijn geschreven, wordt het veel eenvoudiger en soepeler om de applicaties in de virtuele omgeving te laten draaien. En omdat alle applicaties en zelfs de looptijd in Java zijn geschreven, wordt het voor elke ontwikkelaar veel eenvoudiger om elk stukje van het Android-besturingssysteem aan te passen. De Android is meestal ontworpen als besturingssysteem voor één gebruiker (in tegenstelling tot de lolly en marshmallow waar meerdere gebruikers kunnen zijn.) Om dit eenvoudiger te maken, laat ik het in deze vorm zetten. Android-applicaties zijn aan het eind niets anders dan Linux-processen en zo werken ze meestal. En omdat ik hierboven heb gezegd dat elke app zijn eigen proces heeft, wordt het voor de kernel gemakkelijker om voor elk proces een afzonderlijke UID te maken en de toepassingsbestanden en het geheugen zonder extra inspanning te verwerken.

Er is eigenlijk meer aan de hand dan de basisprincipes van het Android-besturingssysteem die ik hierboven heb genoemd. Android heeft een kernproces dat bekend staat als de 'Zygote' en het blinkt uit in wat het doet. Dit proces start eigenlijk met de initialisatieopdrachten wanneer de Android opstart. Ik zal hier niet veel in detail treden, maar ik denk dat de basisprincipes van het Android-besturingssysteem eigenlijk genoeg zijn om aan de slag te gaan met Android. Voor meer informatie kunt u de source.android.com en developers.android.com bezoeken, de officiële website van Google voor elke update op Android.

Aanbevolen artikelen

Hier zijn enkele artikelen die u zullen helpen om meer details over het Android-besturingssysteem te krijgen, dus ga gewoon door de link.

  1. HTML5 versus Flash - Hoe ze verschillen
  2. Top 8 nuttige Office Suite-toepassingen voor uw Android
  3. Top 5 gratis Android-emulators voor pc
  4. Interviewvragen voor Android - Top 10 nuttige vraag
  5. Carrières in Android-ontwikkeling
  6. Top 33 verschillen van iPhone versus Android