Da jede Anwendung als separater Benutzer ausgeführt wird, was passiert, wenn Sie ein neues Benutzerkonto hinzufügen möchten?

Demnach läuft jede Anwendung in Android als separater Benutzer auf Kernel-Ebene mit einer eindeutigen Benutzer-ID und Gruppen-ID.

Was passiert also unter der Haube, wenn Sie einen neuen Benutzer hinzufügen (z. B. zu Ihrem gemeinsam genutzten Tablet)?

Wenn ich mich daran erinnere, ist jede Aufgabe eine Anwendung, die als separater „Benutzer“ im Kernel ausgeführt wird, unter dem Gesamtbenutzer, der sich angemeldet hat. Das bedeutet, dass es viele „BENUTZER“ gibt, wie bei echten Menschen mit Konten, aber auf Kernel-Ebene stuff ist ein virtueller Benutzer, keine reale Person oder Benutzer des Tablets/Geräts, sondern ein abstrakter isolierter Prozess. Es ist ein Sicherheits-/Datenschutzproblem. Das Hinzufügen eines weiteren menschlichen Benutzerprofils fügt nur eine weitere Ebene hinzu. Sie werden Benutzer1 mit vielen Anwendungen sein, die unter virtuellen „Benutzern“ ausgeführt werden, und Benutzer2 wird seine Apps unter virtuellen Benutzern ausführen lassen. Das Wort „Benutzer“ ist verwirrend.
Verwechseln Sie „OS-Benutzer“ nicht mit Benutzerprofilen/Konten . Die mit JellyBean hinzugefügte „Multi-User“-Funktion verwendet Profile für verschiedene Konten, nicht für OS-Benutzer. Zwei völlig unterschiedliche Paar Schuhe.

Antworten (2)

Die Linux-Benutzer-IDs , die Android verwendet, um Apps voneinander zu isolieren, haben keinerlei Bezug zu Benutzerprofilen auf Android 4.2-Tablets.

Bei Android bekommt jede App ein eigenes Verzeichnis zum Speichern von Daten. Das Linux-Benutzer-ID-System wird verwendet, um sicherzustellen, dass Apps die Daten anderer nicht lesen können. Aber alle diese Datenverzeichnisse befinden sich in einem Verzeichnis im Dateisystem, /data/user/0. Nehmen wir an, der erste Benutzer heißt Abulurd und installiert die App Showr. Es könnte die Benutzer-ID 1004 und das Verzeichnis /data/user/0/com.shadowburst.showr.

Angenommen, Sie erstellen ein neues Benutzerprofil für Beatrice. Sie bekommt ein neues Verzeichnis, /data/user/1, das leer beginnt. Wenn sie sich beim Gerät anmeldet und Showr installiert, lädt es die App nicht erneut herunter (da das Android-App-Installationsprogramm weiß, dass sich die APK-Datei bereits auf dem Gerät befindet), aber es erstellt eine neue Benutzer-ID 1007 (z. B.). und ein neues Verzeichnis /data/user/1/com.shadowburst.showr.

Android verwendet Linux-Dateisystemberechtigungen und die verschiedenen Linux-Benutzer-IDs, um nicht nur sicherzustellen, dass Abulurds Showr die Daten von Abulurds anderen Apps nicht lesen kann, sondern auch, dass Abulurds Showr die Daten von Beatrices Showr nicht lesen kann. Die beiden Instanzen von Showr werden in unterschiedlichen Prozessen mit unterschiedlichen Benutzer-IDs ausgeführt.

Wenn Sie mit der Linux-Terminologie vertraut sind, ähnelt das Erstellen eines neuen Benutzerprofils der Verwendung chrootauf dem Gerät, um einen isolierten Teil des Dateisystems zum Ausführen von Apps zu erhalten.

