Android 11 行为变更 :所有应用

2023-05-16

Android 11 平台包含一些行为变更,这些变更可能会影响您的应用。以下行为变更将影响在 Android 11 上运行的所有应用,无论其采用哪种 targetSdkVersion 都不例外。您应该测试您的应用,然后根据需要进行修改,以适当地支持这些变更(如果适用)。

此外,请务必查看仅影响以 Android 11 为目标平台的应用的行为变更列表。

隐私权

Android 11 引入了大量变更和限制,目的是加强用户隐私保护。如需了解详情,请参阅隐私权页面。

安全

因 OTA 更新而重启设备后在未提供用户凭据的情况下执行文件级加密

设备接收 OTA 更新并重启后,放在受凭据保护的存储空间中的凭据加密密钥可立即用于执行文件级加密 (FBE) 操作。因此,设备重启后,在用户输入其 PIN 码、解锁图案或密码以解锁设备之前,您的应用可以执行与文件级加密相关的操作。

注意:此变更仅影响因 OTA 更新而发生的设备重启。如果您的应用应始终“在重新启动后恢复”,请继续支持直接启动。

SSL 套接字默认情况下使用 Conscrypt SSL 引擎

Android 的默认 SSLSocket 实现基于 Conscrypt。从 Android 11 开始,该实现是在 Conscrypt 的 SSLEngine 之上内部构建的。

Scudo Hardened Allocator

Android 11 在内部使用 Scudo Hardened Allocator 为堆分配提供服务。Scudo 能够检测并减轻某些类型的内存安全违规行为。如果您在原生代码崩溃报告中发现与 Scudo 相关的崩溃(例如 Scudo ERROR:),请参阅 Scudo 问题排查文档。

应用使用情况统计信息

为了更好地保护用户,Android 11 将每个用户的应用使用情况统计信息存储在凭据加密存储空间中。因此,系统和任何应用都无法访问该数据,除非 isUserUnlocked() 返回 true,这发生在出现以下某种情况之后:

  • 用户在系统启动后首次解锁其设备。
  • 用户在设备上切换到自己的帐号。

如果您的应用已绑定到 UsageStatsManager 的实例,请检查您是否是在用户解锁其设备后在此对象上调用方法。如果并非如此,该 API 现在会返回 null 或空值。

相机

支持并发使用多个摄像头

Android 11 添加了 API 以查询对同时使用多个摄像头(包括前置摄像头和后置摄像头)的支持。

如需在运行应用的设备上检查支持情况,请使用以下方法:

  • getConcurrentCameraIds() 可返回摄像头 ID 组合 Set,这些组合可与有保证的数据流组合并发进行流式传输(如果它们是由同一应用进程配置的)。
  • isConcurrentSessionConfigurationSupported() 可查询摄像头设备是否可以并发支持相应的会话配置。

网络连接

Open Mobile API 变更

从 Android 11 开始,Open Mobile API (OMAPI) 有了额外的功能:

  • 解析运营商权限的规则。

  • 使用以下一项或多项自定义嵌入式安全元件 (eSE) 访问权限或配置 eSE:

    • 系统特许权限
    • 可配置的访问规则应用主数据 (ARA-M) 应用标识符 (AID)
    • 用于重置 OMAPI 读取器的系统 API
  • 为读取器提供清晰的指示符,以便应用过滤设备功能。

性能和调试

JobScheduler API 调用限制调试

Android 11 为应用提供调试支持,以便确定有可能超过特定速率限制的 JobScheduler API 调用。开发者可以利用此服务发现潜在的性能问题。对于 debuggable 清单属性设置为 true 的应用,超出速率限制的 JobSchedulerAPI 调用将返回 RESULT_FAILURE。如此设置限制,正当合理的用例应该就不会受到影响。

文件描述符排错程序 (fdsan)

Android 10 引入了 fdsan(文件描述符排错程序)。fdsan 检测错误处理文件描述符所有权的错误,例如 use-after-close 和 double-close。在 Android 11 中,fdsan 的默认模式发生了变化。现在,fdsan 会在检测到错误时中止,而以前的行为则是记录警告并继续。如果您在应用中发现由于 fdsan 而导致的崩溃,请参阅 fdsan documentation

