在Android中安装期间确定应用的UID如何?

时间:2014-01-07 18:52:05

标签: android android-source package-managers android-permissions uid

以下链接简要介绍了android中的软件包安装过程。

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

我很想知道应用程序的UID是如何在安装过程中根据设置清单文件中的权限而确定的。

还有platform.xml(在/ frameworks / base / data / etc目录中为4.0 ICS源代码)文件,其中包含与gid相关联的权限列表。描述说

以下标记将低级别组ID与。关联          许可名称。你说的是通过指定这样的映射          授予给定权限的任何申请流程都将          也可以使用附加到其进程的给定组ID运行,          所以它可以执行任何文件系统(读,写,执行)操作          允许该组。

以类似的方式,还有一个分配给特定uid的高级权限列表。

我的问题是,当安装了具有权限X,Y,Z的应用时,如何通过此platform.xml的映射指定其访问权限

每次运行应用程序时,映射都会在每个时刻发生(从Android的初始设计看起来似乎不对,除非有更新,否则无法更改应用程序权限)。因此,如果是这样的情况,它会存储说这个应用程序应该运行这样的访问或类似的这样的uid。

我希望我的问题清楚,如果您需要更多信息,请告诉我。我只是想了解更多有关Android操作系统内部工作原理的信息。

由于

2 个答案:

答案 0 :(得分:7)

应用程序的UID不依赖于所请求权限的集合。在一般情况下,在安装过程中,PackageManager从集合[FIRST_APPLICATION_UID; LAST_APPLICATION_UID]为应用程序分配唯一的UID(实际上,随着多用户支持的引入,此过程略有改变):

  

Android系统为每个Android应用程序分配一个唯一的用户ID(UID),并在单独的进程中以该用户身份运行。

您所谈论的是基于权限分配给应用程序的一组有限的GID(组ID)。例如,为了限制应用程序对网络接口的访问,Linux内核中添加了一个特殊的补丁,只有当此进程具有特殊的硬编码GID时,才允许进程创建网络套接字。因此,在安装应用程序期间,如果用户接受权限“android.permission.INTERNET”,则PackageManager会为此应用程序分配一个特殊的GID(基于platform.xml文件中的值)。在此应用程序启动期间,此应用程序的进程已设置为值。因此,应用程序获得了创建套接字的权利。

在Android Framework级别强制执行其他权限。

答案 1 :(得分:0)

应用程序请求的权限仅影响GID但不影响应用程序的UID。您可能有兴趣检查this article所有的uid和gid内容。