Android APP运行在受限沙箱内,为了完成与其它APP或系统的交互,需要申请额外权限。权限在APP安装时被授权给应用,且在APP生命周期内保持不变。权限可以被映射为Linux补充GID,用于内核在授权访问系统资源时进行权限检查。
Binder文中讲过,APP与其它APP、系统服务间通信使用Binder的IPC机制。服务端可以通过getCallingUid()获取APP的UID,并通过查找包管理器数据库中保存的权限,来执行权限检查。
与组件关联的权限,在APP的Manifest文件中声明,并由系统自动执行,但是APP也可以选择额外的动态检查。除了使用内置权限,APP还可以自定义权限,并将它们与组件相关联,从而用于组件的访问控制。
一、APP权限申请与管理
APP在AndroidManifest.xml文件中,使用
--snip--
1)权限分类
2)权限保护级别
每个APP权限,是通过一个名叫包管理器的系统服务进行管理的。包管理器维护着一个已安装APP的核心数据库,其中包括安装路径、版本、签名证书和每个包的权限,另外还包含了一个所有已定义权限列表。这个核心数据库以XML文件的形式保存于/data/system/packages.xml。
以网易云音乐为例,看一下packages.xml中的应用程序条目:
每个APP包都用
使用android.content.pm.PackageManager类的getPackageInfo()方法,即可获取
留坑