[TUT] Der Aufbau des Android Systems

Kiwi++Soft

Kiwi++Soft

Ehrenmitglied
32.707
Der Aufbau des Android Systems

In diesem Tutorial möchte ich den Aufbau des Android-Systems beschreiben.

Als Vorkenntnis empfehle ich, das folgende Tutorial zu lesen: https://www.android-hilfe.de/forum/...roid.468134.html#post-6332329"]Das Android OS und Bestandteile des Android OS

Dieses Tutorial kann als 'Stand-Alone-Tutorial' gesehen werden, oder als Ergänzung zu diesem: https://www.android-hilfe.de/forum/...und-einfach-wege-zum-modifizieren.633541.html

In dem Android-System gibt es ein Verzeichnis system, in dem die wesentlichen Bestandteile des Systems integriert sind. Auf diese werde ich im Detail eingehen.

Daneben gibt es noch das Verzeichnis data, in dem die Benutzer-Daten und die Einstellungen liegen.

Alle weiteren Verzeichnisse werde ich nur kurz anreisen.

  • [POST=8317408]system[/POST]
    • [POST=8317509]app[/POST]
    • [POST=8317582]bin[/POST]
    • [POST=8321111]etc[/POST]
    • [POST=8321135]fonts[/POST]
    • [POST=8321215]framework[/POST]
    • [POST=8321255]lib[/POST]
    • [POST=8321276]media[/POST]
    • [POST=8321322]priv-app[/POST]
    • [POST=8321589]tts[/POST]
    • [POST=8321619]usr[/POST]
    • [POST=8321633]vendor[/POST]
    • [POST=8321651]xbin[/POST]
  • [POST=8321789]data[/POST]
    • [POST=8322099]app[/POST]
    • [POST=8322116]data[/POST]
    • [POST=8322119]media[/POST]
    • [POST=8322124]weitere[/POST]
  • [POST=8322129]weitere[/POST]

Bitte auch beachten:
[Post=8439906]Abschließender Hinweis[/Post]
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: fax666, TSC Yoda, AxelFH und 2 andere
Das /system Verzeichnis

Im System-Verzeichnis liegt das eigentliche Android-System. Es beinhaltet das, was man bei einem 'Rom-Wechsel' austauscht.

Im allgemeinen sind das die folgenden Verzeichnisse:

  • [POST=8317509]app[/POST]
  • [POST=8317582]bin[/POST]
  • [POST=8321111]etc[/POST]
  • [POST=8321135]fonts[/POST]
  • [POST=8321215]framework[/POST]
  • [POST=8321255]lib[/POST]
  • [POST=8321276]media[/POST]
  • [POST=8321322]priv-app[/POST]
  • [POST=8321589]tts[/POST]
  • [POST=8321619]usr[/POST]
  • [POST=8321633]vendor[/POST]
  • [POST=8321651]xbin[/POST]

Im normalen Betrieb ist dieses Verzeichnis 'Readonly', kann also nicht beschrieben werden. Alles was hier drin ist, gilt als 'unveränderlich'.

[POST=8315162]Zurück zur Übersicht[/POST]
 
Das /system/app Verzeichnis

Im App-Verzeichnis liegen die Apps drin, die im ROM mitgeliefert werden.

Ab Android 4.4 liegen manche Apps im [POST=8321322]priv-app Verzeichnis[/POST]. Nur diese Apps dürfen 'System-Level-Permissions' nutzen.

Ab Android 5.0 hat jede App ihr eigenes Unterverzeichnis. Darin liegt das .apk File der App und wenn die native Libraries benötigt, liegen diese in einem Unterverzeichnis lib und dort in einem weitere Unterverzeichnis, das die Prozessor-Architektur bezeichnet. Beispielsweise findet sich für die Android-Tastertur das Verzeichnis LatinIME mit dem Unterverzeichnis lib/arm/ und darin die native Library libjni_latinime.so. Unter Android gibt es keine .odex Files (Optimized Dalvik Executable) mehr, da die Dalik-VM nicht mehr benutzt wird (werden soll).

Bis Android 4.4 lagen in dem app Verzeichnis die .apk Files und die .odex Files (Optimized Dalvik Executable)direkt drin.

