Android 14 权限等级剖析

Android 14 权限等级剖析

Android 14 引入了新的权限等级,为应用程序访问敏感信息和功能提供了更细粒度的控制。了解这些新的权限等级及其应用场景对于开发人员至关重要。

1. 概述

Android 一直以来都使用权限机制来控制应用程序对系统资源和用户数据的访问。随着 Android 版本的更新,权限机制也在不断完善,以提高安全性并降低隐私风险。

Android 14 引入了新的权限等级,进一步细化了对应用程序权限的控制。新的权限等级可以更好地划分不同权限的风险级别,并为开发人员提供更灵活的权限管理方案。

2. 权限等级概述

Android 14 中的权限等级主要分为以下几类:

  • 普通权限(normal):风险最低的权限等级,应用程序在安装时自动获得。这类权限通常不会对用户隐私或安全造成重大风险,例如访问网络、读取手机状态等。
  • 危险权限(dangerous):可能对用户隐私或安全造成风险的权限等级,需要用户明确批准才能授予。这类权限包括读取联系人、访问位置、使用相机等。
  • 签名权限(signature):仅授予与声明权限具有相同签名的应用程序。这类权限通常用于应用程序间通信或共享数据,例如读取已知来源的存储文件。
  • 签名或系统权限(signatureOrSystem):仅授予签名应用程序或系统映像中的包。这类权限用于需要更高级别安全性的操作,例如管理设备存储。
  • 特权权限(privileged):风险最高的权限等级,仅授予特权应用程序。这类权限可以访问最敏感的系统功能,例如修改系统设置、管理用户账户。
  • 开发权限(development):可选地授予开发应用程序,用于调试和测试目的,例如调试网络连接、读取调试日志。
  • 应用操作权限(appop):与应用操作相关的特殊权限,一些操作不需要在 Manifest 中申请权限,例如显示通知、保持弱锁、激活 VPN。
  • 低于 Android 6.0 的权限(pre23):授予低于 Android 6.0 的应用程序,由于兼容性原因而保留,例如读取外部存储。
  • 安装程序权限(installer):授予安装程序应用程序,用于安装和卸载应用程序。
  • 验证程序权限(verifier):授予验证程序应用程序,用于验证应用程序签名。
  • 预装权限(preinstalled):授予预装在系统映像上的任何应用程序,用于预装应用程序所需的功能。
  • 设置向导权限(setup):授予设置向导应用程序,用于引导用户完成初始设备设置。
  • 即时应用程序权限(instant):授予即时应用程序,用于轻量级、模块化的应用程序体验。
  • 运行时权限(runtime):授予目标运行时权限的应用程序(Android 6.0 及以上),用户可以在运行时授予或拒绝权限,例如访问麦克风、录制视频。
  • OEM 权限(oem):如果其保护级别为签名,则请求应用程序驻留在 OEM 分区,并且 OEM 已将该应用程序列入白名单,以接收此权限。通常由 OEM 用于其专有功能。
  • 供应商特权权限(vendorPrivileged):授予供应商分区中的特权应用程序,用于供应商特定的硬件或功能。
  • 文本分类器权限(textClassifier):授予系统默认文本分类器,用于过滤垃圾邮件和其他有害内容。
  • 健康权限(wellbeing):授予 OEM 定义的健康应用程序,用于访问健康相关数据。
  • 文档管理器权限(documenter):授予文档管理器,用于管理文档文件。
  • 设备配置器权限(configurator):授予设备配置器,用于配置设备设置。
  • 事件报告批准者权限(incidentReportApprover):批准共享事件报告的应用程序,用于收集和分析设备使用数据。
  • 系统应用程序预测器权限(appPredictor):授予系统应用程序预测器,用于预测用户行为并提供个性化体验。

3. 每个权限等级的详细说明

普通权限(normal)

  • 应用程序在安装时自动获得权限。
  • 对其他应用程序、系统或用户的风险最小。
  • 示例:访问网络、读取手机状态。

危险权限(dangerous)

  • 需要用户明确批准。
  • 可能访问敏感数据或对设备进行控制。
  • 示例:读取联系人、访问位置、使用相机。

