Android は、特にハードウェアの制限に関しては、多くの標準 Linux(-kernel?) メカニズムを使用します。
すべてのアプリには新しい一意の (Linux-) ユーザー ID が割り当てられ、アプリ プロセスが作成されるたびに、システムはそのユーザー ID を使用してそれを作成します。アプリを削除しない限り、ID は変更されません。つまり、下位のシステム レベルにアクセスする場合、アプリは特定のユーザーとして表示され、ユーザーと連携するすべての (Linux の) アクセス許可システムもアプリに適用されます。
マニフェストで要求すると、アプリは、そのストレージへの書き込み権限を持つWRITE_EXTERNAL_STORAGE
(Linux-) グループ ( と呼ばれる) のメンバーにもなります。ファイルシステムのパーミッションは、ユーザー (=所有者) とグループsdcard_rw
への書き込みのみを許可するように強制され、他のユーザー (=その他) は読み取りのみが許可されます。Googleはアプリの SD カードへの書き込みをブロックしていますかsystem
sdcard_rw
そうすることで、Android は、アプリの起動時に生成されるプロセスの正しい UID/GID を設定することを除いて、ほとんど何もする必要がなく、残りは低レベルで処理されます。特定のグループのメンバーではないアプリは、特定のハードウェアにアクセスできません。
パーミッション <> グループ マッピングのリスト: platform.xml
また、アプリの署名に基づいた (Android ソフトウェアの) 制限もいくつかあります。また、アプリが要求したアクセス許可を単に検索することによって行われる制限もあります。例: ContextImpl #checkPermission()制限されたアクションを許可するコード。
ときどき、プログラムで GPS をオンにするなどの方法を発見する人がいます。そのようなチェックがどこかに欠けているからです。