以下链接简要介绍了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操作系统内部工作原理的信息。
由于
答案 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内容。