Was ich beschrieben habe, ist der übliche Prozess, aber so wie Apps geschrieben werden können, um ein Datenverzeichnis mit anderen Apps desselben Entwicklers zu teilen (signiert mit demselben Schlüssel), gibt Android Apps die Möglichkeit zu sagen, dass sie mit mehreren Benutzern funktionieren. Auf diese Weise kann eine App so geschrieben werden, dass sie einen Prozess für alle Benutzerprofile hat, damit sie Daten teilen oder eine spezielle Funktion ausführen können. Der Sperrbildschirm muss zum Beispiel so funktionieren, weil sich alle Benutzerprofile eine Sperrbildschirm-App teilen, die die Sperrbildschirmeinstellungen aller Benutzer lesen muss.

Paralleler Beitrag :) Um es einfacher auszudrücken, können die Profile damit verglichen werden, dass verschiedene VMs auf demselben Host ausgeführt werden, wobei eine Art "gemeinsamer Speicher" verwendet wird?
Nein. Eine VM hätte ihren eigenen Kernel.
Wenn also eine Person eine Anwendung installiert und ihr die Benutzer-ID, z. B. app_143, zugewiesen wird und später ein anderes Benutzerprofil erstellt und die Anwendung irgendwann mit diesem aktiven Benutzerprofil erneut ausführt, kann eine andere Benutzer-ID, z. B. app_265, für dieselbe Anwendung erstellt werden?
@galegosimpatico Ja, genau das ist es. Vergessen Sie nicht, dass die Anwendung für das neue Benutzerprofil installiert werden muss, bevor sie ausgeführt werden kann.
Vielen Dank. Sie sagen, dass Apps nicht zweimal heruntergeladen werden, weil das Installationsprogramm weiß, dass sich die APK-Datei bereits auf dem Gerät befindet. Nun, es lädt es nicht herunter, aber installiert es die App neu (auf Anfrage eines anderen Profils)? Können einige "Binärdateien" nicht von allen Benutzern gemeinsam genutzt werden? (für Neuinstallationen von wirklich schweren oder großen Anwendungen)
@Reflection Ja, es installiert die App im neuen Benutzerprofil. Das bedeutet nicht, dass es das APK kopiert, es erstellt nur neue Benutzer-IDs und ein neues Datenverzeichnis (und der Paketmanager fügt seinen Benutzerdaten eine Notiz hinzu, um zu sagen, dass die App für diesen Benutzer installiert ist). Selbst wenn die App groß ist, benötigt sie nur wenig zusätzlichen Speicherplatz, es sei denn, die App lädt eine große Datei in ihr privates Datenverzeichnis herunter, wenn Sie sie zum ersten Mal ausführen.
In welchem ​​Verzeichnis befinden sich also die eigentlichen "ausführbaren Dateien" der App? Und welcher Benutzer auf Kernel-Ebene ist der Eigentümer dieser Dateien? Wer hat Zugriff und Lese- und Schreibrechte auf diese Dateien?
Die APK-Datei ist die eigentliche ausführbare Datei. Es gibt ein paar Verzeichnisse, in denen APK system-Dateien leben können. Sie gehören dem Benutzer und sind weltweit lesbar. Wenn Sie etwas Bestimmtes über das System wissen möchten, stellen Sie eine neue Frage.

Wenn Sie ein neues Benutzerkonto hinzufügen, wird ein neues Konto (oder „Benutzerprofil“) erstellt. Das hat überhaupt nichts mit der Benutzer-/Gruppenverwaltung auf OS-Ebene zu tun. Sie werden feststellen, dass die meisten Anleitungen (z. B. diese auf HowToGeek ) von Konten sprechen , da der Begriff "Benutzer" ziemlich irreführend wäre.

Ich bin kein Android-Entwickler, daher kann ich Ihnen keine tiefere technische Erklärung geben. Aber soweit ich weiß, ist die Mehrbenutzerfunktion auf dem Linux-Kern (dh in Java/Dalvik) realisiert. EDIT: Dan hat seine Antwort gleichzeitig mit meiner gepostet, also siehe dort für den technischen Hintergrund :)