目录

1.普通权限(normal)

2.运行时权限(dangerous)

3.签名权限(signature)

4.特殊权限(privileged)

查看android权限的等级

判断应用是否拥有对应权限


Android 将权限分为不同的类型,包括安装时权限、运行时权限和特殊权限。每种权限类型都指明了当系统授予应用该权限后,应用可以访问的受限数据范围以及应用可以执行的受限操作范围。

1.普通权限(normal)

此类权限允许访问超出应用沙盒的数据和执行超出应用沙盒的操作。但这些数据和操作对用户隐私及对其他应用的操作带来的风险非常小。

2.运行时权限(dangerous)

运行时权限也称为危险权限,此类权限授予应用对受限数据的额外访问权限,并允许应用执行对系统和其他应用具有更严重影响的受限操作。因此需要先在应用中请求运行时权限,然后才能访问受限数据或执行受限操作。当应用请求运行时权限时,系统会显示运行时权限弹窗提示。

3.签名权限(signature)

当应用声明了其他应用已定义的签名权限时,如果两个应用使用同一证书进行签名,系统会在安装时向前者授予该权限。否则,系统无法向前者授予该权限。(注意:有些签名权限不适合第三方应用使用。)

该权限只需要在manifest中声明使用,同时应用和这类权限定义者拥有一样的签名系统就会默认授予应用这类权限;系统授予这类权限后应用无需像运行时权限一样动态申请。

4.特殊权限(privileged)

特殊权限与特定的应用操作相对应。只有平台和原始设备制造商 (OEM) 可以定义特殊权限。此外,如果平台和 OEM 想要防止有人执行功能特别强大的操作(例如通过其他应用绘图),通常会定义特殊权限。系统设置中的特殊应用访问权限页面包含一组用户可切换的操作。其中的许多操作都以特殊权限的形式实现。每项特殊权限都有自己的实现细节。系统会为特殊权限分配“appop”保护级别。

该权限只需要在manifest中声明使用,同时拥有系统签名且不是预置到 **/priv_app/ (如:system/priv-app)目录下,系统就会默认授予;如果应用是预置到 **/priv_app/ 目录下则需要在配置文件privapp-permissions-platform.xml中配置权限信息,否则系统不会授予权限,并且也会无法通过cts测试

查看android权限的等级

在系统源码中找到文件 /frameworks/base/core/res/AndroidManifest.xml ,这个文件中定义了系统权限等信息。

如 WRITE_MEDIA_STORAGE权限 具体如下:

权限名称:android.permission.WRITE_MEDIA_STORAGE

权限等级为:signature|privileged (该权限既是signature也是privileged权限)

<!-- @SystemApi @TestApi Allows an application to write to internal media storage@hide  -->
<permission android:name="android.permission.WRITE_MEDIA_STORAGE"android:protectionLevel="signature|privileged" />

如 READ_CONTACTS权限 具体如下:

权限名称:android.permission.READ_CONTACTS

权限等级为:dangerous (该权限为运行时权限,也就是需要应用去动态申请)

<!-- Allows an application to read the user's contacts data.<p>Protection level: dangerous
-->
<permission android:name="android.permission.READ_CONTACTS"android:permissionGroup="android.permission-group.UNDEFINED"android:label="@string/permlab_readContacts"android:description="@string/permdesc_readContacts"android:protectionLevel="dangerous" />

同时,也可以如下adb命令来获取权限等级

adb shell dumpsys package permision |grep -i prot

判断应用是否拥有对应权限

使用如下命令查看 adb shell dumpsys package com.miui.home

下面的install permissions记录的是该应用拥有的普通权限以及签名权限的信息,如果应用申请的权限被系统授予了,在对应权限后面就会显示 granted=true

相反,如果没有搜到相关权限的字符串,说明该应用没有声明使用这个权限

C:\Users\Administrator>adb shell dumpsys package com.miui.home
Activity Resolver Table:
... ...
... ...
Packages:Package [com.miui.home] (41dff44):userId=10089pkg=Package{724982d com.miui.home}
install permissions:android.permission.REAL_GET_TASKS: granted=truecom.android.settings.permission.CLOUD_SETTINGS_PROVIDER: granted=trueandroid.permission.WRITE_SETTINGS: granted=truemiui.autoinstall.config.permission.AUTOINSTALL: granted=trueandroid.permission.SET_PROCESS_LIMIT: granted=trueandroid.permission.MODIFY_AUDIO_SETTINGS: granted=truemiui.os.permisson.INIT_MIUI_ENVIRONMENT: granted=trueandroid.miui.permission.SHELL: granted=trueandroid.permission.SYSTEM_ALERT_WINDOW: granted=true

为什么应用在manifest中申请了signature权限或者privileged权限,但是还报错没有权限错误

1.对于signature权限,先判断应用是否拥有平台签名。可以通过dump命令来判断,执行 adb shell dumpsys package 包名 |findstr -i signatures 和adb shell dumpsys package android | findstr signatures,对比两者的签名是否一致。

