5

次のリンクは、アンドロイドでのパッケージインストールプロセスの簡単な説明です。Androidのインストール中にアプリのUIDがどのように決定されましたか?

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

私はアプリのUIDは、そのマニフェストファイルに存在する設定された権限に基づいて、インストール時にどのように決定されるかを知って興味があります。

また、関連するgidを持つアクセス許可のリストを含むplatform.xml(4.0 ICSソースコードの/ frameworks/base/data/etcディレクトリ)ファイルもあります。説明

以下のタグは、低レベルのグループIDを 権限名に関連付けています。このようなマッピングを指定することにより、 は、指定されたアクセス権を付与されたアプリケーションプロセスは、プロセスに添付された特定のグループIDで実行されることを意味します。 ファイルシステム(読み取り、書き込み、実行)操作を実行できます。 そのグループのために。

同様に、特定のuidに割り当てられた上位レベルのアクセス許可の一覧もあります。アプリは権限Xにインストールされている場合

私の質問は、そのアクセスは、指定されないかY、Zは、それがこのplatform.xmlからマッピングからです。また毎回アプリが実行され

マッピングがで行いませんすべての瞬間(それはアプリの権限が更新されない限り変更することができないアンドロイドの最初のデザインからそう思わない)。だから、それはどこにこのアプリは、そのようなアクセスまたはそのようなuidと実行する必要がありますを格納している場合です。

私は私の質問を明確にしたいと思っています。詳細が必要な場合はお知らせください。私はちょうどAndroid OSの内部がどのように機能するかについてもっと学びたいと思っています。

おかげ

答えて

7

は、アプリケーションのUIDは、要求されたアクセス権のセットには依存しません。一般的な場合では、インストール時PackageManagerは(実際には、このプロセスはわずかにマルチユーザ・サポートの導入によって変更された)セット[FIRST_APPLICATION_UID; LAST_APPLICATION_UID]からアプリケーションに固有のUIDを割り当てる:

Androidシステムは、ユニークなユーザを割り当てますID(UID)を各Androidアプリケーションに追加し、そのユーザーとして別のプロセスで実行します。

あなたが話しているのは、権限に基づいてアプリケーションに割り当てられたGID(グループID)の限られたセットです。たとえば、ネットワークインターフェイスへのアプリケーションのアクセスを制限するために、特別なパッチがLinuxカーネルに追加されています。これにより、プロセスに特殊なハードコーディングされたGIDがある場合にのみ、ネットソケットを作成できます。したがって、アプリケーションがインストールされているときに、ユーザーが "android.permission.INTERNET"アクセス権を受け入れると、PackageManagerはこのアプリケーションに(platform.xmlファイルの値に基づいて)特別なGIDを割り当てます。このアプリケーションの起動時に、このアプリケーションのプロセスは値で設定されます。したがって、アプリケーションのプロセスはソケットを作成する権利を取得します。

その他の権限はAndroid Frameworkレベルで適用されます。

+1

ありがとうございます。だから、gidがアプリケーションに割り当てられると、いつでもアプリケーションが呼び出されるときに、より速い検索のためにそれらはどこにでも保存されますか?あるいは、アプリケーションがマニフェストファイル内に持つ権限に基づいて、その場で計算されますか?私は、アプリケーションが呼び出されたときにgidのどこにマップされるかを調べようとしています。あらかじめYuryに感謝します。 –

+2

私が覚えている限り、PackageManagerには、gidに関する情報を格納するキャッシュがあります。したがって、anが呼び出されると、この情報がこのキャッシュから取得され、Zygoteプロセスのためにgidを設定するために使用されます。 – Yury

0

アプリによって要求された権限しかGIDに影響を与えるが、無application.YouのUIDはすべてのuidとgidもののためのチェックthis articleに興味があります。

関連する問題