Android学习——Android 系统中的UID、GID、GIDS与PID

                <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-e2445db1a8.css">
                    <div class="htmledit_views">

Android 系统中的UID、GID、GIDS与PID

        在 Android 上,一个用户 UID 标示一个应用程序。应用程序在安装时被分配用户 UID,应用程序在设备上的存续期间内,用户 UID 保持不变。对于普通的应用程序,GID即等于UID。

        GIDS 是由框架在 Application 安装过程中生成,与 Application 申请的具体权限相关。 如果 Application 申请的相应的 permission 被 granted ,而且有对应的GIDS, 那么 这个Application 的 gids 中将 包含这个 gids。记住权限(GIDS)是关于允许或限制应用程序(而不是用户)访问设备资源。

        Android 使用沙箱的概念来实现应用程序之间的分离和权限,以允许或拒绝一个应用程序访问设备的资源,比如说文件和目录、网络、传感器和 API。为此,Android 使用一些 Linux 实用工具(比如说进程级别的安全性、与应用程序相关的用户和组 ID,以及权限),来实现应用程序被允许执行的操作。

图 1. 两个 Android 应用程序,各自在其自己的基本沙箱或进程上

图:两个 Android 应用程序,各自在其自己的基本沙箱或进程上(具有不同的用户 ID)


        Android 应用程序运行在它们自己的 Linux 进程上,并被分配一个惟一的用户 ID。默认情况下,运行在基本沙箱进程中的应用程序没有被分配权限,因而此类应用程序访问系统或资源受到限制,Android 应用程序只能通过应用程序的 manifest 文件请求权限。

        不同的应用程序可以运行在相同的进程中。对于此方法,首先必须使用相同的私钥签署这些应用程序,然后必须使用 manifest 文件给它们分配相同的 Linux 用户 ID,这通过用相同的值/名定义 manifest 属性 android:sharedUserId 来做到,从而共享对其数据和代码的访问,如图2所示

图 2. 两个 Android 应用程序,运行在同一进程上

图:两个 Android 应用程序,运行在同一进程上(具有相同的数字签名和相同的 Linux 用户 ID)



总结

在 Android 上,一个应用程序只有一个UID,当然多个应用程序也可以共享一个UID。

对 于普通应用程序来说, gid 等于 uid 。由于每个应用程序的 uid 和 gid 都不相同, 因此不管是 native 层还是 java 层都能够达到保护私有数据的作用 。

一个GIDS相当于一个权限的集合,一个UID可以关联GIDS,表明该UID拥有多种权限

一个进程就是host应用程序的沙箱,里面一般有一个UID和多个GIDS,每个进程只能访问UID的权限范围内的文件和GIDs所允许访问的接口,构成了Android最基本的安全基础。


获取APP的UID 

 

 
 
PackageManager pm = context.getPackageManager();
List<PackageInfo> packinfos = pm
        .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES
                | PackageManager.GET_PERMISSIONS);
for (PackageInfo info : packinfos) {

    int uid = info.applicationInfo.uid;
    Log.i("test", "uid = " + uid);

    String packageName = pm.getNameForUid(uid);
    Log.i("test", "package name = " + packageName);

    String name = pm.getApplicationLabel(info.applicationInfo).toString();
    Log.i("test", "name = " + name);

}
 





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值