Da man eine App, die in ein apk und ein .odex File aufgeteilt waren, nicht gut bearbeiten kann, gibt es die Möglichkeit, diese zum bearbeiten zu 'Deodexen', das heißt, man macht aus den beiden Files wieder ein einziges .apk File, das man bearbeiten kann. Nach dem Bearbeiten sollte man die wieder 'Odexen', da das .odex File für schnellere Zugriffe optimiert ist. (Es mag auch Gründe geben, das Rom 'Deodexed' ausliefern, dazu später mehr)

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/bin Verzeichnis

Im bin Verzeichnis liegen die nativen Binaries (oder Soft-Links und Shell-Scripte, s.u.) des Android Systems drin. Native Binaries können nicht über die normale Android-Oberfläche gestartet werden, sondern werden auf folgende Arten gestartet:

  • Als Service im im init-Script des Android Systems
  • Aus einem User-Init Script (falls man ein ROM hat, das dieses unterstützt)
  • Aus einer App heraus
  • Über ein Android-Terminal (das ist eine App, die das absetzen von nativen Kommandos gestattet)
  • Über eine adb-Verbindung mit dem adb Kommando 'shell'

Manche dieser Binaries können nicht nur eine Funktion ausführen, sondern mehrere Funktionen, beispielsweise das Binary toolbox. (Solche Binaries nennt man Multi-Call-Binary) Dieses ist für sehr viele 'native Kommandos' zuständig. daher wird für jedes dieser Kommandos ein Link auf das toolbox Binary angelegt, so dass dieses ausgeführt wird, wenn das Kommando aufgerufen wird.

Beispiel: Der Befehl ls ist zum darstellen eines Verzeichnis-Inhaltes zuständig. Unter Android liegt jedoch im bin Verzeichnis kein Binary namens ls, sondern nur ein Soft-Link namens ls, der aufgerufen wird, wenn man ls aufruft. Dieser Soft-Link leitet den Aufruf an das toolbox Binary weiter, und das führt das Anzeigen des Verzeichnis-Inhaltes aus.

Ein sehr bekanntes und gerne in Custom-ROMs verwendetes Multi-Call-Binary ist busybox. Das kann, wenn man root-Rechte hat, auch nachträglich installiert werden.

Shell-Scripte sind Scripte, in denen die Aufrufe mehrerer Binaries zu einem Script vereinigt wurden. Sie werden können wie ein Binary verwendet werden.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/etc Verzeichnis

In dem etc Verzeichnis liegen die Konfigurationsdateien für die unter dem Android-System liegende Linux-Basis und die Konfigurationsdateien für Android, die nicht zur Laufzeit verändert werden sollten.

Ebenso findet man dort oft Firmare-Dateien für im Gerät verbaute Hardware-Komponenten (beispielsweise für Wifi- oder Audio-Chips), die während des Bootens vom Kernel an die Hardware-Komponete geschickt werden.

Und es gibt dort Scripte, die zu bestimmten Zeitpunkten (Booten, Netzwerk-Verbindungs-Aufbau/Abbau) aufgerufen werden, um bestimmte Einstellungen vorzunehmen.

Wenn man nicht gerade beabsichtigt, ein ROM an eine andere Hardware anzupassen, sind Änderungen an diesen Dateien im allgemeinen nicht nötig.

Allerdings gibt es in manchen Fällen dort ein Unterverzeichnis, das doch von Interesse sein kann, das 'init.d' Verzeichnis. Wenn man ein Boot-Image hat, in dessen 'init.<devicename>.rc Script 'init.d' Support eingebaut ist, werden alle Scripte, die in dem etc/init.d/ Verzeichnis liegen, zur Bootzeit aufgerufen.

Daher kann man dann dort eigene Scripte unterbringen, um bestimmte Aktionen beim jedem Starten automatisch ausführen zu können.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/fonts Verzeichnis

Hier liegen die Fonts, die das Android-System bereit stellt. Die Fonts liegen in dem ttf-Format vor.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/frameworks Verzeichnis

Hier liegt die Android Benutzer-Oberfläche.

Bis Android 4.4 lagen die Dateien als .jar und .odex Files vor, seit Android 5.0 nur noch als .jar File.

