兼容性框架变更 (Android 12)

图 1. 开发者选项中的应用兼容性变更屏幕列出了您可以切换的变更。

此页面描述了 Android 12(API 级别 31)兼容性框架中的每个行为变更。结合使用此列表和开发者选项和 ADB 命令来测试和调试您的应用,以便准备支持和面向 Android 12。

以下是您可以使用兼容性框架工具执行的一些操作

  • 无需实际更改应用的 targetSdkVersion 即可测试目标变更。您可以使用切换开关强制启用特定目标行为变更,以评估其对现有应用的影响。
  • 仅关注特定变更的测试。切换开关使您无需一次解决所有目标变更,而是可以禁用所有目标变更,只保留您要针对其进行测试的变更。
  • 通过 adb 管理切换开关。您可以使用 adb 命令在自动化测试环境中启用和禁用可切换的变更。
  • 使用标准变更 ID 更快地进行调试。可切换的变更都具有唯一的 ID 和名称,您可以使用它们来快速调试日志输出中的根本原因。

有关针对每种用例使用这些工具的完整详细信息,请参阅兼容性框架工具

包含在兼容性框架中的行为变更

本节中的列表描述了 Android 12 兼容性框架中包含的每个行为变更。

您可以按默认状态筛选变更列表。

添加到 Android 12 兼容性框架中的行为变更

ALWAYS_SANDBOX_DISPLAY_APIS

变更 ID:185004937
默认状态:对所有应用禁用。

启用后,无论窗口模式如何,都将 Display API 沙盒应用于软件包。Display API 将始终提供应用边界。

要了解有关此变更的更多信息,请参阅 Android 12 行为变更页面中关于已弃用的 Display 方法的部分。

AUTOFILL_NON_TEXT_REQUIRES_ON_RECEIVE_CONTENT_LISTENER

变更 ID:163400105
默认状态:面向 Android 12 (API 级别 32) 或更高版本的应用启用。

从 Android 12 开始,平台可以使用增强的自动填充框架提供非文本建议(例如图像)(请参阅自动填充服务)。为了使应用能够处理这些建议,它通常必须实现OnReceiveContentListener API。

为了使先前已实现InputConnection.commitContent(InputContentInfo, int, Bundle) API 的应用更轻松地采用此 API,如果应用尚未实现OnReceiveContentListener,我们将重用该 API 作为后备。此后备功能仅在 Android 12(API 级别 31)上启用。此变更 ID 禁用后备功能,因此面向 Android 12(API 级别 32)及更高版本的应用必须实现OnReceiveContentListener API 才能接受非文本建议。

BLOCK_FLAG_SLIPPERY

变更 ID:157929241
默认状态:对所有应用启用。

对于在 Android 12(API 级别 31)上运行的应用,会检查FLAG_SLIPPERY 是否与应用中的任何窗口一起使用。我们预计此标志可能仅由系统组件使用,因为它是一个不受支持的字段。如果是这样,它将受到限制。

BLOCK_GPS_STATUS_USAGE

变更 ID:144027538
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,所有 GpsStatus API 用法必须替换为 GnssStatus API。

BLOCK_IMMUTABLE_PENDING_INTENTS

变更 ID:171317480
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,传递到位置 API 的不可变 PendingIntent 对象将生成 IllegalArgumentException.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

变更 ID:169887240
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,LocationRequest 系统 API 不能与 PendingIntent 位置请求一起使用。

BLOCK_UNTRUSTED_TOUCHES

变更 ID:158002302
默认状态:对所有应用启用。

为了维护系统安全性和良好的用户体验,Android 12 阻止应用在叠加层以不安全的方式阻止应用时使用 触摸事件

要了解有关此更改的更多信息,请参阅 阻止不受信任的触摸事件

CALL_ACTIVITY_RESULT_BEFORE_RESUME

变更 ID:78294732
默认状态:面向 Android 12 (API 级别 32) 或更高版本的应用启用。

对于目标 Android 12(API 级别 32)及更高版本的应用,更正活动结果的生命周期,以保证活动在恢复之前获得活动结果。

CAMERA_MIC_INDICATORS_NOT_PRESENT

