试阐明android中的权限机制,Android权限机制验证性实验

在PackageInstaller源码分析(二) 中提到,Android在安装App的时候,会更新/data/system/packages.xml,/data/system/packages.list和/data/system/users/0/package-restrictions.xml这三个文件。并且,在packages.xml中记录有app申请的全新信息,在packages.list文件中记录了App的Gid信息。我们知道,Android Permission机制是基于Linux权限机制的,也就说App申请的对应的permission是通过向App添加对应的gid完成,下面我们就通过实验证实这一点。

一、 实验源码

button.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

PackageManager pm=getPackageManager();

try {

int[] gids=pm.getPackageGids("org.ncnipc.androidgroup.venscor.poc");

for(int i:gids){

tv.append(i+"\n");

}

} catch (NameNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

二、 分析

运行实验程序,查看结果,发现程序的打印的gid是:3003,1028,1015,这和packages.list文件中记录的gid是对应的。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

接着,我们查看App申请了哪些权限,对于App的manifest文件和packages.xml文件,这也是对应的。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

最后,我们查看一下这些权限是不是全部对应到gid为3003,1028,1015的这三个组。

在/system/core/include/private/android_filesystem_config.h文件中,对用户/用户组做了宏定义。Android权限机制正是基于用户、用户组的。

0818b9ca8b590ca3270a3433284dd417.png

在/etc/permission.xml查看这三个gid对应的权限。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

这里也说明了android.permission.WRITE_EXTERNAL_STORAGE和android.permission.ACCESS_ALL_EXTERNAL_STORAGE包含了android.permission.READ_EXTERNAL_STORAGE权限,即只要申请了前两个中的任意一个,都将自动拥有后一个权限。这也是为什么在package.xml中多出一个android.permission.READ_EXTERNAL_STORAGE权限的原因。

0818b9ca8b590ca3270a3433284dd417.png

至此,已经说明了上面10个权限中的两个已经和底层的gid挂钩,即因为App的gid中已经包含上面三个gid,所有权限已经获得。那么还剩下8个权限咋回事?

上面申请的权限中,第2,6,7,8,9属于Normal级的权限,直接申请不需要通过用户同意就能获得,所以不考虑,最后一个是5.1之后deprecated的权限,也不考虑,剩下第4,5和10个权限。第4,5个属于location组的权限,第10个属于phone组的权限。这里有个猜想不知道对不对,就是Android权限应该有两种,一种是用了系统资源,即Linux资源;另一种没有使用系统资源。对于前一种,在App安装授予权限的过程中,需要把platform.xml中定义的gid添加到App中,以后对于Linux底层的系统资源能够调用。对于后者,在platform.xml中没有定义gid和permission的对应关系,由于其也不调用系统资源,所以直接在framework层就可以检测。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值