Android下uid与多用户释疑(一)
来源:互联网 发布:公积金网络消费贷款 编辑:程序博客网 时间:2024/06/15 19:53
Android是基于Linux的OS,Linux下有一套自己的账户管理体系,而Android对此有一些封装和改动。同事,Android也引进了自己的多用户功能。所以,大量的类似“uid”的概念存在于Android中,让初学者很头痛,有必要整理一下以释疑。
1.Linux uid/gid
Linux下的用户id(uid)和群组id(gid)。Linux是多用户系统,每个用户都拥有一个uid,这个uid由系统和用户名做映射绑定。同时,为了便于用户管理(譬如管理文档权限),Linux引入了群组的概念,可以将多个用户归于一个群组。每一个群组拥有一个群组id(gid)。
root用户:Linux下的唯一的超级用户,拥有所有的系统权限。root用户所在的组即root组。
2.Android uid/gid(Linux uid/gid的移花接木)
在Android 4.2之前,Android不支持多用户。Android将Linux的账户管理体系用在了应用管理上。举例说明,在一台android手机上安装某应用,通过adb shell查看其数据文档:
可以看到文件拥有者是u0_a81,所在群组为u0_a81。从data/system/packages.xml根据包名查看此应用信息,可以看到:userId=”10081”。
在代码中通过接口android.os.Process.myUid()来获取,也可以看到10081。
从Android源代码Process.java对于此Api的注释来看:
可以看到应用进程是运行在这个Linux kernel uid下面。
在Process源代码中还能够看到一些常量定义:
可以看到,Android对于一些系统uid的保留定义,而且基本上每个用户自成一群组,gid与uid相同。群组的概念已经被淡化。查看某一个系统应用data/data/目录,可以看到:
拥有者为system,群组为system。结合上面的u0_a81,可以看到,Android会以应用为单位,分配uid/gid。这里的system、u0_a81是用户名/群组名,由android生成,与uid/gid映射匹配。
分析到这,不难理解AndroidManifest.xml中的sharedUserId属性,譬如,前面举例说明的系统应用Settings,其AndroidManifest.xml中即有
即,Android为应用准备的uid/gid是可以共享的,其目的当然包括这样可以在不同的应用中共享数据和文件。当然,这还需要应用之间的签名匹配。
- Android下uid与多用户释疑(一)
- Android下uid与多用户释疑
- Android下uid与多用户释疑(二)
- uid(组件id) = userId + appId (android多用户)
- android多用户下应用安装详解一(新应用安装情况)
- android 中UID与PID
- scanf()函数释疑(下)
- Android 安全机制(1)uid 、 gid 与 pid
- 三极管相关知识点释疑(一)
- Android中的UID、GID与应用安全
- Android中的UID、GID与应用安全
- 关于android uid 与进程的关系
- [转]scanf()函数释疑(下)
- Android 中易混属性释疑(不断完善中)
- Android virtual device(AVD)参数释疑
- android多用户
- android多用户
- android多用户下应用安装详解二(开机读取流程)
- 引言二
- jvm 实践
- Apache Kafka监控之KafkaOffsetMonitor
- [浏览器] 重装chrome失败:糟糕!安装失败。错误代码:0xa0430721
- SEAndroid策略分析(二):类和许可
- Android下uid与多用户释疑(一)
- muduo源码分析:无界队列和有界队列(消费者-生产者)
- 这7个开源技术支撑起整个互联网时代
- 【签名】4.2.2系统不能安装引出的签名问题
- 上传图片
- [Javascript] 事件Event
- 我的Android进阶之旅------>android Button上面的英文字符串自动大写的问题解决
- 易语言获取当前鼠标的窗口句柄、位置、颜色值
- 无密码自动登录