变更 ID:162547999
默认状态:对所有应用禁用。

指示此设备是否支持摄像头和麦克风指示器。如果存在,则为 false,因为如果变更 ID 不存在,则 CompatChanges#isChangeEnabled 方法返回 true

CANNOT_INSTALL_WITH_BAD_PERMISSION_GROUPS

变更 ID:146211400
默认状态:面向 Android 12 (API 级别 32) 或更高版本的应用启用。

对于目标 Android 12(API 级别 32)及更高版本的应用,如果权限组格式错误,包管理器将不会安装包。权限组应仅在共享证书的应用之间共享。如果权限属于某个组,则也必须定义该组。

CHANGE_ID_AUTH_STATE_DENIED

变更 ID:181350407
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的客户端应用,当它们处于被拒绝的授权状态并尝试向 nanoapp 发送消息时,将抛出 SecurityException

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

变更 ID:136069189
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,如果它们没有 HIGH_SAMPLING_RATE_SENSORS 权限,在调试模式下运行,并请求采样率高于 200 Hz,则会抛出 SecurityException

DELIVER_HISTORICAL_LOCATIONS

变更 ID:73144566
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,在某些情况下,位置客户端可能会接收历史位置(来自现在之前的时间)。

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

变更 ID:181658987
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,提供对 TelephonyDisplayInfo 中更改的向后兼容性。

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

变更 ID:170503758
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,如果更可取(例如,如果应用调用了 Surface.setFrameRate(float, int)),平台可能会将应用的帧率降低到刷新率的除数。应用将在节流的帧率下体验 Choreographer.postFrameCallback(Choreographer.FrameCallback) 回调和背压。应用使用 Display.getRefreshRate()Display.Mode.getRefreshRate() 来了解显示器的刷新率是多少。Display.getRefreshRate() 将始终返回应用程序帧率,而不是物理显示刷新率,以允许应用正确进行帧速率调整。Display.Mode.getRefreshRate() 如果编译到之前的版本,将返回应用帧率;从 Android 12(API 级别 31)开始,它将返回物理显示刷新率。

DOWNSCALED

变更 ID:168419799
默认状态:对所有应用禁用。

此更改是所有每个应用缓冲区缩小更改的看门人。启用此更改允许应用以下缩放因子。

启用应用包的此更改后,应用将强制调整大小到启用的最高缩放因子。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80DOWNSCALE_70),则使用 80%。

DOWNSCALE_30

变更 ID:189970040
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 30% 的显示器上运行。

DOWNSCALE_35

变更 ID:189969749
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 35% 的显示器上运行。

DOWNSCALE_40

变更 ID:189970038
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 40% 的显示器上运行。

DOWNSCALE_45

变更 ID:189969782
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 45% 的显示器上运行。

DOWNSCALE_50

变更 ID:176926741
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 50% 的显示器上运行。

DOWNSCALE_55

变更 ID:189970036
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 55% 的显示器上运行。

DOWNSCALE_60

变更 ID:176926771
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 60% 的显示器上运行。

DOWNSCALE_65

变更 ID:189969744
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 65% 的显示器上运行。

DOWNSCALE_70

变更 ID:176926829
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 70% 的显示器上运行。

DOWNSCALE_75

变更 ID:189969779
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 75% 的显示器上运行。

DOWNSCALE_80

变更 ID:176926753
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 80% 的显示器上运行。

DOWNSCALE_85

变更 ID:189969734
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 85% 的显示器上运行。

DOWNSCALE_90

变更 ID:182811243
默认状态:对所有应用禁用。

当也启用 DOWNSCALED 时,为包启用此更改会强制应用假定它在垂直和水平分辨率为真实显示器 90% 的显示器上运行。

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

变更 ID:157629738
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

目标 Android 12(API 级别 31)及更高版本的 Android TV 应用应处理任何窗口大小,包括大于 1080p 的窗口大小。目标 Android 早期版本的应用不希望接收大于 1080p 的窗口,因此在必要时,它们的窗口将缩小到 1080p。

DROP_CLOSE_SYSTEM_DIALOGS

