Android 多用户时的userId获取方法

439 阅读1分钟

1. Linux uid/gid

Linux下的用户id(uid)和群组id(gid)。Linux是多用户系统,每个用户都拥有一个uid,这个uid由系统和用户名做映射绑定。同时,为了便于用户管理(譬如管理文档权限),Linux引入了群组的概念,可以将多个用户归于一个群组。每一个群组拥有一个群组id(gid)。 root用户:Linux下的唯一的超级用户,拥有所有的系统权限。root用户所在的组就是root组。

2. Android uid(4.2(API Level 17))

Android 4.2开始支持多用户。Linux的uid/gid多用户体系已经被用在App管理上。

Android重新开发了一套多用户体系,在UserManagerService中管理,PackageManagerService和ActivityManagerService中也有相关逻辑。Android的多用户可以做到不同用户的应用的物理文件级(数据)的区分,以实现不同用户有不同的壁纸、密码,以及不同的应用等。

例如:在一个有两个用户(用户id分别为0和10)的安卓设备上,在用户10下安装一个应用,此时,在0下是看不到这个应用的。

UserHandle中: 在这里插入图片描述

根据这个获取逻辑,从Binding中获得当前Uid,然后除以PER_USER_RANGE(100000)

Binder中:

在这里插入图片描述

最终实现 在这里插入图片描述