签名权限(signature)

  • 仅授予与声明权限具有相同签名的应用程序。
  • 通常用于应用程序间通信或共享数据。
  • 示例:读取已知来源的存储文件。

签名或系统权限(signatureOrSystem)

  • 仅授予签名应用程序或系统映像中的包。
  • 用于需要更高级别安全性的操作。
  • 示例:管理设备存储。

特权权限(privileged)

  • 仅授予特权应用程序。
  • 访问最敏感的系统功能。
  • 示例:修改系统设置、管理用户账户。

开发权限(development)

  • 可选地授予开发应用程序。
  • 用于调试和测试目的。
  • 示例:调试网络连接、读取调试日志。

应用操作权限(appop)

  • 与应用操作相关的特殊权限。
  • 一些操作不需要在 Manifest 中申请权限。
  • 示例:显示通知、保持弱锁、激活 VPN。

低于 Android 6.0 的权限(pre23)

  • 授予低于 Android 6.0 的应用程序。
  • 由于兼容性原因而保留。
  • 示例:读取外部存储。

安装程序权限(installer)

  • 授予安装程序应用程序。
  • 用于安装和卸载应用程序。

验证程序权限(verifier)

  • 授予验证程序应用程序。
  • 用于验证应用程序签名。

预装权限(preinstalled)

  • 授予预装在系统映像上的任何应用程序。
  • 用于预装应用程序所需的功能。

设置向导权限(setup)

  • 授予设置向导应用程序。
  • 用于引导用户完成初始设备设置。

即时应用程序权限(instant)

  • 授予即时应用程序。
  • 用于轻量级、模块化的应用程序体验。

运行时权限(runtime)

  • 授予目标运行时权限的应用程序(Android 6.0 及以上)。
  • 用户可以在运行时授予或拒绝权限。
  • 示例:访问麦克风、录制视频。

OEM 权限(oem)

  • 如果其保护级别为签名,则请求应用程序驻留在 OEM 分区,并且 OEM 已将该应用程序列入白名单,以接收此权限。
  • 通常由 OEM 用于其专有功能。

供应商特权权限(vendorPrivileged)

  • 授予供应商分区中的特权应用程序。
  • 用于供应商特定的硬件或功能。

文本分类器权限(textClassifier)

  • 授予系统默认文本分类器。
  • 用于过滤垃圾邮件和其他有害内容。

健康权限(wellbeing)

  • 授予 OEM 定义的健康应用程序。
  • 用于访问健康相关数据。

文档管理器权限(documenter)

  • 授予文档管理器。
  • 用于管理文档文件。

设备配置器权限(configurator)

  • 授予设备配置器。
  • 用于配置设备设置。

事件报告批准者权限(incidentReportApprover)

  • 批准共享事件报告的应用程序。
  • 用于收集和分析设备使用数据。

系统应用程序预测器权限(appPredictor)

  • 授予系统应用程序预测器。
  • 用于预测用户行为并提供个性化体验。

4. 如何在应用程序中使用权限等级

在应用程序中使用权限等级,需要遵循以下步骤:

  1. 在 Manifest 文件中声明所需的权限。

    在 Manifest 文件的 <uses-permission> 标签中声明您应用程序所需的权限。例如,要请求访问位置权限,请添加以下行:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  2. 对于危险权限,需要在运行时请求用户的批准。

    对于需要用户明确批准的危险权限,您需要在运行时请求用户的同意。可以使用 ActivityCompat.requestPermissions() 方法来实现。例如:

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    } else {
        // 已经拥有权限,可以执行相关操作
    }
    
  3. 使用 ContextCompat.checkSelfPermission() 检查应用程序是否具有权限。

    可以使用 ContextCompat.checkSelfPermission() 方法检查应用程序是否具有特定的权限。例如:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    // 已经拥有权限,可以执行相关操作
} else {
    // 没有权限,需要请求或提示用户
}
  1. 使用 ActivityCompat.requestPermissions() 请求用户授予权限。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
} else {
    // 已经拥有权限,可以执行相关操作
}
  1. onRequestPermissionsResult() 方法中处理用户的权限授予结果。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户授予了权限,可以执行相关操作
        } else {
            // 用户拒绝了权限,可以提示用户或采取其他措施
        }
    }
}