无障碍

屏幕阅读器要求定义基于点击的无障碍操作

在以前的 Android 版本中,框架会向未正确处理基于点击的无障碍操作的微件分派触摸事件。通常,这些视图会直接处理触摸事件,而不是注册点击监听器。

为了在正确定义无障碍操作的应用中创建更一致的行为,Android 11 绝不会分派触摸事件。相反,系统会完全依赖于基于点击的无障碍操作:ACTION_CLICK 和 ACTION_LONG_CLICK。此更改会影响屏幕阅读器的行为。

系统会处理使用 OnClickListener 和 OnLongClickListener 接口的微件。但是,如果您的应用使用依赖于 OnTouchListener 接口的自定义程度更高的微件,您需要为基于点击的无障碍操作定义自定义处理程序。为此,请为每个操作调用 replaceAccessibilityAction() 方法,如以下代码段所示:

// Assumes that the widget is designed to select text when tapped and select
// all text when long-tapped. In its strings.xml file, this app has set
// "select" to "Select" and "select_all" to "Select all", respectively.
ViewCompat.replaceAccessibilityAction(WIDGET, ACTION_CLICK,
        context.getString(R.string.select),
        (view, commandArguments) -> {
            selectText();
        });

ViewCompat.replaceAccessibilityAction(WIDGET, ACTION_LONG_CLICK,
        context.getString(R.string.select_all),
        (view, commandArguments) -> {
            selectAllText();
        });

注意:即使在以前的 Android 版本上,您也必须在自定义微件中定义无障碍操作,以便其他无障碍服务(如“开关控制”)按预期运行。为了让您的应用更轻松地与系统的无障碍服务进行互动,我们强烈建议您从 Android 的界面类层次结构扩展系统微件。

在元数据文件中声明“无障碍”按钮使用情况

从 Android 11 开始,您的无障碍服务无法在运行时声明与系统的“无障碍”按钮的关联。如果您将 AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON 附加到 AccessibilityServiceInfo 对象的 flags 属性,框架就不会将“无障碍”按钮回调事件传递给您的服务。

应在您的无障碍服务元数据文件(通常为 res/raw/accessibilityservice.xml)中使用 flagRequestAccessibilityButton 标记声明您的无障碍服务与“无障碍”按钮的关联。

界面

SYSTEM_ALERT_WINDOW 变更

向应用授予 SYSTEM_ALERT_WINDOW 权限的方式发生了一些变更。这些变更可以让权限的授予更有目的性,从而达到保护用户的目的。

根据请求自动向某些应用授予 SYSTEM_ALERT_WINDOW 权限

系统会根据请求自动向某些类型的应用授予 SYSTEM_ALERT_WINDOW 权限。这些应用无需发送 ACTION_MANAGE_OVERLAY_PERMISSION 以获取 SYSTEM_ALERT_WINDOW 权限,它们只需直接请求 SYSTEM_ALERT_WINDOW 即可。

系统会自动向具有 ROLE_CALL_SCREENING 且请求 SYSTEM_ALERT_WINDOW 的所有应用授予该权限。如果应用失去 ROLE_CALL_SCREENING,就会失去该权限。

MANAGE_OVERLAY_PERMISSION intent 始终会将用户转至系统权限屏幕

从 Android 11 开始,ACTION_MANAGE_OVERLAY_PERMISSION intent 始终会将用户转至顶级设置屏幕,用户可在其中授予或撤消应用的 SYSTEM_ALERT_WINDOW 权限。intent 中的任何 package: 数据都会被忽略。

在更低版本的 Android 中,ACTION_MANAGE_OVERLAY_PERMISSION intent 可以指定一个软件包,它会将用户转至应用专用屏幕以管理权限。Android 11 不再支持此功能,而是必须由用户先选择要对其授予或撤消权限的应用。此变更可以让权限的授予更有目的性,从而达到保护用户的目的。

应用兼容性

非 SDK 接口限制

Android 11 包含更新后的受限制非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试)。在限制使用非 SDK 接口之前,我们会尽可能确保提供公开替代方案。