变更 ID:174664120
默认状态:对所有应用启用。

为了改进用户在与应用和系统交互时的控制能力,从 Android 12 开始,ACTION_CLOSE_SYSTEM_DIALOGS intent 操作已弃用。

要了解有关此更改的更多信息,请参阅 应用无法关闭系统对话框

ENABLE_CHECKS_FOR_PRIVATE_FILES

变更 ID:172100307
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

目标 Android 12(API 级别 31)及更高版本的应用无法使用媒体提供程序插入或更新私有文件。

ENABLE_DEFERRED_SCAN

变更 ID:180326732
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

启用此选项可延迟作为 MediaProvider#update()一部分触发的扫描。

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

变更 ID:157233955
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,在查询和通知呼叫状态的 API(例如 TelecomManager#getCallStateTelephonyManager.getCallStateForSubscription()TelephonyCallback.CallStateListener)上启用 READ_PHONE_STATE 保护。

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

变更 ID:183407956
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标 Android 12(API 级别 31)及更高版本的应用,在 getPhoneAccount(PhoneAccountHandle) 上启用 READ_PHONE_NUMBERSREAD_PRIVILEGED_PHONE_STATE 保护。

ENABLE_INCLUDE_ALL_VOLUMES

变更 ID:182734110
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

启用此选项可在 MediaProvider#query 中包含来自最近卸载卷的文件的数据库行。

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

变更 ID:178209446
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

启用此选项允许持有 Manifest.permission.MANAGE_EXTERNAL_STORAGE 权限的应用请求原始外部存储访问。

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

变更 ID:185199076
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,所有非精确闹钟都需要设置最小的窗口大小,预期为几分钟的量级。实际上,任何需要更小窗口的闹钟都与精确闹钟相同,应使用相应的 API,例如 setExact(int, long, PendingIntent)。系统会将指定窗口较短的非精确闹钟窗口延长。

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

变更 ID:142191088
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

目标平台为 Android 12(API 级别 31)及更高版本的应用需要在其 AndroidManifest.xml 文件中使用 uses-native-library 标签声明对设备制造商定义的公共原生共享库的依赖关系。如果任何依赖关系无法满足——例如,其中一个依赖关系不存在——包管理器将不会安装该应用。可以使用标签中的 android:required 属性将依赖关系指定为可选,在这种情况下,无法满足依赖关系不会阻止安装。

安装后,应用只会获得在其清单中指定的原生共享库。即使原生共享库实际存在于设备上,调用 dlopen 加载不在应用清单中出现的原生共享库也会失败。

ENFORCE_STRICT_QUERY_BUILDER

变更 ID:143231523
默认状态:对所有应用禁用。

启用后,SQLiteQueryBuilder 会针对恶意参数验证所有 CalendarProvider2 查询选择。

FGS_BG_START_RESTRICTION_CHANGE_ID

变更 ID:170668199
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,限制了应用在后台运行时启动前台服务的时机。

FGS_START_EXCEPTION_CHANGE_ID

变更 ID:174041399
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,如果应用尝试在后台运行时启动前台服务,系统会抛出 IllegalStateException 异常。

FINISH_INPUT_NO_FALLBACK_CONNECTION

变更 ID:156215187
默认状态:对所有应用禁用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,当设备变为 非交互式 状态时,结束 InputConnection

如果当前 输入法 启用此功能,则只要设备变为非交互式状态,当前输入连接就会 结束

如果未启用,则当设备变为非交互式状态时,当前输入连接将被静默停用,并在设备再次变为交互式状态时调度 onFinishInput()onStartInput() 对。

FORCE_DISABLE_HEVC_SUPPORT

变更 ID:174227820
默认状态:对所有应用禁用。

强制禁用应用支持 HEVC 媒体功能。应用应在其清单中声明其支持的媒体功能,但此标志可用于强制应用不支持 HEVC,从而在访问 HEVC 编码的媒体时强制进行转码。设置此标志会覆盖应用的任何操作系统级别默认值。默认情况下它处于禁用状态,这意味着操作系统默认值优先。如果同时启用此标志和 FORCE_ENABLE_HEVC_SUPPORT,则操作系统会忽略这两个标志。

FORCE_ENABLE_HEVC_SUPPORT

变更 ID:174228127
默认状态:对所有应用禁用。

强制启用应用支持 HEVC 媒体功能。应用应在其清单中声明其支持的媒体功能,但此标志可用于强制应用支持 HEVC,从而避免在访问 HEVC 编码的媒体时进行转码。设置此标志会覆盖应用的任何操作系统级别默认值。默认情况下它处于禁用状态,这意味着操作系统默认值优先。如果同时启用此标志和 FORCE_DISABLE_HEVC_SUPPORT,则操作系统会忽略这两个标志。

FORCE_NON_RESIZE_APP

变更 ID:181136395
默认状态:对所有应用禁用。

强制将其应用到的包设置为不可调整大小。

FORCE_RESIZE_APP

变更 ID:174042936
默认状态:对所有应用禁用。

强制将其应用到的包设置为可调整大小。我们只允许在全屏窗口模式下调整大小,但不强制应用进入可调整大小的多窗口模式。

HIDE_PROP_ICUBINARY_DATA_PATH

变更 ID:171979766
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,移除对 android.icu.impl.ICUBinary.dataPath 属性的访问。

IGNORE_ALLOW_BACKUP_IN_D2D

变更 ID:183147249
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,在设备到设备 (D2D) 迁移期间,会忽略应用的 android:allowBackup 属性。

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

变更 ID:180523564
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,在设备到设备 (D2D) 传输期间,会忽略使用 android:fullBackupContent 指定的包含和排除规则。

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

变更 ID:169273070
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,getSupportedLocales() 方法现在在未设置时返回一个空的语言环境列表,而不是默认的系统语言环境。

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

变更 ID:158482162
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,isBackupServiceActive() 方法所需的 BACKUP 权限在 BackupManager 中的服务端强制执行,而不是客户端。

KEYSTORE_OPERATION_CREATION_MAY_FAIL

变更 ID:169897160
默认状态:对所有应用禁用。

启用后,根据新的修剪策略,密钥库操作的创建可能会失败。密钥库以前的工作假设是加密操作的创建总是成功的。但是,KeyMint 后端只有有限数量的操作槽。

为了保持“无限”操作槽的外观,如果没有任何可用的操作槽,密钥库守护进程会修剪最近最少使用的操作。结果,良好的操作可能会过早终止。这使得 AndroidKeystore 容易受到拒绝服务 (DoS) 和意外死锁的影响。例如,如果由于电源管理优化,多个应用同时唤醒并尝试执行加密操作,它们会开始终止彼此的操作而没有任何进展。

为了摆脱死锁并阻止 DoS 尝试,我们更改了修剪策略,使其更偏向于短暂使用少量操作槽的客户端。结果,那些不闲置超过 5 秒的单一操作几乎总是不会受到修剪策略的阻碍而顺利完成。仍然有一些与文件系统加密相关的操作可能会修剪这些操作,但这些情况极其罕见。作为这种新的修剪策略操作的副作用,如果客户端的修剪能力低于所有现有操作,则操作创建现在可能会失败。

修剪策略:为了找到合适的候选者,我们计算调用者和每个现有操作的惩罚值。惩罚值是修剪能力(调用者)或修剪抗性(现有操作)的倒数。为了使调用者能够修剪操作,它必须找到一个惩罚值高于自身的运。有关修剪策略的更多详细信息,请参阅 operation.rs 的实现。在 Android 11(API 级别 30)及更低版本中,KeyStore2 将轮询密钥库守护进程以获取空闲操作槽。对于目标平台为 Android 11(API 级别 30)及更低版本的应用,它看起来仍然像密码和签名对象的初始化总是成功一样——但是,获取操作可能需要更长时间。所有 Android 版本都受益于更公平的操作槽调度和更有可能成功完成操作。

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

变更 ID:174664365
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,除非应用也具有 android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS 权限,否则无法发送 Intent.ACTION_CLOSE_SYSTEM_DIALOGS。请注意,这是 #DROP_CLOSE_SYSTEM_DIALOGS 的更严格版本,它期望应用一旦开始针对 Android 12(API 级别 31)或更高版本,就停止发送 Intent.ACTION_CLOSE_SYSTEM_DIALOGS 意图。

LOCK_DOWN_COLLAPSE_STATUS_BAR

变更 ID:173031413
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

出于安全原因,对于目标平台为 Android 12(API 级别 31)及更高版本的应用,需要 Manifest.permission.STATUS_BAR 权限才能折叠状态栏面板。恶意软件曾利用此漏洞阻止用户访问关键通知。

LOW_POWER_EXCEPTIONS

变更 ID:168936375
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,如果调用者没有 LOCATION_HARDWARE 权限,则标记为低功耗的所有 LocationRequest 对象都会抛出异常,而不是静默丢弃请求的低功耗部分。

MISSING_EXPORTED_FLAG

变更 ID:150232615
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,每当定义意图过滤器时,都必须为 android:exported 属性指定显式值。

要了解有关此更改的更多信息,请参阅 更安全的组件导出

NATIVE_HEAP_POINTER_TAGGING_APP_ZYGOTE

变更 ID:207557677
默认状态:面向 Android 12 (API 级别 32) 或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 32)及更高版本的应用,AppZygote 进程及其子进程中的原生堆分配在最高有效字节中使用非零标记。