2.对于privileged权限,先判断应用的预置路径。是否预置到.../priv-app/路径下(获取通过包信息查看应用的flag是否带有privileged),如果是就把/system/etc/permissions/的配置文件pull出来,配置文件为:privapp-permissions-platform.xml,查看自己的应用是否在这两个文件里面配置了,如果没有配置则需要在代码中进行配置。(可以将修改的文件push到/system/etc/permissions/目录,然后重启手机验证是否生效)

Android权限管理--权限类型相关推荐

  1. thinkphp mysql权限管理_TP thinkphp 权限管理 权限认证 功能

    目前,在tp框架中做权限管理 分rbac(老)与auth(推荐)认证方式: 老的tp版本中封装的是rbac认证: 新一点的都开始使用auth方式管理了.推荐使用此方式: 实现步骤一:引入类库Auth. ...

  2. Android动态权限管理模型(4.3-6.0)

    Google从4.3开始就试图引入AppOpsManager动态权限管理模型,但是,由于感觉技术不太成熟,在Release版本中,这个功能都是被隐藏掉的,所以官方Rom一直没有动态权限管理机制.直到A ...

  3. android 360卫士跳转权限页面如何实现,奇酷360 手机中怎么跳转安全中心中指定包名App的权限管理页面...

    我是一名程序员,在 MIUI 中,涉及浮窗的 APP 需要在对应的软件设置页面打开 浮窗权限 才能正常使用 APP , MIUI 的权限设置入口就在应用管理页面,可以通过如下的代码跳转至该入口: pr ...

  4. linux组权限管理,Linux组管理和权限管理

    ⒈Linux组基本介绍 1)在Linux中的每个用户必须属于一个组,不能独立于组外. 2)Linux中每个文件都有所有者.所在组.其它组的概念 ①所有者 一般(默认)为文件的创建者,谁创建了该文件,就 ...

  5. Linux学习笔记—— 权限及权限管理

    权限及权限管理 权限管理: r: w: x: 三类用户: u:属主 g:属组 o:其他用户 chown:改变文件属主(只有管理员可以使用此命令) # chown USERNAME file,... - ...

  6. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

    权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可 ...

  7. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...

  8. 权限管理,pymysql模块

    权限管理 权限管理重点 MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL ...

  9. mysql的本地id可以随便设置马_MySQL中的账号与权限管理

    MySQL权限管理 权限系统的工作原理 MySQL权限系统通过下面两个阶段进行认证: (1)对连接的用户进行身份认证,合法的用户通过认证.不合法的用户拒绝连接. (2)对通过认证的合法用户赋予相应的权 ...

  10. 系统权限管理设计 (转)

    权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑 ...

最新文章

  1. 三大运营商3G无线上网套餐资费对比
  2. INNODB的锁的类型
  3. 从源码开始编译一个带有WEB服务器功能的小型LINUX(下)
  4. 分布式ID自增算法 Snowflake
  5. DC/DC电源模块是什么?有何特点
  6. jacobi matlab程序,jacobi迭代法实验MATLAB程序数值分析
  7. MySQL--流程控制
  8. Linux中如何使用帮助
  9. 目标检测——对数据进行EDA分析的学习笔记
  10. 【python实战】使用 pygame 写一个 flappy-bird 类小游戏 | 涉及思路+项目结构+代码详解 | 新手向
  11. 数据血缘关系图 工具_如何在论文中画出漂亮的插图?用它!丨城市数据派
  12. linux中静态库和动态库的区别,Linux下静态库和动态库的区别
  13. 自我介绍html模板王,个性简短自我介绍模板十篇
  14. Python基本数据类型大集合
  15. PLC无线通讯方案,支持西门子,三菱,欧姆龙,台达等各品牌PLC
  16. 腾讯在乳腺癌影像AI诊断方向的探索
  17. 莫比乌斯带matlab代码,莫比乌斯带
  18. 使用PostgreSQL以正确的顺序获取名称
  19. Windows下谨慎使用动态磁盘
  20. python 强类型 弱类型_Python到底是强类型语言还是弱类型语言

热门文章

  1. SSM框架面试题整理
  2. C语言科学计数法字符串转化为实数
  3. High-Quality Genome-Scale Models From Error-Prone, Long-Read Assemblies高质量的基因组尺度模型来自易出错的,长时间读取的程序集
  4. matlab imnoise 用法,使用matlab的imnoise添加噪声
  5. linux中vim如何替换字符串,vim中替换字符串的方法有哪些
  6. 冷高轮时间王思聪吃热狗windows电脑壁纸下载
  7. 三星android rom开发者,三星s10刷机包安卓10(极光AuroraROM 13.0)
  8. HDFView安装及使用教程
  9. 电脑主机前置耳机插孔没声音——解决办法
  10. python超市管理系统实训报告_java超市管理系统实训报告