如果您的应用并非以 Android 11 为目标平台,那么其中一些变更可能不会立即对您产生影响。虽然您目前仍然可以使用灰名单中的一些非 SDK 接口(取决于您的应用的目标 API 级别),但如果您使用任何非 SDK 方法或字段,应用无法运行的风险始终会很高。

如果您不确定自己的应用是否使用了非 SDK 接口,则可以测试该应用,进行确认。如果您的应用依赖于非 SDK 接口,您应该开始计划迁移到 SDK 替代方案。然而,我们知道某些应用具有使用非 SDK 接口的有效用例。如果您无法为应用中的某项功能找到使用非 SDK 接口的替代方案,则应该请求新的公共 API。

如需详细了解此 Android 版本中的变更,请参阅 Android 11 中有关限制非 SDK 接口的更新。如需全面了解有关非 SDK 接口的详细信息,请参阅对非 SDK 接口的限制。

V1 版 Google 地图共享库已移除

Android 11 中已完全移除 V1 版 Google 地图共享库。此库之前已被弃用,并已停止在 Android 10 中的应用中运行。对于搭载 Android 9(API 级别 28)或更低版本的设备,之前依赖于此共享库的应用应改用适用于 Android 的 Google 地图 SDK。

重要提示:迁移到适用于 Android 的 Google 地图 SDK 后,请务必从应用的清单文件的 <uses-library> 元素中移除对 V1 版 Google 地图共享库的引用。应用无法再将 Google Play 过滤与 V1 版 Google 地图共享库和 <uses-library> 元素一起使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 11 行为变更 :所有应用 的相关文章

  • 我在哪里可以获得可靠的熵来源(真正的随机性字节[])?

    目前 我正在寻找一种方法来增加随机性的质量 in my Android应用程序 纸牌游戏 之前 估计对于我的情况 52 排列 至少需要 226 位熵 226 个随机位 我打算用这个byte 作为种子SecureRandom SecureRa
  • 使用 dpi 与 dp 缩放图像之间的差异

    我拥有所有由九个补丁位图组成的 dpi 可绘制目录 xxhdpi 和 xxxhdpi 是否必要 可绘制目录中的可绘制资源文件可检索所有缩放的位图 并且我使用可绘制资源文件 现在 我的问题是我还根据大小 小 正常等 创建了 缩放 布局目录 其
  • 使用 HttpClient 时,为什么服务器响应中省略了 Content-Length 标头?

    我正在使用这个问题的源代码如何异步执行httprequest并显示下载响应的进度 https stackoverflow com questions 9594318 how to asynchronous perform a httpreq
  • Android 中的 Sugar ORM:更新 SQLite 中保存的对象

    我是在 Android 上使用 SQLite 和 Sugar ORM 进行应用程序开发的新手 并尝试阅读 Sugar ORM 文档 但没有找到有关如何更新 SQLite 中保存的对象的任何信息 更改对象属性后还可以保存对象吗 就像是 Cus
  • Google 地图删除标记路线上下文菜单

    我使用 Android Studio 的 Google 地图模板启动了一个新项目 并在地图上添加了一个标记 LatLng location new LatLng lat lng Marker marker mMap addMarker ne
  • 具有自定义源集的 Android Gradle 风格 - gradle 文件应该是什么样子?

    我有一个旧的 eclipse 项目 我已经转移到 android studio 并设置为使用flavor 它似乎工作得很好 直到我开始尝试在我的风格之间使用不同的 java 文件 我的项目设置是这样的 ProjectRoot acitonb
  • Android 版 jTwitter 授权错误

    我在我的 Android 应用程序中使用 jTwitter 库 直到前天一切都运转良好 但今天遇到异常 服务提供商响应错误 301 请帮助我 这是堆栈跟踪 02 21 21 07 27 258 E AndroidRuntime 4013 F
  • 使用 Android Studio 进行调试永远停留在“等待调试器”状态

    UPDATE The supposed重复是一个关于陷入 等待调试器 执行时Run 而这个问题就陷入了 等待调试器 执行时Debug 产生问题的步骤不同 解决方案也不同 每当我尝试使用Android Studio的调试功能时 运行状态总是停
  • Android 纹理仅显示纯色

    我正在尝试在四边形上显示单个纹理 我有一个可用的 VertexObject 它可以很好地绘制一个正方形 或任何几何对象 现在我尝试扩展它来处理纹理 但纹理不起作用 我只看到一种纯色的四边形 坐标数据位于 arrayList 中 the ve
  • android中listview显示数据库中的数据

    我是安卓新手 我想知道如何在列表视图中显示数据库中的数据 它不会向数据库添加数据 我只是显示我们存储在数据库中的任何内容 请帮助我实现这一目标 提前致谢 使用这些课程可能会对您有所帮助 用于数据库创建 package com example
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • TextInputLayout 对于在 EditText 中以编程方式给出提示没有效果

    我有一个 EditText 它的父级是 TextInputLayout 我试图以编程方式为 EditText 提供提示 不在布局中 在这种情况下 文本输入提示动画不起作用 它像简单的 EditText 一样工作 有人可以建议如何处理它吗 下
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何构建自定义摄像机应用程序?

    我正在尝试开发一个自定义摄像机录像机 当我的设备在 Activity 的 beginRecording 中执行 start MediaRecorder 方法时 应用程序崩溃 我不知道出了什么问题 因为我遵循谷歌API指南 http deve
  • 如何关闭 EditText 中的建议?

    如何在 Android 中关闭 EditText 中的建议 android inputType textNoSuggestions 根据this http comments gmane org gmane comp handhelds an
  • 如何在Android中创建一个简洁的两栏输入表单?

    我想创建一个整洁的两列输入表单 如下所示 到目前为止我的 xml 布局代码
  • Android AdMob:addView 在返回活动之前不会显示广告

    我正在尝试在游戏顶部添加横幅广告 我的活动使用带有自定义 SurfaceView 的relativelayout 我希望广告与 SurfaceView 重叠 广告会加载并可点击 但不会绘制到屏幕上 当我离开活动并返回时 会绘制广告 例如 通
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做
  • 如何在布局编辑器中模拟沉浸式模式

    我想在布局编辑器中全屏查看我的布局 我正在使用 eclipse 插件 我已经通过选择隐藏了 ActionBar NoActionBar组合中的主题 但导航栏是一个不同的故事 AFAIK 它只能使用代码中的标志来隐藏 我需要在活动 xml 文

