Einführung in das Android-Betriebssystem

Das Android-Betriebssystem ist ein Open-Source-System. Viele Leute sagen, dass es Linux ist, aber das ist nicht ganz richtig. Obwohl Android Kernel hat, die denen von Linux ähneln, ist dies das einzige, was ähnlich ist. Heute werden wir uns eingehender mit dem Inneren des Android-Betriebssystems befassen, dh den Prozessen, dem Framework und anderen ähnlichen Strukturen. Beginnen wir also mit den Grundlagen und werfen einen Blick auf die innere Wurzel des Android-Betriebssystems.

Nach der Veröffentlichung von iPhone und Windows Lumia Series, also den mit Microsoft Windows verwandten Handys, wollte Google dasselbe tun. Aber sie wollten etwas, das Open Source sein könnte. Der Hauptgrund dafür war, dass jeder es debuggen und nach Belieben ändern konnte. Dann kam die Idee von Linux. Linux ist ein Open-Source-Betriebssystem und wird von der Community auf der ganzen Welt allgemein akzeptiert. Es ist eines dieser Betriebssysteme, das noch häufiger als Windows oder Mac OSX verwendet wird. Außerdem kann Linux fast alles ausführen, was auf Mac oder Windows ausgeführt werden kann. Aus diesem Grund hat Google beschlossen, ein Betriebssystem für ein Mobiltelefon mit der gleichen inneren Hülle wie Linux zu entwickeln, damit es mit fast allem kompatibel ist und die äußere Hülle so entwickelt wird, wie, wann und wie es benötigt wird.

Android-Betriebssystem als Open Source-Projekt (AOSP)

Android kann unsere eigenen Gerätetreiber und Funktionen frei ändern, erfinden und implementieren. Es gibt nun fünf verschiedene Schichten eines Android-Betriebssystems. Es geht wie folgt:

Wie Sie in der obigen Abbildung sehen können, ist die erste Ebene das Application Framework, die zweite die Binder-IPC-Proxies, die dritte besteht aus den Android-Systemdiensten, die vierte ist die HAL oder die vollständige Form die Hardware-Abstraktions-Ebene und die letzte der Linux-Kernel sein. Wie ich bereits sagte, ist der einzige Teil des Linux, aus dem ein Android-Betriebssystem besteht, der Linux-Kernel. Schauen wir uns nun alle einzeln an.

Android Application Framework

Dieses App Framework wird von App-Entwicklern für Android verwendet. Dieser Teil von Android hat zumindest etwas mit der Hardwareschicht zu tun. Android-Anwendungen sind in Java-Sprache programmiert. Nach dem Programmieren einer App helfen die Android SDK-Tools beim Kompilieren der Daten und der Ressourcendateien, z. B. der XML-Dateien, der JAR-Dateien, der Manifest-Dateien und anderer Bilder und anderer Inhalte, in einem einzigen Archivpaket mit der Erweiterung ".apk". Diese APK-Datei kann verwendet werden, um die App mit nur einem Klick auf die Android-Geräte zu installieren. Da sich das Android-Betriebssystem nun wie eine Linux-Umgebung verhält, ist das Verhalten der App auch hier dasselbe. Jede App wird als separater Benutzer betrachtet und auf einer eigenen virtuellen Maschine ausgeführt. Dadurch wird der programmierte Code der App isoliert und es wird auch verhindert, dass er von anderen infiziert wird, sofern nicht ausdrücklich anders angegeben. Jede andere App hat eine eigene USER ID und jeder andere Prozess hat eine eigene Virtual Machine.

Das Android Application Framework basiert auf dem Prinzip der geringsten Berechtigungen. Das Least Privilege-Prinzip bedeutet, dass das Android-System die alte Anwendung automatisch beendet, wenn eine neue App ausgeführt werden muss, aber kein Speicher verfügbar ist. Dies ist nicht erforderlich, um im Hintergrund ausgeführt zu werden. Dies ist einer der besten Aspekte der Sicherheit des Android-Betriebssystems. Dieses Prinzip macht es möglich, dass jede App nur den Zugriff hat, der für ihre Arbeit erforderlich ist. Daher kann eine App keine Berechtigung für das erhalten, was nicht beabsichtigt ist. Dies schafft wiederum eine sehr sichere Umgebung innerhalb des Android-Betriebssystems.

Binder IPC ist als Binder Inter-Process Communication bekannt. Diese Schnittstelle ermöglicht es einem Programmierer, eine Anwendung zur Kommunikation mit anderen Anwendungen zu veranlassen. Oft sind es nicht die Anwendungen, die kommunizieren, sondern die Prozesse. Mit Binder IPC können mehrere Prozesse gleichzeitig auf einer Ebene ausgeführt werden. Diese Binder-Implementierung wird über den Kern des Android-Betriebssystems bereitgestellt. Nun wurde die Frage aufgeworfen, warum der Binder im Kernel verbleiben muss und warum er nicht über die Linux IPC-Mechanismen ausgeführt werden kann. Der Hauptgrund dafür ist, dass der Binder im Gegensatz zu anderen IPC-Mechanismen im Linux-System die unnötige Zuweisung von Speicherplatz vermeidet. Wenn Sie von dem Begriff "Magie in Python" gehört haben, dann würde ein Binder IPC für einen Anwendungsentwickler so aussehen, da er völlig verborgen ist und einfach zu funktionieren scheint, im Gegensatz zum High-Level-Framework, in dem Sie müssen dafür sorgen, dass es explizit funktioniert. Dadurch kann das übergeordnete Framework tatsächlich mit den Diensten des Android-Betriebssystems kommunizieren.

