兼容性框架变更 (Android 13)

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

此页面描述了 Android 13(API 级别 33)兼容性框架中可切换的变更。结合使用此列表与开发者选项和 ADB 命令,在准备支持和定位 Android 13 时测试和调试您的应用。

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

  • 无需实际更改应用的 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
默认状态:对所有应用禁用。

指示此设备是否支持相机和麦克风指示器。如果存在,则为 false,因为如果更改 ID 不存在,则 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 来启动后台活动。

ENABLE_SIMPLIFIED_DARK_MODE

更改ID:214741472
默认状态:针对 Android 13(API 级别 33)或更高版本的目标应用启用。

对于目标 Android 13(API 级别 33)及更高版本的应用,允许 web 内容根据应用的主题应用浅色或深色样式,并允许 WebView 在适当的情况下尝试通过算法式变暗来使 web 内容变暗。有关详细信息,请参阅 setAlgorithmicDarkeningAllowed(boolean)

ENABLE_TOUCH_OPAQUE_ACTIVITIES

更改ID:194480991
默认状态:对所有应用启用。

对于在 Android 13(API 级别 33)或更高版本上运行的应用,使活动消耗其任务边界内的所有触摸。

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

组件将停止接收来自不匹配其声明意图过滤器的外部调用者的意图。当应用在其清单中注册导出的组件并添加意图过滤器时,任何意图都可以启动该组件,即使是不匹配意图过滤器的意图也是如此。事实证明,许多开发人员发现这与他们的直觉相悖。在某些情况下,如果不检查启动组件时的意图,这可能会允许第三方应用触发仅内部使用的功能。

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。对这方面的支持由多启用配置文件 (MEP) 提供。

GWP_ASAN

更改 ID:135634846
默认状态:对所有应用禁用。

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

要了解有关使用 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 以 SYNC 模式启用。

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启动响应于通知和通知操作点击将被阻止,原因是出于 UX 和性能考虑,针对之前豁免的角色持有者(浏览器)。

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的当前值以及目标 SDK 等于或低于 M,并将活动视为不可调整大小。在这种情况下,相机旋转和裁剪的值将仅取决于考虑当前显示旋转所需的补偿。

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,则为包启用此更改会将活动的最小纵横比设置为由OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE定义的大值。

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

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

如果还启用了OVERRIDE_MIN_ASPECT_RATIO,则为包启用此更改会将活动的最小纵横比设置为由OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE定义的中值。

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

如果还启用了OVERRIDE_MIN_ASPECT_RATIO,则此更改会将强制活动的最小纵横比为某个值(例如OVERRIDE_MIN_ASPECT_RATIO_LARGEOVERRIDE_MIN_ASPECT_RATIO_MEDIUM)的任何其他更改限制为也具有纵向方向的活动。

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 卡在不同的端口上启用多启用配置文件 (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”包使用组件别名。