随机推荐

  • mips的内存管理-kseg0,kseg1虚拟和物理地址映射理解

    mips 24kf manual gliethttp pdf p89页 所以mips复位和中断发生 都会自动进入kernel模式 The core enters Kernel mode both at reset and when an e
  • Linux SSH Access denied(拒绝访问)解决方案

    新安装的 CentOS 7 使用 SSH 连接出现 Access denied xff0c 记录一下这个坑 详细问题如下 xff08 见图 xff09 xff1a 解决方案 查了下资料 xff0c Linux 系统默认就是禁止远程登录的 那
  • (数据结构与算法分析 一)------快速求幂算法,Java递归实现

    快速求幂算法 xff0c 递归实现 xff0c 其实算法的思想很简单 xff0c 但是感觉非常经典 xff0c 这个也是我开始看数据结构与算法分析这本书的开始把 xff0c 大学期间感觉就得深究一下算法 xff0c 课堂学习的太肤浅 xff
  • 字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较

    问题 xff1a 函数memcpy dest src sizeof dest strncpy dest src sizeof dest 和snprintf dest sizeof dest s src 都可以将src字符串中的内容拷贝到de
  • snprintf函数使用总结

    一直有接触snprintf 经久不用知识点又会模糊 记录下来以便日后查看 依赖头文件 include lt stdio h gt 函数原型 int snprintf char str size t size const char forma
  • 如何在Ubuntu 18.04 LTS上使用UFW设置防火墙

    正确配置防火墙是整个系统安全中最重要的方面之一 默认情况下 xff0c Ubuntu 18 04 LTS 附带了一个名为 UFW xff08 Uncomplicated Firewall xff09 的防火墙配置工具 xff0c UFW 是
  • 全程技术干货:VR画面渲染性能是这样提升的

    本文您将了解到 xff1a 1 xff0c VR渲染面临什么问题 xff1f 2 xff0c 如何做好VR的渲染 xff1f 3 xff0c 怎样提升VR渲染的性能 xff1f 渲染对于VR内容的开发来说 xff0c 是非常重要的议题 但在
  • Python微信小程序,实现自动回复等功能(itchat模块)

    本文是使用Python的itchat模块进行微信私聊消息以及群消息的自动回复功能 xff0c 必须在自己的微信中添加微信号xiaoice ms xff08 微软的微信机器人 xff09 才能实现 xff0c 直接复制代码运行之后扫一扫二维码
  • 最大完全子图和极大连通子图

    最近学习图论的一串小结之一 完全图 amp 完全子图 amp 最大完全子图 完全图 xff1a 任意两点都恰有一条边相连的图 任意两点都相邻 完全子图 xff1a 满足任意两点都恰有一条边相连的子图 xff0c 也叫团 最大完全子图 xff
  • python3回溯找最大团

    最近学习图论的一串小结之三 数学概念见上上篇 xff1a 最大完全子图和极大连通子图 最大团问题分析可以移步这篇博文 xff1a 回溯 图论 最大团问题 xff08 求最大完全子图 xff09 代码一部分参考了这篇博文 xff1a pyth
  • python3关于经纬度、方向角、目标距离

    博主搞了半天haversin公式倒腾距离之后 xff0c 发现有现成的geopy可用 xff0c 且网上查到的一些函数用法似乎有改变 xff0c 遂整理如下 已知两点经纬度求距离 from geopy distance import geo
  • 零基础LSTM入门示例

    最近用pytorch搭了个LSTM模型 xff0c 由于博主两个都没基础 xff0c 所以查来查去兜了不少圈子 xff0c 干脆总结一个极简的LSTM代码示例 xff0c 供参考 仅使用了torch nn Module自定义模型 随便挑了a
  • 零基础自定义数据集入门示例

    总结一个简单的自定义数据集示例 假设数据文件存储在path中的txt文件中 xff0c 内容为 时间 xff0c 数据1 xff0c 数据2 xff0c 数据3 的列表 对应的标签存在label txt中 from torch utils
  • not executable: 64-bit ELF file 已解决

    not executable 32 bit ELF file 已解决 not executable 64 bit ELF file 已解决 如上二个问题 1 xff0c 在ubuntu系统中 gcc linaro 7 5 0 2019 12
  • 训练集、测试集、验证集,以及数据集切分代码

    区别一下三个概念 xff1a 训练集 xff1a 顾名思义 xff0c 用于训练模型 xff0c 调整网络中的权值 偏差等参数 测试集 xff1a 对模型能力进行评估 xff0c 调整学习率等超参 xff0c 使模型效果达到最优 验证集 x
  • AI编程软件会取代程序员吗?

    最近听到同事问了这样一个问题 xff0c 今天就来好好的唠一唠 xff0c 随着科学技术的发展 xff0c 现在生命上都已经开始出现AI编程软件了 不由得感叹 xff0c 一句现在时代发展还真快呀 xff01 然后我就和他一样产生了一种小小
  • Android MTK Keyguard 锁屏UI 分析

    注意有时候锁屏并不是 以apk的形式存在的 直接在系统内部有一个锁屏框架 源文件路径主要Android2 2和2 3版本 有两个 xff1a frameworks base policy src com android internal p
  • 机器人操作系统ROS是什么?

    目录 1 什么是ROS 2 ROS的许可协议 3 ROS的主要发行版本 4 ROS的主要功能 5 ROS的应用 6 ROS开发的常用工具 7 ROS的优点 8 ROS的缺点 1 什么是ROS ROS是机器人操作系统 xff08 Robot
  • grub menu.list 配置

    因重装系统 xff0c 把GRUB引导菜单搞没了 xff0c 一直不知道怎么找回来 xff0c 今天看到贴子 xff0c 试了下 xff0c 成功了 主要步骤是下边兰字部分t 而恢复Grub xff0c 其实也很简单的 xff1a 用Liv
  • Android 11 行为变更 :所有应用

    Android 11 平台包含一些行为变更 xff0c 这些变更可能会影响您的应用 以下行为变更将影响在 Android 11 上运行的所有应用 xff0c 无论其采用哪种 targetSdkVersion 都不例外 您应该测试您的应用 x