Systemdienste des Android-Betriebssystems

Ein Dienst ist ein kompilierter Code, der lange im Hintergrund eines Android-Betriebssystems ausgeführt wird, ohne dass eine Schnittstelle angegeben wird. Jede Anwendung, sei es ein Benutzer oder ein System, kann einen Dienst starten, läuft jedoch weiterhin im Hintergrund, selbst wenn die Anwendung geschlossen wird. Es gibt jedoch zwei Arten von Diensten:

Gestartete Dienste

Gestartete Dienste werden normalerweise gestartet, wenn eine Anwendung dies anfordert. Ein gestarteter Dienst führt jedoch normalerweise nur einen einzigen Vorgang aus und gibt nichts zurück.

Gebundene Dienste

Eingeschränkte Dienste bieten eine Client-Server-Beziehungsschnittstelle. Der gebundene Dienst wird ausgeführt, bis die Vordergrundanwendung ausgeführt wird, und wird dann beendet, sobald die Anwendungsaktivität zerstört ist.

Die Systemdienste von Android stellen den Benutzeranwendungen die erforderlichen Informationen zur Verfügung, damit sie ordnungsgemäß funktionieren. Und diese Kommunikation zwischen den Systemdiensten und den Benutzeranwendungen erfolgt mit Hilfe des Binder IPC vom Kernel. Jetzt mag es überraschen, aber nicht alle Anwendungen in einem Android sind in Java geschrieben. Einige von ihnen sind in C und C ++ geschrieben. Diejenigen Anwendungen, die in engem Kontakt mit der Hardware stehen müssen, sind in C und C ++ geschrieben. Der Hauptgrund dafür ist, dass die Systemdienste die meiste Zeit in ständigem Kontakt mit der Hardware sein müssen. Aus diesem Grund ist es wichtig, dass der kompilierte Code extrem schnell ist. Und wenn es um Hardwarebeschleunigung und hohe Leistung geht, ist C viel schneller als Java oder eine andere Sprache.

Hardware-Dienste, die ständig verwendet werden, z. B .: Näherungssensoren, Beschleunigungsmesser oder Touchscreen müssen in C geschrieben werden. Andere Hardware wie die Kamera oder der Ton verwenden meist die JNI-Aufrufe. Wenn Sie es bemerken, sind die Touchscreens immer schneller als das Starten einer Kamera oder das Abspielen eines Songs über einen Musikplayer.

Beachten Sie beim Erstellen eines Systemdienstes, dass Dienste in der Regel im Hauptprozess ausgeführt werden und keinen separaten Prozess erstellen. Kurz gesagt, wenn Ihr Code einige CPU- und GPU-intensive Aufgaben ausführen soll, z. B. High Definition-Spiele, sollten Sie es vorziehen, neue Threads im selben Dienst zu erstellen. Andernfalls besteht immer eine hohe Wahrscheinlichkeit, dass das Dialogfeld „App antwortet nicht“ angezeigt wird.

Empfohlene Kurse

  • IT-Sicherheitszertifizierungstraining
  • Schließe den Ruby on Rails-Kurs ab
  • Professionelle CSS-Schulung
  • Programm auf HTML5 und CSS3

Hardware-Abstraktionsschicht

HAL oder Hardware Abstraction Layer wurde speziell für Anbieter entwickelt. Anwendungsentwickler haben hier wenig oder fast nichts zu tun. Mit dieser Ebene können Sie Funktionen einfügen, ohne Änderungen am System vornehmen zu müssen. Jedes andere System hat eine anders gestaltete HAL, da sie gerätespezifisch sind. HAL besteht aus zwei typischen Strukturen: Modul und Gerät.

Die Modulstruktur in HAL wird als gemeinsam genutzte Bibliothek im Format .so gespeichert, die aus den grundlegenden Metadaten wie Versionsnummer, Autor des Moduls und ähnlichen Elementen besteht. Die Gerätestruktur ist die tatsächliche Hardware des Produkts. Ähnlich wie das Modul, aber die Gerätestruktur definiert eine umfassendere Version der allgemeinen Hardwareinformationen, die Zeiger und ähnliche Dinge enthält, die für jede Hardware spezifisch sind.

Unter Linux kommunizieren Anwendungen über Systemaufrufe mit der zugrunde liegenden Hardware. In einem Android-Betriebssystem kommunizieren die Anwendungen jedoch über Java-APIs mit der Hardware.

Linux Kernel