要了解有关此更改的更多信息,请参阅 标记指针

NATIVE_HEAP_ZERO_INIT

变更 ID:178038272
默认状态:对所有应用禁用。

启用原生堆内存分配的自动零初始化。

NATIVE_MEMTAG_ASYNC

变更 ID:135772972
默认状态:对所有应用禁用。

在此进程中启用异步 (ASYNC) 内存标记检查。此标志仅影响支持 ARM 内存标记扩展 (MTE) 的硬件。

NATIVE_MEMTAG_SYNC

变更 ID:177438394
默认状态:对所有应用禁用。

在此进程中启用同步 (SYNC) 内存标记检查。此标志仅影响支持 ARM 内存标记扩展 (MTE) 的硬件。如果同时启用 NATIVE_MEMTAG_ASYNC 和此选项,则此选项优先,并且 MTE 以 SYNC 模式启用。

NEVER_SANDBOX_DISPLAY_APIS

变更 ID:184838306
默认状态:对所有应用禁用。

启用后,防止显示 API 沙箱应用于信箱或 SCM 活动。显示 API 将继续提供 DisplayArea 边界。

要了解有关此变更的更多信息,请参阅 Android 12 行为变更页面中关于已弃用的 Display 方法的部分。

NOTIFICATION_CANCELLATION_REASONS

