兼容性框架变更 (Android 14)

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

本页介绍了 Android 14(API 级别 34)兼容性框架中可切换的变更。在您准备支持和以 Android 14 为目标时,请结合使用此列表与开发者选项和 ADB 命令来测试和调试您的应用。

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

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

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

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

本节列表介绍了 Android 14 兼容性框架中包含的可切换变更。

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

Android 14 兼容性框架中可切换的变更

ACCESS_SHARED_IDENTITY

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

如果应用通过启动此 Activity 并使用一个 ActivityOptions 实例来选择共享其身份,并且在该实例上调用了值为 trueActivityOptions.setShareIdentityEnabled(boolean),或者如果启动的 Activity 的 UID 与启动应用的 UID 相同,则授予对启动应用身份的访问权限。当此变更启用且满足其中一项要求时,该 Activity 可以分别通过 Activity.getLaunchedFromUid()Activity.getLaunchedFromPackage() 访问启动应用的 UID 和软件包名称。

ANR_PRE_UDC_APIS_ON_SLOW_RESPONSES

变更 ID: 258236856
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

启用后,当应用对 Android 13(API 级别 33)或更低版本中的 API 和功能响应缓慢时,会触发“应用无响应”(ANR) 消息。

AUTHORITY_ACCESS_CHECK_CHANGE_ID

变更 ID: 207133734
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,在所有同步相关 API 上启用对调用 UID 的权限访问检查。

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

指示此设备支持相机和麦克风指示器。如果存在,值为 false,因为如果变更 ID 不存在,CompatChanges#isChangeEnabled 方法会返回 true

DEFAULT_RESCIND_BAL_PRIVILEGES_FROM_PENDING_INTENT_SENDER

变更 ID: 244637991
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

当应用使用 PendingIntent#send() 或类似方法发送 PendingIntent 时,如果应用希望授予自己的后台 Activity 启动权限以启动待定 Intent,则现在必须选择启用。

要了解有关此变更的更多信息,请参阅 Android 14 行为变更页面中关于从后台启动 Activity 的额外限制的部分。

DETACH_THROWS_ISE_ONLY

变更 ID: 236825255
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

用于控制 #detachImage 抛出正确异常的标志。

#detachImage 文档中说明在出错时会抛出 IllegalStateException;其原生辅助方法在分离 Image 时如果 Surface 被放弃则会抛出 RuntimeException

这种先前未记录的异常行为在 Android 13(API 级别 33)中仍然存在。

在 Android 13(API 级别 33)之后,原生辅助方法将仅按照文档抛出 IllegalStateExceptions

启用此变更后,#detachImage 仅在分离图像时遇到错误才会抛出 IllegalStateException。对于以 Android 13(API 级别 33)及更低版本为目标的应用,行为保持不变。

DOWNSCALED

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

此变更控制所有每应用缓冲区缩减变更。启用此变更允许应用以下缩放因子:

当此变更对应用软件包启用时,应用将被强制调整大小为启用的最高缩放因子。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80DOWNSCALE_70),则使用 80%。当此变更和 DOWNSCALED_INVERSE 都启用时,DOWNSCALED_INVERSE 优先,并且缩放因子反向应用。

DOWNSCALED_INVERSE

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

此变更控制所有每应用缓冲区反向缩减变更。启用此变更允许反向应用以下缩放因子(即,分辨率反而被放大):

当此变更对应用软件包启用时,应用将被强制调整大小为启用的最低缩放因子。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80DOWNSCALE_70),则使用 80%,因为反向应用时,80% 的缩放因子等于 125%,小于反向应用 70% 缩放因子时应用的 142.86% 缩放。当此变更和 DOWNSCALED 都启用时,DOWNSCALED_INVERSE 优先,并且缩放因子反向应用。

DOWNSCALE_30

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 30% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 333.33% 的显示器上运行。

DOWNSCALE_35

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 35% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 285.71% 的显示器上运行。

DOWNSCALE_40

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 40% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 250% 的显示器上运行。

DOWNSCALE_45

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 45% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 222.22% 的显示器上运行。

DOWNSCALE_50

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 50% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 200% 的显示器上运行。

DOWNSCALE_55

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 55% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 181.82% 的显示器上运行。

DOWNSCALE_60

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 60% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 166.67% 的显示器上运行。

DOWNSCALE_65

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 65% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 153.85% 的显示器上运行。

DOWNSCALE_70

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 70% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 142.86% 的显示器上运行。

DOWNSCALE_75

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 75% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 133.33% 的显示器上运行。

DOWNSCALE_80

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 80% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 125% 的显示器上运行。

DOWNSCALE_85

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 85% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 117.65% 的显示器上运行。

DOWNSCALE_90

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

如果同时启用了 DOWNSCALED,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 90% 的显示器上运行。如果同时启用了 DOWNSCALED_INVERSE,则为此软件包启用此变更会强制应用假定其在垂直和水平分辨率为实际显示器 111.11% 的显示器上运行。

ENABLE_PLATFORM_MDNS_BACKEND

变更 ID: 270306772
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

以 Android 14 或更高版本为目标的应用使用平台集成的 mDNS 实现作为后端,而以先前版本为目标的应用则继续使用旧版网络服务发现 (NSD) 后端(使用旧版原生守护程序作为 NsdManager 后端)。

ENABLE_SELF_CERTIFIED_CAPABILITIES_DECLARATION

变更 ID: 266524688
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对以 Android 14 或更高版本为目标的应用启用自认证功能检查。有关详细信息,请参阅 NetworkCapabilities

ENFORCE_PACKAGE_VISIBILITY_FILTERING

变更 ID: 154726397
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,要求应用在清单中声明软件包可见性需求,才能访问 AccountManager API。

ENFORCE_READ_ONLY_JAVA_DCL

变更 ID: 218865702
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,要求所有动态加载的文件都标记为只读。这可以防止动态加载的文件被恶意行为者意外覆盖。

要了解有关此变更的更多信息,请参阅 Android 14 行为变更页面中关于更安全的动态代码加载的部分。

ENFORCE_STRICT_QUERY_BUILDER

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

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

EXACT_LISTENER_ALARMS_DROPPED_ON_CACHED

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

当调用应用进入缓存状态时,期望 AlarmManager.OnAlarmListener 回调的精确闹钟将被丢弃。

要了解有关 Android 14 中精确闹钟变更的更多信息,请参阅默认拒绝精确闹钟安排

FGS_TYPE_CHECK_FOR_INSTANT_APPS

变更 ID: 261055255
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

启用后,即时应用必须为其清单文件中声明的任何服务指定适当的前台服务类型。

要了解有关此变更的更多信息,请参阅描述前台服务类型变更的页面。

FGS_TYPE_NONE_DEPRECATION_CHANGE_ID

变更 ID: 255042465
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

启用后,以 Android 14(API 级别 34)及更高版本为目标的应用,如果使用已弃用的 FOREGROUND_SERVICE_TYPE_NONE 类型启动前台服务,将在日志中产生警告。

要了解有关此变更的更多信息,请参阅描述前台服务类型变更的页面。

FGS_TYPE_NONE_DISABLED_CHANGE_ID

变更 ID: 255038118
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

启用后,以 Android 14(API 级别 34)及更高版本为目标的应用,如果使用已弃用的 FOREGROUND_SERVICE_TYPE_NONE 类型启动前台服务,将导致异常。

要了解有关此变更的更多信息,请参阅描述前台服务类型变更的页面。

FGS_TYPE_PERMISSION_CHANGE_ID

变更 ID: 254662522
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

启用后,以 Android 14(API 级别 34)及更高版本为目标的应用,如果未提供与该前台服务类型相关的所需权限就启动前台服务,将导致 SecurityException

要了解有关此变更的更多信息,请参阅描述前台服务类型变更的页面。

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: 181146395
默认状态:对所有应用禁用。

强制其应用的软件包不可调整大小。

FORCE_RESIZE_APP

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

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

GWP_ASAN

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

启用应用中的采样原生内存错误检测。

要了解有关使用 GWP-ASan 的更多信息,请参阅 GWP-ASan 指南

IMPLICIT_INTENTS_ONLY_MATCH_EXPORTED_COMPONENTS

变更 ID: 229362273
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,组件必须导出才能通过隐式 Intent 调用。如果组件未导出并被调用,它将从接收器列表中移除。这专门适用于 Activity 和广播。

要了解有关此变更的更多信息,请参阅 Android 14 行为变更页面中关于隐式和待定 Intent 的限制的部分。

变更 ID: 266201607
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,应用必须在每次 MediaProjection 捕获会话之前请求用户同意。

要了解有关此变更的更多信息,请参阅 Android 14 行为变更页面中关于每次 MediaProjection 捕获会话都需要用户同意的部分。