Das Kompilieren eines Linux-Kernels für ein Android-Betriebssystem ähnelt dem Kompilieren für ein grundlegendes Linux-Betriebssystem. Der einzige Unterschied ist, dass die Android-Version etwas weiter fortgeschritten ist als die von Linux. Der Hauptgrund dafür, dass der Android-Kernel besteht aus zusätzlichen Funktionen wie Wakelocks, Doppelklick zum Entsperren und ähnlichen Funktionen, die in das mobile Bediengerät integriert sind. Funktionen wie Wakelock sind wichtig, da der Kernel auf einem tragbaren Gerät ausgeführt werden soll und das Speicher- und Batteriemanagement etwas aggressiver sein muss. Im Gegensatz zum Basis-Linux, bei dem Energiemanagement kein Thema ist. Diese zusätzlichen Anforderungen werden eher im Kernel als im System verursacht, da diese Dinge die integrierten Treiber nicht beeinflussen sollten.

Wenn Sie eine Person sagen hören, dass es sich um Linux handelt, meinen Sie in der Regel den Kernel, da dieser der grundlegendste und dennoch wichtigste Teil eines Betriebssystems ist. Der Hauptgrund, warum Android auf dem Linux-Kernel basiert, ist, dass es Open Source ist. Jeder kann den Linux-Kernel ohne Einschränkung der Hardware oder Lizenzgebühren modifizieren.

Unterschied zwischen Linux und Android

Jetzt haben wir endlich das verwirrendste Stadium dieses Blogs erreicht: Linux vs. Android. Die Leute betrachten Android normalerweise als Linux-Distribution, aber ich würde sagen, dass sie nur zu 50% Recht haben. Jedes Mal, wenn das Android-Betriebssystem gestartet wird, wird der Kernel wie bei jeder anderen Linux-Distribution geladen, der Rest der Software unterscheidet sich jedoch grundlegend von der von Linux. Linux-Anwendungen laufen nicht auf Android und auch nicht umgekehrt, es sei denn, sie werden in einer Chroot-Umgebung kompiliert. Die in einer typischen Linux-Distribution und in Android vorhandenen Bibliotheken unterscheiden sich grundlegend voneinander. Grundsätzlich kann man unter Android nicht so auf das Root-Terminal zugreifen wie unter Linux. Dies ist der Hauptgrund, warum Benutzer in der Regel Busybox, SuperSU und seine Binärdateien nach dem Root-Vorgang installieren, damit sie über die Befehlszeile detaillierter auf den Kernel und die Shell zugreifen können. Es gibt keine Standard-Shell in Android, aber Sie können eine erhalten, indem Sie einen Terminal-Emulator aus dem Google Play Store installieren. Terminal Emulator sieht so aus:

Die Android-Laufzeit arbeitet auf einer Dalvik Virtual Machine. Diese Dalvik VM ist eigentlich ein Interpreter für die Programmiersprache Java. Die gesamte Android-Laufzeit ist in Java in Android geschrieben, und da alle Anwendungen von Android in Java geschrieben sind, wird es für die Anwendungen viel einfacher und reibungsloser, in der virtuellen Umgebung ausgeführt zu werden. Und da alle Anwendungen und sogar die Laufzeit in Java geschrieben sind, kann jeder Entwickler jedes einzelne Bit des Android-Betriebssystems einfacher anpassen. Das Android wurde normalerweise als Einzelbenutzer-Betriebssystem entwickelt (im Gegensatz zu Lollipop und Marshmallow, wo es mehrere Benutzer geben kann). Um dies zu vereinfachen, möchte ich es in diese Form bringen. Android-Anwendungen sind am Ende nichts anderes als Linux-Prozesse, und so funktionieren sie in der Regel. Und da ich oben angegeben habe, dass jede App ihren eigenen Prozess hat, wird es für den Kernel einfacher, eine separate UID für jeden Prozess zu erstellen und die Anwendungsdateien und den Arbeitsspeicher ohne zusätzlichen Aufwand zu verwalten.

Es gibt tatsächlich mehr als die Grundlagen des Android-Betriebssystems, die ich oben erwähnt habe. Android hat einen Kernprozess, der als "Zygote" bekannt ist und sich in seinen Funktionen auszeichnet. Dieser Prozess startet tatsächlich mit den Initialisierungsbefehlen, wenn der Android startet. Ich werde hier nicht näher darauf eingehen, aber ich denke, dass die Grundlagen des Android-Betriebssystems ausreichen, um mit Android zu beginnen. Weitere Informationen erhalten Sie unter source.android.com und developers.android.com, der offiziellen Website von Google für jedes Update auf Android.

Empfohlene Artikel

In den folgenden Artikeln erfahren Sie mehr über das Android-Betriebssystem. Klicken Sie einfach auf den Link.

  1. HTML5 vs Flash - wie sie sich unterscheiden
  2. Top 8 hilfreiche Office Suite-Anwendungen für Ihr Android
  3. Top 5 kostenlose Android-Emulatoren für PC
  4. Android Interview Questions - Top 10 nützliche Frage
  5. Karriere in der Android-Entwicklung
  6. Top 33 Unterschiede zwischen iPhone und Android