变更 ID:175319604
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

允许通知侦听器了解更具体的新的取消原因。

NOTIFICATION_TRAMPOLINE_BLOCK

变更 ID:167676448
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

为了提高应用性能和用户体验,目标平台为 Android 12 的应用不能使用服务或广播接收器作为通知跳板。

要了解有关此更改的更多信息,请参阅 不能从服务或广播接收器创建通知跳板

NULL_TELEPHONY_THROW_NO_CB

变更 ID:182185642
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

用于检查当前进程的目标 SDK 版本是否为 Android 12(API 级别 31)或更高版本。

适用于以下方法:

OVERRIDE_MIN_ASPECT_RATIO

变更 ID:174042980
默认状态:对所有应用禁用。

此变更负责所有强制指定最小宽高比的变更。启用此变更后,即可应用以下最小宽高比:

如果为应用包启用了此变更,则应用清单中指定的最小宽高比将被覆盖为已启用的最大宽高比,除非应用清单中的值更高。

OVERRIDE_MIN_ASPECT_RATIO_LARGE

变更 ID:180326787
默认状态:对所有应用禁用。

如果也启用了OVERRIDE_MIN_ASPECT_RATIO,则为某个包启用此变更会将 activity 的最小宽高比设置为由 OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE 定义的大值。

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

变更 ID:180326845
默认状态:对所有应用禁用。

如果也启用了OVERRIDE_MIN_ASPECT_RATIO,则为某个包启用此变更会将 activity 的最小宽高比设置为由 OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE 定义的中值。

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

变更 ID:160794467
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,必须指定应用创建的每个PendingIntent对象的易变性。此额外要求可提高应用的安全性。

要了解有关此变更的更多信息,请参阅挂起意图必须声明易变性

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

变更 ID:165573442
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

目标平台为 Android 12(API 级别 31)及更高版本的管理应用无法使用DevicePolicyManager.setPasswordQuality(ComponentName, int)来设置通过调用DevicePolicyManager.getParentProfileInstance(ComponentName)获得的DevicePolicyManager实例上的密码质量。相反,它们应该使用DevicePolicyManager.setRequiredPasswordComplexity(int)来设置全设备范围的粗粒度密码要求。

RATE_LIMIT_TOASTS

变更 ID:174840628
默认状态:此变更无法切换。兼容性框架仅记录此变更。

启用对Toast.show()调用数量的速率限制,以防止在有限的时间内向用户显示过多的吐司消息,从而造成用户负担过重。任何在特定时间范围内尝试显示超过允许数量的吐司消息的操作都会导致该吐司消息被丢弃。

REQUIRE_EXACT_ALARM_PERMISSION

变更 ID:171306433
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,应用必须具有Manifest.permission.SCHEDULE_EXACT_ALARM权限才能使用任何设置精确闹钟的 API,例如setExactAndAllowWhileIdle(int, long, PendingIntent)setAlarmClock(AlarmClockInfo, PendingIntent)

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

变更 ID:182478738
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,应用必须具有Manifest.permission.READ_PHONE_STATE权限才能调用TelephonyCallback.ActiveDataSubscriptionIdListener

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

变更 ID:184323934
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,应用必须具有Manifest.permission.READ_PHONE_STATE权限才能调用TelephonyCallback.CellInfoListener

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

变更 ID:183164979
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,应用必须具有Manifest.permission.READ_PHONE_STATE权限才能调用TelephonyCallback.DisplayInfoListener

RESTRICT_ADB_BACKUP

变更 ID:171032338
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,adb backup 会自动为以可调试模式运行的应用(android:debuggable 设置为 true)启用,并且对任何其他应用都不可用。

RESTRICT_DOMAINS

变更 ID:175408749
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,需要使用更新的应用链接验证 API 表单。此要求意味着应用必须在包含以下所有内容的意图过滤器内声明域名:

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intent.CATEGORY_DEFAULT
  • IntentFilter.SCHEME_HTTP 和/或 IntentFilter.SCHEME_HTTPS,没有其他方案。

在早期版本的 Android 中,Intent.CATEGORY_BROWSABLE 不是必需的,允许使用其他方案,并且在任何意图过滤器中将 autoVerify 设置为 true 会隐式地假装所有意图过滤器都设置为 autoVerify="true"

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

变更 ID:151105954
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,强制执行发送到noteOp(String, int, String)noteProxyOp(String, String)startOp(String, int, String)的所有attributionTags都必须在指定为方法参数的包的清单中定义。

要启用此变更,调用noteOp(String, int, String)的包以及指定为方法参数的包都必须启用此变更。

SELINUX_LATEST_CHANGES

变更 ID:143539591
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,选择加入最新的 SELinux 变更。对于目标平台为 Android 12(API 级别 31)或更高版本的应用,关闭此变更将不会产生任何作用。对使用共享用户 ID 的应用没有影响。

SETTINGS_API_V2

变更 ID:178111421
默认状态:对所有应用启用。

用于验证在 AndroidManifest.xml 意图过滤器中标记为autoVerify=true的域名的新的用户偏好设置 API 尚未在当前平台预览版中实现。目前,可以通过启用此 ChangeId 并使用adb shell pm set-app-links-user-selection等命令来预览新的用户偏好设置变更。

USE_SHORT_FGS_USAGE_INTERACTION_TIME

变更 ID:183972877
默认状态:面向 Android 12(API 级别 31)或更高版本的应用启用。

对于目标平台为 Android 12(API 级别 31)及更高版本的应用,确定在应用启动前台服务时,是否使用较短的超时时间才能将待机桶提升到ACTIVE