Zusätzlich ist eine .apk Datei vorhanden, die frameworks-res.apk Datei. In dieser finden sich alle 'System-Resourcen':

  • Icons
  • Layouts
  • Texte
  • Konfigurationen
  • ...

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/lib Verzeichnis

In dem lib Verzeichnis findet man die nativen Bibliotheken, auf die das System zugreifen kann. Dabei kann man zwischen zwei verschiedenen Arten unterscheiden:

  • Java-Native-Interface Bibliotheken sind i.A. an dem Bestandteil jni im Namen zu erkennen. Sie bieten den Übergang zwischen einem Java-Programm und nativen Funktionen an, denn die Funktionen in einer jni-Bibliothek sind so gestaltet, dass sie direkt aus Java-Code aufgerufen werden können.
  • Klassische native Bibliotheken können nur von native Programmen oder Bibliotheken aufgerufen werden.

In diesem Verzeichnis gibt es Unterverzeichnisse:

  • drm - Hier befinden sich Bibliotheken für Digitales Rechte Management.
  • egl - Hier finden sich die Bibliotheken zum Zugriff auf die GL-Grafik-Prozessor. Ebenso findet sich hier die egl-Konfigurationsdatei.
  • hw - Hier finden sich Bibliotheken zu Hardware-spezifischen Komponenten.
  • modules - Hier finden Kernel Module, die zur Laufzeit oder beim Booten nachgeladen werden können.
  • soundfx - Hier finden sich Bibliotheken für Sound Effekte.
  • ssl - Hier finden sich Bibliotheken für sichere Netzwerk-Kommunikation (ssl: Secure Socket Layer).

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/media Verzeichnis

Im media Verzeichnis finden sich Medien-Dateien. Im Standard AOSP nur vom Typ Adio, die in einem Unterverzeichnis audio liegen. Dort wird durch weitere Unterverzeichnisse zwischen verschiedenen Arten von Tönen unterschieden:

  • alarms - Hier finden sich die Alarm-Töne
  • notificatons - Hier finden sich die Benachrichtigungs -Töne.
  • ringtones - Hier finden sich die Klingel-Töne.
  • ui - Hier finden sich die Töne, die das Android-System zu bestimmten Ereignissen abspielt, beispielsweise bei Tastendrücken, Kamera-Auslösung, Sperren/Entsperren, Geringem Batteriestand usw.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/priv-app Verzeichnis

Seit Android 4.4 gibt es das priv-app Verzeichnis. Darin finden sich Apps, die bis Android 4.4 im app Verzeichnis lagen, aber die Berichtigungen brauchen, die als System-Berechtigungen gelten. Für mehr Details siehe hier: Android-Berechtigungen

Ansonsten gilt hier gleiche wie für das [POST=8317509]app Verzeichnis[/POST]

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
  • Danke
Reaktionen: cicebear
Das /system/tts Verzeichnis

Im dem tts Verzeichnis findet sich der Text-To-Speach (Text zu Sprache) Support.

Darin findet sich ein Unterverzeichnis lang_pico und darin die einzelnen .bin Dateien, für die jeweiligen Sprachen.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/usr Verzeichnis

Im usr Verzeichnis befinden weitere Konfigurationsdateien.

  • Tastatur-Buchstaben
  • Tastatur-Layout
  • ...

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/vendor Verzeichnis

Im vendor Verzeichnis finden sich Dateien, die vom Hersteller des Gerätes oder einzelner Hardware-Komponenten kommen.

  • Firmware für bestimmte Komponenten
  • Treiber für bestimmte Komponenten

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /system/xbin Verzeichnis

Im xbin Verzeichnis finden sich native Binaries, genauso wie im [post=8317582]bin Verzeichnis[/POST].

Allerdings werden hier 'Additonal Binaries' untergebracht, die nicht zum Basis-Betrieb benötigt werden. Die Aufteilung zwischen bin und xbin ist von Linux (bzw Unix) übernommen.

Hier wird üblicherweise auch das su Binary und das busybox-Binary untergebracht (aber nicht zwingender weise).

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8317408]Zurück zum system Verzeichnis[/POST]
 
Das /data Verzeichnis