NATIVE_HEAP_ZERO_INIT

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

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

NATIVE_MEMTAG_ASYNC

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

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

NATIVE_MEMTAG_SYNC

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

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

OVERRIDE_ANY_ORIENTATION

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

启用后,此变更允许应用以下屏幕方向覆盖,无论 Activity 请求何种屏幕方向:

OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK

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

启用后,此变更强制其应用的软件包忽略 android:resizeableActivity 的当前值以及等于或低于 M 的目标 SDK,并将 Activity 视为不可调整大小。在这种情况下,相机旋转和裁剪的值仅取决于考虑到当前显示旋转所需的补偿。

OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS

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

启用后,此变更强制其应用的软件包覆盖默认的相机旋转和裁剪行为,并始终返回 CaptureRequest.SCALER_ROTATE_AND_CROP_NONE

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

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

为其应用的应用程序启用 SCREEN_ORIENTATION_REVERSE_LANDSCAPE。除非同时启用了 OVERRIDE_ANY_ORIENTATION,否则仅当 Activity 指定横向屏幕方向时才使用 SCREEN_ORIENTATION_REVERSE_LANDSCAPE。启用此变更可以帮助您测试应用行为在横向屏幕方向对应 Surface.ROTATION_90 的设备和对应 Surface.ROTATION_270 的设备之间的差异。

OVERRIDE_MIN_ASPECT_RATIO

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

此变更控制所有强制给定最小宽高比的变更。启用此变更允许应用以下最小宽高比:

当此变更对应用软件包启用时,应用清单中给定的最小宽高比将被覆盖为启用的最大宽高比,除非应用的清单值更高。

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

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

启用后,此变更会覆盖竖屏全屏模式下的最小宽高比限制,以便使用所有可用的屏幕空间。

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 定义的中等值。

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

如果同时启用了 OVERRIDE_MIN_ASPECT_RATIO,则此变更会将任何其他强制 Activity 最小宽高比为特定值的变更(例如 OVERRIDE_MIN_ASPECT_RATIO_LARGEOVERRIDE_MIN_ASPECT_RATIO_MEDIUM)限制为也具有竖屏方向的 Activity。

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

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

启用后,此变更将排除受其影响的软件包,使其不受设备制造商可设置的忽略屏幕方向限制的影响。

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

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

为其应用的应用程序启用 SCREEN_ORIENTATION_NOSENSOR。除非同时启用了 OVERRIDE_ANY_ORIENTATION,否则仅当 Activity 未指定任何其他固定屏幕方向时才使用 SCREEN_ORIENTATION_NOSENSOR

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

为其应用的应用程序启用 SCREEN_ORIENTATION_PORTRAIT。除非同时启用了 OVERRIDE_ANY_ORIENTATION,否则仅当 Activity 未指定任何其他固定屏幕方向时才使用 SCREEN_ORIENTATION_PORTRAIT

RATE_LIMIT_TOASTS

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

启用对 Toast.show() 调用次数的速率限制,以防止在有限时间内向用户显示过多 Toast。在特定时间范围内尝试显示超出允许数量的 Toast 将导致 Toast 被丢弃。

REJECT_NEGATIVE_NETWORK_ESTIMATES

变更 ID: 253665015
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

启用后,要求估计的网络字节数为非负值。

REQUIRE_NETWORK_CONSTRAINT_FOR_NETWORK_JOB_WORK_ITEMS

变更 ID: 241104082
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,如果包含的 JobWorkItem 指示网络使用,则要求托管作业指定网络约束。

REQUIRE_NETWORK_PERMISSIONS_FOR_CONNECTIVITY_JOBS

变更 ID: 271850009
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,在调度具有连接约束的作业时,要求应用同时指定 INTERNETACCESS_NETWORK_STATE 权限。

THROW_ON_INVALID_DATA_TRANSFER_IMPLEMENTATION

变更 ID: 255371817
默认状态:对以 Android 14(API 级别 34)或更高版本为目标的应用启用。

对于以 Android 14(API 级别 34)及更高版本为目标的应用,如果应用在指定用户启动的数据传输作业时未正确实现所有必要的数据传输 API,系统将抛出异常。

要了解有关此变更的更多信息,请参阅描述如何将前台服务迁移到用户启动的数据传输作业的页面。

USE_EXPERIMENTAL_COMPONENT_ALIAS

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

启用后,系统允许“android”软件包使用组件别名。