5

Der folgende Link gibt eine kurze Beschreibung des Paketinstallationsprozesses in Android.Wie UID einer App bei der Installation in Android ermittelt?

http://java.dzone.com/articles/depth-android-package-manager

Ich bin neugierig, wie die UID einer App bei der Installation basierend auf legen Sie die Berechtigungen in seiner Manifest-Datei bestimmt wird.

Auch dort ist die platform.xml (in/frameworks/base/data/etc Verzeichnis für 4.0 ICS Source Code) Datei, die Liste der Berechtigungen mit GID mit ihnen verbunden enthält. Die Beschreibung sagt

Die folgenden Tags verknüpfen Low-Level-Gruppen-IDs mit Berechtigungsnamen. Wenn Sie ein solches Mapping angeben, sagen Sie , dass jeder Anwendungsprozess, der die angegebene Berechtigung erteilt hat, auch mit der angegebenen Gruppen-ID ausgeführt wird, so dass alle Dateisysteme (Lesen, Schreiben, Ausführen) zulässig sind für diese Gruppe.

In ähnlicher Weise gibt es auch eine Liste von Berechtigungen auf hoher Ebene, die bestimmten UIDs zugewiesen sind.

Meine Frage ist, wenn eine App mit Berechtigungen X, Y, Z wie funktioniert der Zugriff angegeben ist es aus der Abbildung aus diesem platform.xml

auch jedes Mal der App ausgeführt wird, die Zuordnung stattfinden wird installiert wird, Jeder Augenblick (das scheint nicht von Anfang an Design von Android, wo die App-Berechtigungen nicht geändert werden können, es sei denn, es gibt ein Update). Also, wenn das der Fall ist, wo es speichert, sagt, dass diese App mit solchem ​​und solchem ​​Zugang oder solcher und solcher uid laufen sollte.

Ich hoffe, ich habe meine Frage klar gemacht, lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Ich versuche nur mehr darüber zu erfahren, wie die Interna des Android OS funktionieren.

Dank

Antwort

7

Die UID einer Anwendung hängt nicht von der Menge der angeforderten Berechtigungen. Im allgemeinen Fall wird während der Installation ordnet Package eine eindeutige UID auf eine Anwendung aus einer Menge [FIRST_APPLICATION_UID; LAST_APPLICATION_UID] (tatsächlich ist dieses Verfahren leicht bei der Einführung von Multi-User-Unterstützung geändert):

Das Android System ordnet einen eindeutigen Benutzer ID (UID) für jede Android-Anwendung und führt sie als diesen Benutzer in einem separaten Prozess aus.

Sie sprechen über eine begrenzte Anzahl von GIDs (Gruppen-IDs), die einer Anwendung basierend auf den Berechtigungen zugewiesen sind. Um beispielsweise den Zugriff von Anwendungen auf die Netzwerkschnittstelle zu beschränken, wurde dem Linux-Kernel ein spezieller Patch hinzugefügt, der es einem Prozess ermöglicht, Net Sockets nur dann zu erstellen, wenn dieser Prozess eine spezielle hardcodierte GID hat. Wenn also während der Installation einer Anwendung ein Benutzer die Berechtigung "android.permission.INTERNET" akzeptiert, weist PackageManager dieser Anwendung eine spezielle GID zu (basierend auf den Werten in der Datei platform.xml). Beim Start dieser Anwendung wird ein Prozess dieser App mit dem Wert festgelegt. Somit erhält der Prozess der Anwendung ein Recht, Sockets zu erstellen.

Andere Berechtigungen werden auf Android Framework-Ebene erzwungen.

+1

Vielen Dank macht mehr Sinn. Sobald GIDs einer Anwendung zugewiesen sind, werden sie irgendwo gespeichert, damit sie schneller abgerufen werden können, wenn die Anwendung aufgerufen wird. Oder würden sie auf der Grundlage der Berechtigungen, die die Anwendung in ihrer Manifest-Datei hat, erneut berechnet? Ich versuche nur herauszufinden, wo die Gids zugeordnet werden, wenn eine Anwendung aufgerufen wird. Vielen Dank im Voraus nochmal Yury. –

+2

Soweit ich mich erinnere, gibt es im PackageManager einen Cache, der die Informationen über die Gids speichert. Wenn also ein Aufruf erfolgt, werden diese Informationen aus diesem Cache abgerufen und für das Setzen auf einen Zygote-Prozess verwendet. – Yury

0

Die von App bat um Erlaubnis, nur die GID auswirken, aber keine der UID der application.You in Schach interessiert kann this article für alle uid und gid Sachen.