Android UID 和 userID 以及 appID

Android UID 和 userID 以及 appID我们知道 Android 操作系统是基于 Linux 内核的 所以 Android 的 UID 是基于 LinuxUID 的

大家好,欢迎来到IT知识分享网。

我们知道Android 操作系统是基于Linux内核的,所以Android 的UID 是基于 Linux UID的。

Linux UID

Linux 本身就是一个多用户操作系统,每一个用户都会有一个UID,不同UID 之间的资源访问是受限的。
其中,Linux的DAC权限模型,控制的不同UID资源间的读、写、执行。也就是所谓的 “777” 权限。
d: 标识文件夹
r : 读权限
w:写权限
x : 执行权限
在这里插入图片描述
Android 平台就是利用基于 Linux 用户的保护机制识别和隔离应用资源,为此,Android 会为每个 Android 应用分配一个唯一的用户 ID (UID),并在自己的进程中运行。

例如,应用的内部存储,data/data/应用包名/ 正是此机制一个直接应用,每个应用都有一个单独的UID,无法对彼此数据的直接访问。
在这里插入图片描述

Android appID

在单用户时代, 每个package单独分配一个uid/gid来进行管理(共享uid/gid的除外)。而在支持多用户之后,同一个 app, 在不同的 android user 下运行时, 其 uid 是不同的。 因此,无法使用唯一的 uid 来标识一个 android package。所以引入了 appID 来标识一个 android package, appID 在安装时确定, 与运行状态无关, 因此, 在不同的 android user 下, 同一个 package 的 appID 是不变的。

如果默认不创建多个用户时,android 只有一个用户时 uid == appID

 public static final int FIRST_APPLICATION_UID = 10000; public static final int LAST_APPLICATION_UID = 19999; size ==> 第几个安装。所以 最多安装9999 个应用 appId = Process.FIRST_APPLICATION_UID + size; 

Linux userID

Android在创建每个用户时,都会分配一个整型的 userID。对于主用户(正常下的默认用户)来说,userId为0,之后创建的userId将从10开始计算,每增加一个userId加1。

有了 appID 和 UserID之后,我们就可以通过组合它们来生成新的 UID,但是有两种情况。
如果默认不创建多个用户时,
UserID = 0
uid = appID
创建多用户时:
UserID = 10
uid = UserID * + appID
我们来看看 UserID 的规则代码

 // frameworks/base/core/java/android/os/UserHandle.java public static int getUid(@UserIdInt int userId, @AppIdInt int appId) { 
    if (MU_ENABLED && appId >= 0) { 
    return userId * PER_USER_RANGE + (appId % PER_USER_RANGE); } else { 
    return appId; } } public static @UserIdInt int getUserId(int uid) { 
    if (MU_ENABLED) { 
    // public static final int PER_USER_RANGE = ; return uid / PER_USER_RANGE; } else { 
    return UserHandle.USER_SYSTEM; } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149962.html

(0)
上一篇 2025-03-21 15:33
下一篇 2025-03-21 16:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信