来自阿里面试官刁钻连问:Android UID的分配、查看及相关知识

面试难度还行,但是如果不好好复习,有几个点还真是答不上来。

uid机制

uid:Android系统中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这些应用的签名要相同。

  • uid pid gid gids 的含义和作用
  • uid 的分配
  • 查看应用UID 的几种方式
  • 通过uid获取包名,通过包名获取uid

下面所有涉及的示例代码都是基于 Android 8.1的。

1. uid pid gid gids 的含义和作用

  • uid:android中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这些应用的签名要相同。
  • pid:进程ID,可变的
  • gid:对应于linux中用户组的概念,android 中 gid 等于uid
  • gids:个GIDS相当于一个权限的集合,一个UID可以关联GIDS,表明该UID拥有多种权限

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

2. UID 的分配:

app 的 UID 和 GID 是安装的时候就确认的, 关键的代码如下:
PMS中:

private PackageParser.Package scanPackageDirtyLI(PackageParser.Package pkg,
                                                 final int policyFlags, final int scanFlags, long currentTime, @Nullable UserHandle user)
        throws PackageManagerException {
    if (DEBUG_PACKAGE_SCANNING) {
        if ((policyFlags & PackageParser.PARSE_CHATTY) != 0)
            Log.d(TAG, "Scanning package " + pkg.packageName);
    }

    applyPolicy(pkg, policyFlags);
    .....................................

        if (pkgSetting == null) {
            .......................
            // SIDE EFFECTS; updates system state; move elsewhere
            if (origPackage !&
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值