| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android权限管理--权限类型 -> 正文阅读 |
|
[移动开发]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权限)
如 READ_CONTACTS权限 具体如下: 权限名称:android.permission.READ_CONTACTS 权限等级为:dangerous (该权限为运行时权限,也就是需要应用去动态申请)
同时,也可以如下adb命令来获取权限等级 adb shell dumpsys package permision |grep -i prot 判断应用是否拥有对应权限使用如下命令查看 adb shell dumpsys package com.miui.home 下面的install permissions记录的是该应用拥有的普通权限以及签名权限的信息,如果应用申请的权限被系统授予了,在对应权限后面就会显示 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/目录,然后重启手机验证是否生效) |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 19:10:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |