兼容性框架变更 (Android 12)

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

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

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

  • 无需实际更改应用的 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,我们将其作为备用方案进行重用。此备用方案仅在 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) 及更高版本的应用,更正 Activity 结果的生命周期,以确保 Activity 在恢复之前获得 Activity 结果。

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

表示此设备支持摄像头和麦克风指示器。如果存在,将为false,因为CompatChanges#isChangeEnabled方法在变更 ID 不存在时返回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) 及更高版本的客户端应用,当它们处于被拒绝的授权状态并尝试向纳米应用发送消息时,会抛出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 的READ_PHONE_STATE保护,例如TelecomManager#getCallStateTelephonyManager.getCallStateForSubscription()TelephonyCallback.CallStateListener

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_ALARM

变更 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 编码的媒体时强制进行转码。设置此标志会覆盖所有 OS 级别的应用默认设置。默认情况下它是禁用的,这意味着 OS 默认设置优先。如果同时启用此标志和FORCE_ENABLE_HEVC_SUPPORT,则 OS 会忽略这两个标志。

FORCE_ENABLE_HEVC_SUPPORT

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

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

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 intent。

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) 及更高版本的应用,所有标记为低功耗的LocationRequest对象,如果调用者没有LOCATION_HARDWARE权限,则会抛出异常,而不是静默删除请求的低功耗部分。

MISSING_EXPORTED_FLAG

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

对于针对 Android 12 (API 级别 31) 及更高版本的应用,每当定义 Intent 过滤器时,都必须为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
默认状态:对所有应用禁用。

启用后,阻止 Display API 沙盒应用于信箱或 SCM 活动。Display 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也启用时,为软件包启用此变更会将活动的最小宽高比设置为由OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE定义的大值。

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

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

OVERRIDE_MIN_ASPECT_RATIO也启用时,为软件包启用此变更会将活动的最小宽高比设置为由OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE定义的中间值。

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

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

对于针对 Android 12 (API 级别 31) 及更高版本的应用,您必须为您应用创建的每个PendingIntent对象指定可变性。此附加要求提高了您应用的安全性。

要了解有关此变更的更多信息,请参阅Pending intent 必须声明可变性

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。此要求意味着应用必须在 Intent 过滤器中声明域,其中包括所有以下内容:

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

在早期版本的 Android 上,Intent.CATEGORY_BROWSABLE不是必需的,允许其他方案,并且在任何 Intent 过滤器中将autoVerify设置为true会隐式假装所有 Intent 过滤器都设置为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 Intent 过滤器中标记为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