Android ist ein Linux-basierter Open-Source-Software-Stack, der für eine Vielzahl von Geräten und Formfaktoren entwickelt wurde. Abbildung 1 zeigt die Hauptkomponenten der Android-Plattform.
![Der Android-Software-Stack](https://developer.android.com/static/guide/platform/images/android-stack_2x.png?authuser=9&hl=de)
Abbildung 1: Der Android-Software-Stack
Linux-Kernel
Die Grundlage der Android-Plattform ist der Linux-Kernel. Android Runtime (ART) stützt sich beispielsweise auf den Linux-Kernel für zugrunde liegende Funktionen wie Threading und Low-Level-Arbeitsspeicherverwaltung.
Wenn Sie einen Linux-Kernel verwenden, kann Android wichtige Sicherheitsfunktionen nutzen und Geräteherstellern Hardwaretreiber für einen bekannten Kernel entwickeln.
Hardware Abstraction Layer (HAL)
Die Hardwareabstraction Layer (HAL) bietet Standardschnittstellen, über die dem übergeordneten Java API-Framework die Gerätehardwarefunktionen zur Verfügung gestellt werden. Der HAL besteht aus mehreren Bibliotheksmodulen, die jeweils eine Schnittstelle für eine bestimmte Art von Hardwarekomponente implementieren, z. B. das Kameramodul oder das Bluetooth-Modul. Wenn eine Framework-API einen Aufruf für den Zugriff auf Gerätehardware durchführt, lädt das Android-System das Bibliotheksmodul für diese Hardwarekomponente.
Android-Laufzeit
Auf Geräten mit Android 5.0 (API-Level 21) oder höher wird jede App in einem eigenen Prozess und mit einer eigenen Instanz der Android Runtime (ART) ausgeführt. ART ist so geschrieben, dass mehrere virtuelle Maschinen auf Geräten mit geringem Arbeitsspeicher ausgeführt werden. Dazu werden DEX-Dateien (Dalvik Executable Format) ausgeführt. Dieses Bytecode-Format wurde speziell für Android entwickelt und ist für einen minimalen Speicherbedarf optimiert. Build-Tools wie d8
kompilieren Java-Quellen in DEX-Bytecode, der auf der Android-Plattform ausgeführt werden kann.
Zu den wichtigsten Merkmalen von ART gehören:
- Ahead-of-Time- und Just-in-Time-Kompilierung (JIT)
- Optimierte automatische Speicherbereinigung
- Unter Android 9 (API-Level 28) und höher wird die DEX-Dateien eines App-Pakets in einen kompakteren Maschinencode konvertiert.
- Besserer Debugging-Support, einschließlich eines speziellen Proben-Profilers, detaillierter Diagnoseausnahmen und Absturzberichten sowie der Möglichkeit, Watchpoints zum Überwachen bestimmter Felder festzulegen
Vor Android-Version 5.0 (API-Level 21) war Dalvik die Android-Laufzeit. Wenn Ihre Anwendung gut mit ART läuft, kann sie auch mit Dalvik funktionieren, aber umgekehrt gilt möglicherweise nicht.
Android umfasst auch eine Reihe zentraler Laufzeitbibliotheken, die die meisten Funktionen der Programmiersprache Java bereitstellen, einschließlich einiger Java 8-Sprachfunktionen, die vom Java API-Framework verwendet werden.
Native C/C++-Bibliotheken
Viele der zentralen Android-Systemkomponenten und -dienste wie ART und HAL werden aus nativem Code erstellt, der native Bibliotheken in C und C++ erfordert. Die Android-Plattform bietet Java-Framework-APIs, um die Funktionen einiger nativer Bibliotheken für Apps verfügbar zu machen. Du kannst zum Beispiel über die Java OpenGL API des Android-Frameworks auf OpenGL ES zugreifen, um das Zeichnen und Bearbeiten von 2D- und 3D-Grafiken in deiner App zu unterstützen.
Wenn du eine App entwickelst, die C- oder C++-Code erfordert, kannst du das Android-NDK verwenden, um direkt über deinen nativen Code auf einige dieser nativen Plattformbibliotheken zuzugreifen.
Java API-Framework
Der gesamte Funktionsumfang des Android-Betriebssystems steht Ihnen über APIs zur Verfügung, die in der Sprache Java geschrieben sind. Diese APIs bilden die Bausteine, die Sie zum Erstellen von Android-Apps benötigen. Sie vereinfachen die Wiederverwendung von zentralen, modularen Systemkomponenten und -diensten. Dazu gehören:
- Ein vielfältiges und erweiterbares Ansichtssystem, mit dem Sie die Benutzeroberfläche einer App erstellen können, einschließlich Listen, Raster, Textfelder, Schaltflächen und sogar eines einbettbaren Webbrowsers
- Einen Ressourcenmanager, der Zugriff auf Ressourcen ohne Code ermöglicht, z. B. lokalisierte Strings, Grafiken und Layoutdateien
- Ein Benachrichtigungsmanager, mit dem alle Apps benutzerdefinierte Benachrichtigungen in der Statusleiste anzeigen können
- Einen Aktivitätsmanager, der den Lebenszyklus von Apps verwaltet und einen gemeinsamen Back-Stack bietet
- Inhaltsanbieter, die es Apps ermöglichen, auf Daten aus anderen Apps wie der Kontakte App zuzugreifen oder ihre eigenen Daten zu teilen
Entwickler haben uneingeschränkten Zugriff auf dieselben Framework-APIs, die auch von Android-System-Apps verwendet werden.
System-Apps
Android bietet eine Reihe von Kern-Apps für E-Mail, SMS, Kalender, Internet, Kontakte und mehr. In der Plattform enthaltene Apps haben keinen speziellen Status unter den Apps, die der Nutzer installieren möchte. So kann eine Drittanbieter-App zum Standardbrowser des Nutzers, zum SMS-Messenger oder sogar als Standardtastatur verwendet werden. Es gelten einige Ausnahmen, z. B. die App „Einstellungen“ des Systems.
Die System-Apps dienen sowohl als Anwendungen für Nutzer als auch als Bereitstellung wichtiger Funktionen, auf die Entwickler über ihre eigene Anwendung zugreifen können. Wenn Ihre App beispielsweise SMS-Nachrichten senden soll, müssen Sie diese Funktion nicht selbst erstellen. Sie können stattdessen eine bereits installierte SMS-App aufrufen, um eine Nachricht an den angegebenen Empfänger zuzustellen.