兼容性框架变更 (Android 13)

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

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

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

  • 在不实际更改应用的 targetSdkVersion 的情况下测试针对性的变更。您可以使用切换开关强制启用特定的针对性行为变更,以评估对现有应用的影响。
  • 仅针对特定变更进行测试。您可以使用切换开关停用除要测试的变更之外的所有针对性变更,而不必一次处理所有针对性变更。
  • 通过 adb 管理切换开关。您可以使用 adb 命令在自动测试环境中启用和停用可切换的变更。
  • 使用标准变更 ID 更快地进行调试。每个可切换的变更都具有唯一 ID 和名称,可用于在日志输出中快速调试根本原因。

如需详细了解如何针对每个用例使用相应工具,请参阅兼容性框架工具

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

此部分的列表中介绍了 Android 13 中的兼容性框架包含的可切换变更。

您可以按默认状态过滤变更列表。

Android 13 兼容性框架中包含的可切换变更

ACCOUNT_ACCESS_CHECK_CHANGE_ID

变更 ID:201794303
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许在所有与同步相关的 API 上检查发起调用 UID 的账号访问权限。

ALLOW_COPY_SOLID_COLOR_VIEW

变更 ID:205907456
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许应用接收 SplashScreen.OnExitAnimationListener.onSplashScreenExit(SplashScreenView) 回调,即使启动画面仅显示单色。

ALLOW_SECURE_ACTIVITY_DISPLAY_ON_REMOTE_DEVICE

变更 ID:201712607
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许在远程设备上显示安全性活动(如果需要)。

BORINGLAYOUT_FALLBACK_LINESPACING

变更 ID:210923482
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,为 BoringLayout 启用后备文本行间距(行高)。

CALL_REDIRECTION_AUDIO_MODES

变更 ID:189472651
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许使用音频模式进行来电音频重定向。

CAMERA_MIC_INDICATORS_NOT_PRESENT

变更 ID:162547999
默认状态:对所有应用都处于停用状态。

表示此设备支持摄像头和麦克风指示灯。如果存在该变更 ID,值将为 false,因为如果不存在,CompatChanges#isChangeEnabled 方法会返回 true

CLEAR_SHOW_FORCED_FLAG_WHEN_LEAVING

变更 ID:214016041
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,除非调用方当前获得焦点,否则阻止 SHOW_FORCED 标志发挥作用。

DEFER_BOOT_COMPLETED_BROADCAST_CHANGE_ID

变更 ID:203704822
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,将 LOCKED_BOOT_COMPLETEDBOOT_COMPLETED 广播延迟到 UID 中的任何进程首次启动时。

DISALLOW_DEADLINES_FOR_PREFETCH_JOBS

变更 ID:194532703
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,不允许(使用 JobInfo.Builder.setOverrideDeadline(long))为预提取作业 (JobInfo.Builder.setPrefetch(boolean)) 设置截止时间。 预提取作业旨在临近下一次应用启动时运行,因此它们不能有截止时间。但是,系统不会删除或取消之前设有截止时间的任何排定预提取作业。

应用无法保留存在具有时间的永久排定预提取作业。具有截止时间的预提取作业将运行,并且此限制下的应用将无法安排具有截止时间的新预提取作业。如果重新安排作业(通过使用 JobService.jobFinished(JobParameters, boolean)JobService.onStopJob(JobParameters) 的返回值提供 true),则截止时间会被忽略。 定期作业需要满足所有约束条件,因此这些限制不适用于其截止时间。

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% 的显示屏上运行。

DUMP_IGNORES_SPECIAL_ARGS

变更 ID:149254050
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,如果使用一些特殊参数调用 dumpsys activity,则不会调用 dump(String, FileDescriptor, PrintWriter, String[])

DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED

变更 ID:161145287
默认状态:对所有应用都处于停用状态。

启用后,在代码中为不受保护的广播注册接收器时,需要应用显式设置 Context.RECEIVER_EXPORTEDContext.RECEIVER_NOT_EXPORTED

如需了解详情,请参阅更安全地导出上下文注册的接收器部分。

ENABLE_PENDING_INTENT_BAL_OPTION

变更 ID:192341120
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,可以防止 PendingIntent 被滥用来启动后台 Activity。

ENABLE_SIMPLIFIED_DARK_MODE

变更 ID:214741472
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许网络内容根据应用的主题和 WebView 应用浅色或深色样式,以尝试在适当的时候通过算法调暗网络内容。如需了解详情,请参阅 setAlgorithmicDarkeningAllowed(boolean)

ENABLE_TOUCH_OPAQUE_ACTIVITIES

变更 ID:194480991
默认状态:对所有应用都处于启用状态。

对于在 Android 13(API 级别 33)或更高版本上运行的应用,使 Activity 能够在其任务边界内使用所有轻触操作。

ENABLE_USE_EXACT_ALARM

变更 ID:218533173
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许某些类型的应用使用 Manifest.permission.USE_EXACT_ALARM 安排精确闹钟。

ENFORCE_INTENTS_TO_MATCH_INTENT_FILTERS

变更 ID:161252188
默认状态:对所有应用都处于启用状态。

组件将停止接收来自与其声明的 intent 过滤器不匹配的外部调用方的 intent。当应用在其清单中注册某个导出的组件并添加 intent 过滤器时,该组件可以由任何 intent 启动,即使那些 intent 与 intent 过滤器不匹配也可以。事实证明,许多开发者都认为这种做法不合常理。在某些情况下,如果在组件启动时不检查 intent,第三方应用可能会触发仅限内部使用的功能。