Dieses Verzeichnis enthält die User-Daten. Das sind nicht die Daten, an die man zunächst denkt, wenn man von User-Daten spricht, sondern alles, was der User am Auslieferungs-Zustand verändert hat:

  • System-Einstellungen
  • Installierte Apps
  • Einstellungen und Arbeitsdaten der Apps
  • Updates von System-Apps

Wenn man das Android-System auf den 'Werks-Zustand' zurück setzt, geschieht nichts anderes, als dass das gesamte data Verzeichnis gelöscht wird.

Anmerkung: Bei Geräten mit interner 'SD-Karte' ist der Inhalt der internen SD-Karte auch in dem data Verzeichnis im Unterverzeichnis media gespeichert. Dies wird beim 'Werks-Reset' jedoch nicht mit gelöscht, sondern bleibt erhalten!

Beim ersten Booten nach dem 'Werks-Reset' werden bestimmte 'Basis-Einstellungen' in das data Verzeichnis geschrieben. Deswegen dauert das erste Booten bei einem neuen Gerät oder nach einem 'Werks-Reset' etwas länger als jedes weitere Booten.

Der Inhalt des data Verzeichnisses gehört im Allgemeinen nicht zum Auslieferungsumfang eines Android Roms. Was das Rom dort an Daten benötigt, legt es beim ersten Booten nach der Installation und nicht während der Installation an.

Im data Verzeichnis finden sich folgende Unterverzeichnisse:

  • [POST=8322099]app[/POST]
  • [POST=8322116]data[/POST]
  • [POST=8322119]media[/POST]
  • [POST=8322124]weitere[/POST]

Hinweis: Manche Hersteller sehen Vorteile darin, die /data Partition in verschiedene kleinere Partitionen aufzuteilen. Diese kleineren Partitionen werden dann in Verzeichnisse (meist Unterverzeichnisse von /data) gemountet.
  • Vorteil kann dabei sein, dass für bestimmte Verzeichnis ein fester Speicherplatz reserviert ist, der nicht von den Ihnalten der anderen Verzeichnisse verbraucht werden kann.
  • Nachteil kann dabei sein, dass das Gerät Speicherprobleme bekommt, weil eine Partition voll ist, aber auf den anderen Partition noch Platz frei ist, der aber dort, wo er benötigt wird, nicht genutzt werden kann.
[POST=8315162]Zurück zur Übersicht[/POST]
 
Zuletzt bearbeitet:
Das /data/app Verzeichnis

In dem app Verzeichnis findet man die vom Benutzer installierten Apps und die vom Benutzer installierten Updates der System-Apps.

Die Apps liegen als .apk Dateien vor. Der Name der App-Datei wird wird dabei aus dem Java-Package-Name gebildet, aber um ein Nummer erweitert, dass es während des Instalieren von Updates keine Namens-Kollisionen gibt.

Wenn man beispielsweise das bekannte Android-Termal von Jack Palevich betrachtet, so heißt die .apk Datei, die man von seiner Homepage laden kann zwar Term.apk. Das Java-Package heißt 'jackpal.androidterm'.

Wenn sie installiert wird, wird sie 'jackpal.androidterm-1.apk' genannt.

Wenn jetzt ein Update installiert wird, wird die neue .apk Datei als 'jackpal.androidterm-2.apk' benannt, dann erst wird die 'jackpal.androidterm-1.apk' Datei entfernt.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8321789]Zurück zum data Verzeichnis[/POST]
 
Das /data/data Verzeichnis

In dem data Verzeichnis findet man die Daten aller installierten Apps, sowohl der vom User Installierten Apps als auch der System Apps.

Jede App eine privates Verzeichnis in das nur sie zugreifen kann, dessen Name dem Java-Package der App entspricht. Im Falle des Android-Terminals wäre das 'jackpal.androidterm'.

In dem privaten Verzeichnis kann es verschiedene Unterverzeichnisse geben:

  • cache - Hier liegen von der App gecachete Daten.
  • databases - Hier liegen sql-lite Datenbank-Dateien
  • files - Hier liegen private Dateien der App
  • lib - Hier liegen von mitgebrachte native (Jni) Bibliotheken.
  • logs - Hier Logfiles der App
  • shared_prefs - Hier liegen Einstellungen der App, die als 'Shared-Preferences' mit anderen Apps geteilt werden können.
  • ...

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8321789]Zurück zum data Verzeichnis[/POST]
 