5. 权限等级的最佳实践

  • 仅请求必要的权限。 您的应用程序应仅请求其正常运行所需的最少权限。避免请求不必要的权限,以免降低用户信任并增加隐私风险。
  • 告知用户为什么要请求权限。 当您请求权限时,请向用户解释为什么需要该权限以及您的应用程序将如何使用它。这有助于建立用户信任并提高透明度。
  • 尊重用户的隐私。 谨慎使用您获得的权限,并确保仅将用户数据用于其预期的目的。遵循数据隐私法规并保护用户数据安全。
  • 使用运行时权限功能。 对于危险权限,请使用运行时权限功能,以便用户可以在运行时授予或拒绝权限。这使他们可以更好地控制其隐私并根据需要调整权限设置。
  • 定期审查应用程序的权限使用情况。 定期审查您的应用程序使用的权限,以确保您没有请求或使用不必要的权限。

6. 总结

Android 14 引入的新权限等级提供了更细粒度的控制,可提高安全性并降低隐私风险。开发人员应了解新的权限等级并以负责任的方式使用它们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/734520.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue81-独享路由守卫

一、 独享路由守卫的定义 当只有某个特定的路由需要做校验的时候&#xff0c;可以在改路由组件规则的地方单独配置独属于改组件的路由守卫。 二、示例 1、需求 系统只在进入新闻路由页面的时候做校验。 2、代码实现 注意&#xff1a; 独享路由守卫&#xff0c;只有前置路由守…

Unity Apple Vision Pro 开发(三):visionOS 应用形态

文章目录 &#x1f4d5;教程说明&#x1f4d5;常用名词解释&#x1f4d5;visionOS 空间类型⭐Shared Space 共享空间⭐Full Space/Immersive Space 独占空间 &#x1f4d5;visionOS 渲染框架&#x1f4d5;Unity 开发 visionOS 应用的不同模式⭐**窗口模式**⭐VR 模式⭐MR 模式 …

基于matlab的高斯滤波与图像去噪

1 高斯滤波原理 1.1 原理 高斯滤波是一种线性平滑滤波技术&#xff0c;主要用于消除图像中的高斯噪声。它的工作原理可以理解为对整幅图像进行加权平均的过程&#xff0c;即每个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。 高斯滤波实质上是一种信号的滤…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-25使用块的网络VGG

25使用块的网络VGG import torch from torch import nn import liliPytorch as lp import matplotlib.pyplot as plt# 定义VGG块 # num_convs: 卷积层的数量 # in_channels: 输入通道的数量 # out_channels: 输出通道的数量 def vgg_block(num_convs, in_channels, out_channel…

VS Code Arduino编程

①Arduino Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件&#xff08;各种型号的Arduino板&#xff09;和软件&#xff08;Arduino IDE)。 ②VS Code&#xff08;全称 Visual Studio Code&#xff09; 是由微软开发的一款开源、轻量级的跨平台现代代码编辑器…

昇思25天学习打卡营第4天|数据变换Transforms

学习内容复盘 1.1 数据变换 什么是数据变换、为何要数据变换 通常情况下&#xff0c;直接加载的原始数据并不能直接送入神经网络进行训练&#xff0c;此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数…

Jenkins定时构建自动化(二):Jenkins的定时构建

目录 ​编辑 一、 jenkins定时构建语法&#xff1a; 1. 语法规则&#xff1a; 2. 常见用法举例 3. 再次举例 接上一篇&#xff1a;Jenkins定时构建自动化(一)&#xff1a;Jenkins下载安装配置&#xff1a;Jenkins定时构建自动化(一)&#xff1a;Jenkins下载安装配置-CSDN博客 …

32 - 判断三角形(高频 SQL 50 题基础版)

