兼容性框架变更 (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.setPrefetch(boolean))设置截止日期(使用 JobInfo.Builder.setOverrideDeadline(long))。预取作业旨在在下次应用启动附近运行,因此不允许有截止日期。但是,系统不会丢弃或取消任何之前已安排的具有截止日期的预取作业。

应用无法保留带有截止日期的永久计划预取作业。带有截止日期的预取作业将运行,受此限制的应用将无法安排新的带有截止日期的预取作业。如果通过 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) 及更高版本为目标的应用,允许网页内容根据应用主题应用浅色或深色样式,并且在适当情况下,WebView 尝试通过算法变暗来使网页内容变暗。有关详细信息,请参阅 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
默认状态:为所有应用启用。

组件将停止接收与其声明的 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。多启用配置文件 (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 将被阻止,这适用于以前免除的角色持有者(浏览器)。

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

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() 调用次数的速率限制,以防止在有限时间内给用户带来过多 Toast 提示。在特定时间范围内尝试显示超出允许数量的 Toast 提示将导致 Toast 被丢弃。

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 时未指定端口索引,即使设备本身已启用 MEP eUICC,系统也会通过始终使用端口索引 0 来保留现有行为。

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”软件包使用组件别名。