Das /data/media Verzeichnis

In dem media Verzeichnis liegen die Inhalte der 'Internen SD-Karte', wenn das Geräte eine 'emulierte' interne SD-Karte hat. Die Inhalte werden dabei in dem /data/media Verzeichnis abgelegt (welches ein Linux-Datei-System hat), jedoch über 'FUSE' (File System in Userspace) als eigene Partition nach /sdcard gemountet und haben dort (scheinbar) ein V-FAT Filesystem.

Bis Android 4.1 lagen die Inhalte direkt unter media

Ab Android 4.2 gibt es das Multi-User Feature. Daher liegen die Inhalte ab Android 4.2 media/0 für den Hauptbenutzer und für weitere Benutzer unter media/10, media/20 usw...

Das kann übrigens bei Geräten, deren Recovery für Android 4.1 und höhere Version gedacht ist, zu Verwirrungen des Users führen, wenn der im Recovery auf Daten zugreifen möchte, die unter Android 4.2 (oder höher) auf die interne SD-Karte geschrieben wurden, denn die findet man im Recovery erst, wenn man in das entsprechende Verzeichnis 0 reinguckt (oder 10, falls nicht der Hauptbenutzer die Daten gespeichert hat)

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8321789]Zurück zum data Verzeichnis[/POST]
 
Zuletzt bearbeitet:
Die weiteren Verzeichnisse unter /data

Unter data gibt es noch diverse weiter Verzeichnisse, die ich hier nicht alle durchgehen möchte. Aber zu ein paar Verzeichnissen möchte ich eine Anmerkung machen.

  • dalvik-cache - Hier finden sich Cache Dateien zur Dilvik-VM
  • misc - Hier finden sich Einstellungen des Systems, beispielsweise für Wifi-Netzwerke, Sicherheits-Zertifikate uvm.
  • local - Hier finden sich Lokale Dateien, unteranderem User-Init-Scripte (wenn unterstützt) und ein tmp Verzeichnis für temporäre Dateien.
  • ...

Wenn sich jemand die Mühe macht, weitere Verzeichnisse genauer zu beschreiben, pflege ich de Informationen gerne (mit Verweis auf den Beitrag) ein.

[POST=8315162]Zurück zur Übersicht[/POST] - [POST=8321789]Zurück zum data Verzeichnis[/POST]
 
Die weiteren Verzeichnisse unter /

Im Basis Verzeichnis gibt es noch diverse weiter Verzeichnisse, die ich hier nicht alle durchgehen möchte. Aber zu ein paar Verzeichnissen möchte ich eine Anmerkung machen.

  • dev - Hier liegen die sogenannten 'Device-Nodes', das sind unter Unix/Linux System die Knoten, über die man auf Hardware-Komponenten des Systems zugreifen kann
  • proc - Hier findet man die 'Process-Nodes', das sind unter Unix/Linux die Knoten, über die man auf die Prozesse oder Lokalen Sockets zugreifen kann.
  • sys - Hier findet man die 'System-Nodes', das sind unter Unix/Linux die Knoten, über die man Kernel-Einstellungen lesen oder schreiben kann.
  • mnt - Hier findet man die Mount-Points, das sind Verzeichnisse, in die weitere File-Systeme (externe SD-Karte, USB-Laufwerke/Sticks, Netzwerk-Laufwerke uvm eigebunden werden können.
  • sdcard - Das ist die (interne) SD-Karte. Wenn es sich um eine interne SD-Karte handelt, liegen die Daten unter [POST=8322119]/data/media[/POST], können aber über /sdcard gelesen werden.
  • ...

Wenn sich jemand die Mühe macht, weitere Verzeichnisse genauer zu beschreiben, pflege ich de Informationen gerne (mit Verweis auf den Beitrag) ein.

[POST=8315162]Zurück zur Übersicht[/POST]
 

Ähnliche Themen

J
Antworten
0
Aufrufe
580
Jensens
J
harvey186
  • harvey186
Antworten
1
Aufrufe
996
harvey186
harvey186
T
Antworten
0
Aufrufe
622
toto35
T
Zurück
Oben Unten