32 - 判断三角形 select *,if(xy>z and xz>y and zy > x,Yes,No) triangle fromTriangle;

[GXYCTF2019]禁止套娃1

buu打开题目进去看到&#xff0c;只有一行字 只有一行字的话&#xff0c;那么没有可用的信息&#xff0c;那么可以去查看一下源码或者是看一下network里是不是有一些提示&#xff0c;发现都没有&#xff0c;那就利用dirsearch去扫描一下目录 python dirsearch.py -u http://f87…

华为海思CPU解读

安全可靠CPU测评结果&#xff08;华为海思篇&#xff09; 中国信息安全测评中心于2024年5月20日发布安全可靠测评结果公告&#xff08;2024年第1号&#xff09;&#xff0c;公布依据《安全可靠测评工作指南&#xff08;试行&#xff09;》的测评结果&#xff0c;自发布起有效期…

昇思25天学习打卡营第4天 | 数据变换

内容介绍&#xff1a;通常情况下&#xff0c;直接加载的原始数据并不能直接送入神经网络进行训练&#xff0c;此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数据处理Pipeline来实现数据预处理。所有的T…

免杀笔记 ---> C语言

这次的更新可能有点慢&#xff0c;因为这段时间也比较忙&#xff0c;加上C语言还得和汇编结合&#xff0c;导致小编一个知识点总是得反复揣摩&#xff08;太菜了&#xff09;&#xff0c;所以免杀的更新篇幅长度可能会达到两个月和三个月&#xff0c;但是小编能保证&#xff0c…

RabbitMQ高频面试题整理

文章目录 1、RabbitMQ如何保证消息不丢失1&#xff09;confirm 消息确认机制 (生产者)2&#xff09;消息持久化机制 (RabbitMQ 服务)3&#xff09;ACK 事务机制(消费者) 2、RabbitMQ 中有哪几种交换机类型?1&#xff09; Direct Exchange2&#xff09;Fanout Exchange3&#x…

Netty 入门实例

文章目录 1. 概述2. 代码实例2.1 服务端2.2 客户端2.3 运行截图 3. 整体结构4. 重要组件4.1 EventLoopGroup、EventLoop4.2 Handler & Pipeline4.3 ByteBuf 参考文献 1. 概述 Netty 是一款用于高效开发网络应用的 NIO 网络框架&#xff0c;它大大简化了网络应用的开发过程…

【物联网】室内定位技术及定位方式简介

目录 一、概述 二、常用的室内定位技术 2.1 WIFI技术 2.2 UWB超宽带 2.3 蓝牙BLE 2.4 ZigBee技术 2.5 RFID技术 三、常用的室内定位方式 3.1 信号到达时间 3.2 信号到达时间差 3.3 信号到达角 3.4 接收信号强度 一、概述 GPS是目前应用最广泛的定位技术&#xff0…

流行的app抓包工具详解和案例--开发人员首选

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

游戏大厂“脱钩”安卓商店: 独立渠道TapTap们能否渔利

一纸公告将游戏厂商与渠道的博弈再度摆上了台面。 近日&#xff0c;腾讯控股旗下手游《地下城与勇士&#xff1a;起源》&#xff08;下称“DNF手游”&#xff09;运营团队发布公告称&#xff0c;自6月20日起&#xff0c;DNF手游将不再上架部分安卓平台的头部应用商店。 下架的…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

WebStorm 环境配置带@符号的相对路径穿透

在使用WebStorm 环境开发web页面项目时有时想快速查看页面的引用代码&#xff0c;只能手工找到引入文件路径&#xff0c;这很不方便&#xff0c;只需通过配置webStorm单击打开。 1 使用符号相对路径&#xff0c;在默认情况下没有配置环境是无法打开&#xff0c;如下图&#xf…

docker内apt-get update Waiting for headers 0%

问题描述 docker运行debian等容器时&#xff0c;执行apt update或者apt-get update&#xff0c;可能会出现以下错误&#xff1a;root754a91d3630a:/# apt-get update 0% [Waiting for headers] [Waiting for headers] [Connected to developer.download.nvidia.com (152.199.3…