ENFORCE_STRICT_QUERY_BUILDER

变更 ID:143231523
默认状态:对所有应用都处于停用状态。

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

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
默认状态:对所有应用都处于停用状态。

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

GET_API_SIGNATURES_FROM_UICC_PORT_INFO

变更 ID:202110963
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,允许 SIM 卡同时拥有多个活跃 ICCID。 该功能由 Multiple Enabled Profiles (MEP) 提供支持。

GWP_ASAN

变更 ID:135634846
默认状态:对所有应用都处于停用状态。

在应用中启用采样原生内存 bug 检测。

如需详细了解如何使用 GWP-ASan,请参阅 GWP-ASan 指南

ICC_CLOSE_CHANNEL_EXCEPTION_ON_FAILURE

变更 ID:208739934
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,现在每当 ICC 关闭通道操作失败时,都会抛出异常。

MEDIA_CONTROL_SESSION_ACTIONS

变更 ID:203800354
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,基于 Notification.MediaStyle 通知的媒体控件现在具有基于媒体会话的 PlaybackState 的操作,而不是通知的操作。

如需详细了解此变更,请参阅 Android 13 行为变更页面中有关媒体控件变更的部分。

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。

NOTIFICATION_LOG_ASSISTANT_CANCEL

变更 ID:195579280
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,使聆听者能够理解从助理发出的取消通知的更具体原因,而不是使用更宽泛的 REASON_LISTENER_CANCEL

NOTIFICATION_PERM_CHANGE_ID

变更 ID:194833441
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,能够实现与通知运行时权限相关的行为变更。

如需详细了解此变更,请参阅关于新的通知运行时权限的页面。

NOTIFICATION_TRAMPOLINE_BLOCK_FOR_EXEMPT_ROLES

变更 ID:227752274
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,出于用户体验和性能考虑,之前具有豁免角色的权限持有者(浏览器)将被禁止从广播接收器或服务启动 Activity 来响应通知和通知点击操作。

OVERRIDABLE_COMPONENT_CALLBACKS

变更 ID:193247900
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,registerComponentCallbacks(ComponentCallbacks) 会将 ComponentCallbacks 添加到 ActivityContextWrapper.getBaseContext(),而不是始终添加到 getApplicationContext()

OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK

变更 ID:191513214
默认状态:对所有应用都处于停用状态。

启用后,此变更 ID 会强制使应用该变更的软件包忽略 android:resizeableActivity 的当前值以及不高于 M 的目标 SDK,并将相应 activity 视为不可调整大小。在这种情况下,鉴于当前显示屏旋转情况,摄像头画面旋转和剪裁的值仅取决于所需的补偿值。

OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS

变更 ID:189229956
默认状态:对所有应用都处于停用状态。

启用后,此变更 ID 会强制使应用该变更的软件包替换默认的摄像头画面旋转和剪裁行为,并始终返回 CaptureRequest.SCALER_ROTATE_AND_CROP_NONE。下表讨论了默认行为以及所有可能的替换组合。

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

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

如果同时还启用了 OVERRIDE_MIN_ASPECT_RATIO,此变更会将将 activity 的最小宽高比强制设置为特定值的所有其他更改(如 OVERRIDE_MIN_ASPECT_RATIO_LARGEOVERRIDE_MIN_ASPECT_RATIO_MEDIUM)限制为同样采用纵向的 activity。

RATE_LIMIT_TOASTS

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

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

REQUEST_LISTENING_MUST_MATCH_PACKAGE

变更 ID:172251878
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,调用 TileService.requestListeningState(Context, ComponentName) 会检查调用软件包 (UID) 和目标软件包 ComponentName 是否匹配。系统还会检查所使用的上下文是否可以代表当前用户执行操作。

RETURN_ADVANCED_VIDEO_PROFILES

变更 ID:206033068
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,会控制 getAll(String, int) 返回的视频配置文件的类型。

SHOULD_RESOLVE_PORT_INDEX_FOR_APPS

变更 ID:224562872
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,使 SIM 卡能够在不同端口上启用 Multiple Enabled Profiles (MEP)。为了保持运营商应用的向后兼容性,当以 API 级别 32 或更低级别为目标平台的应用在未指定端口索引的情况下调用 switchToSubscription 或下载 API 时,系统会通过始终使用端口索引 0 来保留现有的行为(即使设备本身启用了 MEP eUICC)。

SWITCH_WITHOUT_PORT_INDEX_EXCEPTION_ON_DISABLE

变更 ID:218393363
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,每当调用 switchToSubscription() 而不提供 portIndex 时,系统都会抛出异常以停用订阅。

THROW_ON_INVALID_PRIORITY_VALUE

变更 ID:140852299
默认状态:对以 Android 13(API 级别 33)或更高版本为目标平台的应用处于启用状态。

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用,当应用使用 JobInfo.Builder.setPriority(int) 提供无效优先级值时,系统会抛出异常。 旧版应用可能无法正确使用该 API,因此如果它们继续使用该 API,调用将静默失败。

USE_EXPERIMENTAL_COMPONENT_ALIAS

变更 ID:196254758
默认状态:对所有应用都处于停用状态。

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