兼容性框架变更 (Android 16)
以下是您可以使用兼容性框架工具进行的操作:
- 在不实际更改应用的 targetSdkVersion 的情况下测试针对性的变更。您可以使用切换开关强制启用特定的针对性行为变更,以评估对现有应用的影响。
- 仅针对特定变更进行测试。您可以使用切换开关停用除要测试的变更之外的所有针对性变更,而不必一次处理所有针对性变更。
- 通过 adb 管理切换开关。您可以使用 adb 命令在自动测试环境中启用和停用可切换的变更。
- 使用标准变更 ID 更快地进行调试。每个可切换的变更都具有唯一 ID 和名称,可用于在日志输出中快速调试根本原因。
兼容性框架中包含的行为变更
此部分的列表中介绍了 Android 16 相关变更的兼容性框架中包含的可切换变更,以及有助于进行常规应用测试的可切换变更。
| Android 16 兼容性框架中包含的可切换变更 |
|---|
#### CAMERA_MIC_INDICATORS_NOT_PRESENT 变更 ID :162547999 默认状态 :对所有应用都处于停用状态。 表示此设备支持摄像头和麦克风指示灯。如果存在该变更 ID,值将为 false,因为如果不存在,CompatChanges#isChangeEnabled 方法会返回 true。 |
#### DOWNSCALED 变更 ID :168419799 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用缩小缓冲区的变更的把关程序。启用此变更可应用以下缩放比例: * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最大缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_70),则系统会使用 80%。 如果同时启用此变更和 DOWNSCALED_INVERSE,则 DOWNSCALED_INVERSE 优先,并且缩放比例会反向应用。 |
#### DOWNSCALED_INVERSE 变更 ID :273564678 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用反向缩小缓冲区的变更的把关程序。启用此变更后,系统可以反向应用以下缩放比例(即,分辨率会向上缩放): * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最小缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_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% 的显示屏上运行。 |
#### 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 :181146395 默认状态 :对所有应用都处于停用状态。 强制使应用此变更的软件包无法调整尺寸。 |
#### FORCE_RESIZE_APP 变更 ID :174042936 默认状态 :对所有应用都处于停用状态。 强制使应用该变更的软件包可调整显示尺寸。我们只允许在全屏窗口模式下调整显示尺寸,但不强制应用进入可调整显示尺寸的多窗口模式。 |
#### GWP_ASAN 变更 ID :145634846 默认状态 :对所有应用都处于停用状态。 在应用中启用采样原生内存 bug 检测。 如需详细了解如何使用 GWP-ASan,请参阅 GWP-ASan 指南。 |
#### 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。 |
#### OVERRIDE_ANY_ORIENTATION 变更 ID :265464455 默认状态 :对所有应用都处于停用状态。 启用后,此变更允许应用以下屏幕方向替换,无论 activity 请求的屏幕方向如何: * OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE * OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR * OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT |
#### OVERRIDE_ANY_ORIENTATION_TO_USER 变更 ID :310816437 默认状态 :对所有应用都处于停用状态。 启用后,启用 SCREEN_ORIENTATION_USER,该属性会替换 activity 请求的任何屏幕方向。如果启用了此替换项,则可以替换固定屏幕方向的应用,使其在大屏设备上全屏显示。ignoreOrientationRequest |
#### OVERRIDE_CAMERA_COMPAT_DISABLE_FREEFORM_WINDOWING_TREATMENT 变更 ID :314961188 默认状态 :对所有应用都处于停用状态。 启用后,在自由窗口模式下,对于固定屏幕方向的应用,系统会从相机兼容性处理中排除应用了该替换项的软件包。 在自由窗口模式下,兼容性处理通过以下方式模拟在纵向设备上运行:在应用窗口中添加信箱模式,并将相机特征更改为应用在纵向设备中通常预期的特征:后置摄像头和前置摄像头的传感器旋转角度分别为 90 度和 270 度,并将显示旋转角度设置为 0。 使用此标志可针对无法很好地响应处理的应用停用兼容性处理。 |
#### OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK 变更 ID :191514214 默认状态 :对所有应用都处于停用状态。 启用后,此变更会强制使应用该变更的软件包:忽略 android:resizeableActivity 的当前值,以 Android 6.0(API 级别 23)或更低版本为目标,并将该 activity 视为无法调整尺寸。在这种情况下,鉴于当前显示屏旋转情况,摄像头画面旋转和剪裁的值仅取决于所需的补偿值。 |
#### OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS 变更 ID :189229956 默认状态 :对所有应用都处于停用状态。 启用后,此变更会强制使应用该变更的软件包替换默认的摄像头画面旋转和剪裁行为,并始终返回 CaptureRequest.SCALER_ROTATE_AND_CROP_NONE。 |
#### OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION 变更 ID :316897322 默认状态 :对所有应用都处于停用状态。 启用后,可确保用户在启动 MediaProjection 会话时可以选择捕获单个应用或整个屏幕,从而替换 MediaProjectionConfig#createConfigForDefaultDisplay 的使用。 |
#### 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_LAYOUT_IN_DISPLAY_CUTOUT_MODE 变更 ID :332679525 默认状态 :对所有应用都处于停用状态。 启用后,会覆盖刘海屏模式下的布局行为。仅当未强制执行全屏显示时,此设置才会生效。 |
#### OVERRIDE_MIN_ASPECT_RATIO 变更 ID :174042980 默认状态 :对所有应用都处于停用状态。 此变更是所有强制采用指定最小宽高比的变更的把关程序。启用此变更可应用以下最小宽高比: * OVERRIDE_MIN_ASPECT_RATIO_LARGE * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM * OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 为应用软件包启用此变更后,系统会将应用清单文件中指定的最小宽高比替换为已启用的最大宽高比(除非应用清单文件中指定的值更高)。 |
#### 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_ONLY_FOR_CAMERA 变更 ID :325586858 默认状态 :对所有应用都处于停用状态。 启用后,限制强制应用指定最小宽高比的处理,以便仅在应用连接到相机时应用这些处理。 |
#### OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 变更 ID :203647190 默认状态 :对所有应用均启用。 如果同时还启用了 OVERRIDE_MIN_ASPECT_RATIO,则此变更会限制有以下作用的任何其他变更:强制将相应 activity 的最小宽高比设为某个值(例如 OVERRIDE_MIN_ASPECT_RATIO_LARGE 和 OVERRIDE_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() 调用的次数施加调用频率限制,防止在有限时间内向用户显示过多消息框。如果尝试显示的消息框数超出特定时间范围内允许的数量,会导致消息框被丢弃。 |
#### STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS 变更 ID :288912692 默认状态 :对以 Android 16(API 级别 36)或更高版本为目标平台的应用处于启用状态。 启用后,当应用返回到有效生命周期时,系统会立即执行最多一次错过的 scheduleAtFixedRate 执行。 如需详细了解此变更,请参阅 Android 16 行为变更页面中关于固定速率工作调度优化的部分。 |
#### UNIVERSAL_RESIZABLE_BY_DEFAULT 变更 ID :357141415 默认状态 :对以 Android 16(API 级别 36)或更高版本为目标平台的应用处于启用状态。 启用后,系统会在大屏设备(宽度大于 600dp 的屏幕)上忽略应用屏幕方向、尺寸调整和宽高比限制。 如需详细了解此变更,请参阅 Android 16 行为变更页面中关于自适应布局的部分。 |
#### USE_EXPERIMENTAL_COMPONENT_ALIAS 变更 ID :196254758 默认状态 :对所有应用都处于停用状态。 启用后,系统将允许"android"软件包使用组件别名。 |
兼容性框架变更 (Android 15)
以下是您可以使用兼容性框架工具进行的操作:
- 在不实际更改应用的 targetSdkVersion 的情况下测试针对性的变更。您可以使用切换开关强制启用特定的针对性行为变更,以评估对现有应用的影响。
- 仅针对特定变更进行测试。您可以使用切换开关停用除要测试的变更之外的所有针对性变更,而不必一次处理所有针对性变更。
- 通过 adb 管理切换开关。您可以使用 adb 命令在自动测试环境中启用和停用可切换的变更。
- 使用标准变更 ID 更快地进行调试。每个可切换的变更都具有唯一 ID 和名称,可用于在日志输出中快速调试根本原因。
此部分的列表中介绍了 Android 15 相关变更的兼容性框架中包含的可切换变更,以及有助于进行常规应用测试的可切换变更。
| Android 15 兼容性框架中包含的可切换变更 |
|---|
#### CAMERA_MIC_INDICATORS_NOT_PRESENT 变更 ID :162547999 默认状态 :对所有应用都处于停用状态。 表示此设备支持摄像头和麦克风指示灯。如果存在该变更 ID,值将为 false,因为如果不存在,CompatChanges#isChangeEnabled 方法会返回 true。 |
#### CHECK_PARAMS_IN_IS_SESSION_CONFIGURATION_SUPPORTED 变更 ID :320741775 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,isSessionConfigurationSupported 还会检查会话参数的兼容性(如果 HAL 支持)。 |
#### DEFAULT_RESCIND_BAL_PRIVILEGES_FROM_PENDING_INTENT_CREATOR 变更 ID :296478951 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,PendingIntent 的创建者默认会阻止后台 activity 启动。 如需详细了解此变更,请参阅 Android 15 行为变更页面中与安全后台 activity 启动有关的部分。 |
#### DEPRECATE_UI_FONT 变更 ID :279646685 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,当应用在搭载 Android 15 或更高版本的设备上运行时,elegantTextHeight TextView 属性默认变为 true,从而将默认使用的紧凑型字体替换为更易于阅读的字体,以用于一些具有较大垂直指标的脚本。 如需详细了解此变更,请参阅 Android 15 行为变更页面中关于 elegantTextHeight 属性默认值为 true 的部分。 |
#### DOWNSCALED 变更 ID :168419799 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用缩小缓冲区的变更的把关程序。启用此变更可应用以下缩放比例: * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最大缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_70),则系统会使用 80%。 如果同时启用此变更和 DOWNSCALED_INVERSE,则 DOWNSCALED_INVERSE 优先,并且缩放比例会反向应用。 |
#### DOWNSCALED_INVERSE 变更 ID :273564678 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用反向缩小缓冲区的变更的把关程序。启用此变更后,系统可以反向应用以下缩放比例(即,分辨率会向上缩放): * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最小缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_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% 的显示屏上运行。 |
#### DO_NOT_CLONE_IN_ARRAYS_AS_LIST 变更 ID :202956589 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,在使用 Arrays.asList(...).toArray() 时,所得数组的组件类型现在是 Object,而不是底层数组元素的类型。因此,以下代码会抛出 ClassCastException: String[] elements = (String[]) Arrays.asList("one", "two").toArray(); 在这种情况下,为了在生成的数组中保留 String 作为组件类型,您可以改用 Collection.toArray(Object[]): String[] elements = Arrays.asList("two", "one").toArray(new String[0]); 如需详细了解此变更,请参阅 Android 15 行为变更页面中有关 OpenJDK API 变更的部分。 |
#### ENABLE_BUNDLE_LAUNCH_ACTIVITY_ITEM 变更 ID :324203798 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,为防止任何现有应用因非 SDK 用法的 ClientTransaction#getActivityToken() 而出现应用兼容性问题,仅允许捆绑 LaunchActivityItem。 |
#### ENABLE_MATCH_LOCAL_NETWORK 变更 ID :319212206 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,应用默认会从本地网络接收网络回调。以 Android 14(API 级别 34)或更低版本为目标平台的应用仍需向 NetworkRequest 的 NetworkCapabilities 添加 NetworkCapabilities.NET_CAPABILITY_LOCAL_NETWORK,才能从本地网络接收 ConnectivityManager.NetworkCallback。 |
#### ENABLE_STRICT_FORMATTER_VALIDATION 变更 ID :270674727 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,在使用 String.format() 和 Formatter.format() API 时,对实参索引、标志、宽度和精度的验证会更加严格。 如需详细了解此变更,请参阅 Android 15 行为变更页面中有关 OpenJDK API 变更的部分。 |
#### ENFORCE_EDGE_TO_EDGE 变更 ID :309578419 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,在搭载 Android 15 或更高版本的设备上,应用默认会以无边框模式显示。 如需详细了解此变更,请参阅 Android 15 行为变更页面中有关全屏强制执行的部分。 |
#### ENFORCE_STRICT_QUERY_BUILDER 变更 ID :143231523 默认状态 :对所有应用都处于停用状态。 启用后,SQLiteQueryBuilder 会根据恶意参数验证所有 CalendarProvider2 查询选择。 |
#### FGS_BOOT_COMPLETED_RESTRICTIONS 变更 ID :296558535 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,禁止从 BOOT_COMPLETED 广播启动前台服务(以下类型除外): * ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION * ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE * ServiceInfo.FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING * ServiceInfo.FOREGROUND_SERVICE_TYPE_HEALTH * ServiceInfo.FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED * ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE 如需详细了解此变更,请参阅 Android 15 行为变更页面中与 BOOT_COMPLETED 广播接收器启动前台服务有关的限制部分。 |
#### FGS_INTRODUCE_TIME_LIMITS 变更 ID :317799821 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,某些类型的前台服务会有时间限制。如果违规类型的前台服务未在分配的时间限制内停止,则会收到使用 Service.onTimeout(int, int) 的回调,然后必须在几秒内停止。如果应用未能做到这一点,系统会将其声明为 ANR。 如需详细了解此变更,请参阅 Android 15 行为变更页面中有关数据同步和媒体处理前台服务类型的超时行为的部分。 |
#### FGS_SAW_RESTRICTIONS 变更 ID :319471980 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,除非系统警报窗口已具有系统叠加层窗口,否则会针对所有类型停用系统警报窗口中的前台服务后台启动。 如需详细了解此变更,请参阅 Android 15 行为变更页面中与应用持有 SYSTEM_ALERT_WINDOW 权限时启动前台服务有关的限制部分。 |
#### 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 默认状态 :对所有应用都处于停用状态。 在应用中启用采样原生内存 bug 检测。 如需详细了解如何使用 GWP-ASan,请参阅 GWP-ASan 指南。 |
#### IS_DEVICE_OWNER_USER_AWARE 变更 ID :307233716 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,isDeviceOwnerApp(String) 方法将使用上下文中所含的用户。对于以 Android 14(API 级别 34)或更低版本为目标平台的应用,将使用调用进程的用户 (Process.myUserHandle())。 |
#### MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES 变更 ID :308670109 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,应用将无法再更改设备上"请勿打扰"(DND) 的全局状态或政策(无论是通过修改用户设置还是关闭"请勿打扰"模式)。应用必须提供 AutomaticZenRule,系统会根据现有的"最严格的政策胜出"方案将其合并为全局政策。 如需详细了解此变更,请参阅 Android 15 行为变更页面中关于应用何时可以修改"请勿打扰"模式的全局状态的变更的部分。 |
#### 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。 |
#### OVERRIDE_ANY_ORIENTATION 变更 ID :265464455 默认状态 :对所有应用都处于停用状态。 启用后,此变更允许应用以下屏幕方向替换,无论 activity 请求的屏幕方向如何: * OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE * OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR * OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT |
#### OVERRIDE_ANY_ORIENTATION_TO_USER 变更 ID :310816437 默认状态 :对所有应用都处于停用状态。 启用后,启用 SCREEN_ORIENTATION_USER,该属性会替换 activity 请求的任何屏幕方向。如果启用了此替换项,则可以替换固定屏幕方向的应用,使其在大屏设备上全屏显示。ignoreOrientationRequest |
#### OVERRIDE_CAMERA_COMPAT_DISABLE_FREEFORM_WINDOWING_TREATMENT 变更 ID :314961188 默认状态 :对所有应用都处于停用状态。 启用后,在自由窗口模式下,对于固定屏幕方向的应用,系统会从相机兼容性处理中排除应用了该替换项的软件包。 在自由窗口模式下,兼容性处理通过以下方式模拟在纵向设备上运行:在应用窗口中添加信箱模式,并将相机特征更改为应用在纵向设备中通常预期的特征:后置摄像头和前置摄像头的传感器旋转角度分别为 90 度和 270 度,并将显示旋转角度设置为 0。 使用此标志可针对无法很好地响应处理的应用停用兼容性处理。 |
#### OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK 变更 ID :191514214 默认状态 :对所有应用都处于停用状态。 启用后,此变更会强制使应用该变更的软件包:忽略 android:resizeableActivity 的当前值,以 Android 6.0(API 级别 23)或更低版本为目标,并将该 activity 视为无法调整尺寸。在这种情况下,鉴于当前显示屏旋转情况,摄像头画面旋转和剪裁的值仅取决于所需的补偿值。 |
#### OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS 变更 ID :189229956 默认状态 :对所有应用都处于停用状态。 启用后,此变更会强制使应用该变更的软件包替换默认的摄像头画面旋转和剪裁行为,并始终返回 CaptureRequest.SCALER_ROTATE_AND_CROP_NONE。 |
#### OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION 变更 ID :316897322 默认状态 :对所有应用都处于停用状态。 启用后,可确保用户在启动 MediaProjection 会话时可以选择捕获单个应用或整个屏幕,从而替换 MediaProjectionConfig#createConfigForDefaultDisplay 的使用。 |
#### 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_LAYOUT_IN_DISPLAY_CUTOUT_MODE 变更 ID :332679525 默认状态 :对所有应用都处于停用状态。 启用后,会覆盖刘海屏模式下的布局行为。仅当未强制执行全屏显示时,此设置才会生效。 |
#### OVERRIDE_MIN_ASPECT_RATIO 变更 ID :174042980 默认状态 :对所有应用都处于停用状态。 此变更是所有强制采用指定最小宽高比的变更的把关程序。启用此变更可应用以下最小宽高比: * OVERRIDE_MIN_ASPECT_RATIO_LARGE * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM * OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 为应用软件包启用此变更后,系统会将应用清单文件中指定的最小宽高比替换为已启用的最大宽高比(除非应用清单文件中指定的值更高)。 |
#### 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_ONLY_FOR_CAMERA 变更 ID :325586858 默认状态 :对所有应用都处于停用状态。 启用后,限制强制应用指定最小宽高比的处理,以便仅在应用连接到相机时应用这些处理。 |
#### OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 变更 ID :203647190 默认状态 :对所有应用均启用。 如果同时还启用了 OVERRIDE_MIN_ASPECT_RATIO,则此变更会限制有以下作用的任何其他变更:强制将相应 activity 的最小宽高比设为某个值(例如 OVERRIDE_MIN_ASPECT_RATIO_LARGE 和 OVERRIDE_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。 |
#### PARSE_CONTENT_DISPOSITION_USING_RFC_6266 变更 ID :319400769 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,允许解析符合 RFC 6266 的 Content-Disposition 标头。具体而言,这有助于解析可以使用不同字符编码的 filename* 值。 |
#### RATE_LIMIT_TOASTS 变更 ID :174840628 默认状态 :无法切换此变更的状态。它只由兼容性框架记录。 对 Toast.show() 调用的次数施加调用频率限制,防止在有限时间内向用户显示过多消息框。如果尝试显示的消息框数超出特定时间范围内允许的数量,会导致消息框被丢弃。 |
#### STREAM_INT_DIFFERS_FROM_NEXT_INT 变更 ID :308103782 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,Random.ints() 方法现在返回的数字序列与 Random.nextInt() 方法返回的数字序列不同。这是 https://bugs.openjdk.org/browse/JDK-8301574 中的更改所致。 如需详细了解此变更,请参阅 Android 15 行为变更页面中有关 OpenJDK API 变更的部分。 |
#### USE_EXPERIMENTAL_COMPONENT_ALIAS 变更 ID :196254758 默认状态 :对所有应用都处于停用状态。 启用后,系统将允许"android"软件包使用组件别名。 |
#### USE_NEW_ISO_LOCALE_CODES 变更 ID :291868760 默认状态 :对以 Android 15(API 级别 35)或更高版本为目标平台的应用处于启用状态。 启用后,希伯来语、意第绪语和印度尼西亚语的语言代码不再转换为其过时的形式(希伯来语:iw、意第绪语:ji 和印度尼西亚语:in)。 如需详细了解此变更,请参阅 Android 15 行为变更页面中有关 OpenJDK API 变更的部分。 |
兼容性框架变更 (Android 14)
以下是您可以使用兼容性框架工具进行的操作:
- 在不实际更改应用的 targetSdkVersion 的情况下测试针对性的变更。您可以使用切换开关强制启用特定的针对性行为变更,以评估对现有应用的影响。
- 仅针对特定变更进行测试。您可以使用切换开关停用除要测试的变更之外的所有针对性变更,而不必一次处理所有针对性变更。
- 通过 adb 管理切换开关。您可以使用 adb 命令在自动测试环境中启用和停用可切换的变更。
- 使用标准变更 ID 更快地进行调试。每个可切换的变更都具有唯一 ID 和名称,可用于在日志输出中快速调试根本原因。
兼容性框架中包含的行为变更
此部分的列表中介绍了 Android 14 中的兼容性框架包含的可切换变更。
| Android 14 兼容性框架中包含的可切换变更 |
|---|
#### ACCESS_SHARED_IDENTITY 变更 ID :259743961 默认状态 :对所有应用均启用。 如果启动应用通过使用 ActivityOptions 的实例启动此 activity 并调用 ActivityOptions.setShareIdentityEnabled(boolean)(值为 true)选择共享其身份,或者如果启动的 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 默认状态 :对所有应用都处于停用状态。 表示此设备支持摄像头和麦克风指示灯。如果存在该变更 ID,值将为 false,因为如果不存在,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;如果 Surface 在分离 Image 时被丢弃,则相应的原生辅助方法会抛出 RuntimeException。 这种之前未记录的异常行为会持续到 Android 13(API 级别 33)。 在 Android 13(API 级别 33)之后,原生辅助方法仅会按照文档抛出 IllegalStateExceptions。 启用此更改后,#detachImage 仅在分离映像的过程中遇到错误时抛出 IllegalStateException。对于以 Android 13(API 级别 33)及更低版本为目标平台的应用,其行为保持不变。 |
#### DOWNSCALED 变更 ID :168419799 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用缩小缓冲区的变更的把关程序。启用此变更可应用以下缩放比例: * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最大缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_70),则系统会使用 80%。 如果同时启用此变更和 DOWNSCALED_INVERSE,则 DOWNSCALED_INVERSE 优先,并且缩放比例会反向应用。 |
#### DOWNSCALED_INVERSE 变更 ID :273564678 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用反向缩小缓冲区的变更的把关程序。启用此变更后,系统可以反向应用以下缩放比例(即,分辨率会向上缩放): * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最小缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_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 默认状态 :对所有应用都处于停用状态。 在应用中启用采样原生内存 bug 检测。 如需详细了解如何使用 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 和待处理 intent 有关的限制部分。 |
#### MEDIA_PROJECTION_PREVENTS_REUSING_CONSENT 变更 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。 |
#### OVERRIDE_ANY_ORIENTATION 变更 ID :265464455 默认状态 :对所有应用都处于停用状态。 启用后,此变更允许应用以下屏幕方向替换,无论 activity 请求的屏幕方向如何: * OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE * OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR * OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT |
#### OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK 变更 ID :191514214 默认状态 :对所有应用都处于停用状态。 启用后,此变更会强制使应用该变更的软件包:忽略 android:resizeableActivity 的当前值,以 Android 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_LARGE * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM * OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 为应用软件包启用此变更后,系统会将应用清单文件中指定的最小宽高比替换为已启用的最大宽高比(除非应用清单文件中指定的值更高)。 |
#### 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_LARGE 和 OVERRIDE_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() 调用的次数施加调用频率限制,防止在有限时间内向用户显示过多消息框。如果尝试显示的消息框数超出特定时间范围内允许的数量,会导致消息框被丢弃。 |
#### 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)及更高版本为目标平台的应用,要求应用在安排具有连接约束条件的作业时,同时指定 INTERNET 和 ACCESS_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"软件包使用组件别名。 |
兼容性框架变更 (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 默认状态 :对所有应用都处于停用状态。 表示此设备支持摄像头和麦克风指示灯。如果存在该变更 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_COMPLETED 和 BOOT_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 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用缩小缓冲区的变更的把关程序。启用此变更可应用以下缩放比例: * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最大缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_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_EXPORTED 或 Context.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 添加到 Activity 或 ContextWrapper.getBaseContext(),而不是始终添加到 getApplicationContext()。 |
#### OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK 变更 ID :191513214 默认状态 :对所有应用都处于停用状态。 启用后,此变更 ID 会强制使应用该变更的软件包:忽略 android:resizeableActivity 的当前值,以 Android 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 * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM * OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 为应用软件包启用此变更后,系统会将应用清单文件中指定的最小宽高比替换为已启用的最大宽高比(除非应用清单文件中指定的值更高)。 |
#### 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_LARGE 和 OVERRIDE_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"软件包使用组件别名。 |
兼容性框架变更 (Android 12)
以下是您可以使用兼容性框架工具进行的操作:
- 在不实际更改应用的 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,我们重复使用该 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 默认状态 :对所有应用都处于停用状态。 表示此设备支持摄像头和麦克风指示灯。如果存在该变更 ID,值将为 false,因为如果不存在,CompatChanges#isChangeEnabled 方法会返回 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)及更高版本为目标平台的客户端应用,如果它们处于已被拒绝授权状态,并尝试向 nanoapp 发送消息,则系统会抛出 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 默认状态 :对所有应用都处于停用状态。 此变更是所有按应用缩小缓冲区的变更的把关程序。启用此变更可应用以下缩放比例: * DOWNSCALE_30 * DOWNSCALE_35 * DOWNSCALE_40 * DOWNSCALE_45 * DOWNSCALE_50 * DOWNSCALE_55 * DOWNSCALE_60 * DOWNSCALE_65 * DOWNSCALE_70 * DOWNSCALE_75 * DOWNSCALE_80 * DOWNSCALE_85 * DOWNSCALE_90 为某个应用软件包启用此变更后,系统会按照已启用的最大缩放比例强制调整该应用的大小。例如,如果同时启用了 80% 和 70%(DOWNSCALE_80 和 DOWNSCALE_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)及更高版本为目标平台的应用,会为查询和通知调用状态(例如 TelecomManager#getCallState、TelephonyManager.getCallStateForSubscription() 和 TelephonyCallback.CallStateListener)的 API 启用 READ_PHONE_STATE 保护。 |
#### ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION 变更 ID :183407956 默认状态 :对以 Android 12(API 级别 31)或更高版本为目标平台的应用处于启用状态。 对于以 Android 12(API 级别 31)及更高版本为目标平台的应用,请在 getPhoneAccount(PhoneAccountHandle) 上启用 READ_PHONE_NUMBERS 或 READ_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_ALARMS 变更 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)及更高版本为目标平台的应用,请在设备变为 non-interactive 时完成 InputConnection。 如果由当前的 input method 启用,则每当设备变为非交互状态时,当前输入连接将为 finished。 如果未启用,当设备变为非交互式状态时,当前输入连接将被静默停用,并且当设备再次变为交互式状态时,将分派 onFinishInput() 和 onStartInput() 对。 |
#### 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 默认状态 :对所有应用都处于停用状态。 强制使应用该变更的软件包可调整显示尺寸。我们只允许在全屏窗口模式下调整显示尺寸,但不强制应用进入可调整显示尺寸的多窗口模式。 |
#### 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)及更高版本为目标平台的应用,在 BackupManager 中 isBackupServiceActive() 所需的 BACKUP 权限在服务端而非客户端强制执行。 |
#### KEYSTORE_OPERATION_CREATION_MAY_FAIL 变更 ID :169897160 默认状态 :对所有应用都处于停用状态。 启用后,根据新的剪枝策略,密钥库操作创建可能会失败。过去,密钥库运行时会假定加密操作的创建始终成功。 但是,KeyMint 后端的操作槽位数量有限。 为了保持"无限"操作槽位数顺畅运行,密钥库守护程序会在没有可用操作槽位时修剪近期最少使用的操作。因此,运行正常的操作可能会提前终止。这会导致 AndroidKeystore 容易遭受拒绝服务攻击 (DoS) 和出现意外活锁现象。例如,如果多个应用因电源管理优化而同时唤醒并尝试执行加密操作,这些应用会开始终止彼此的操作,而不会取得任何进展。 为了打破活锁并阻止 DoS 尝试,我们更改了剪枝策略,以便优先处理当前使用很少的操作槽位的客户端。因此,对于处于非活跃状态不超过 5 秒的单个操作,几乎不会受到剪枝策略的影响。仍然有一些与文件系统加密相关的操作可能会被修剪,但这种情况极为罕见。这项新剪枝策略操作带来的负面影响是,如果客户端的修剪动力低于所有现有操作,那么创建就会失败。 剪枝策略 :为了找到合适的候选项,我们会计算调用方和每项现有操作的 malus。malus 是修剪动力(调用方)或修剪阻力(现有操作)的逆。为了能够修剪操作,调用方必须找到一个满足以下条件的操作:操作的 malus 要比调用方的 malus 大。如需详细了解剪枝策略,请参阅 operation.rs 的实现。 在 Android 11(API 级别 30)及更低版本中,KeyStore2 会轮询 Keystore 守护程序以获取闲置的操作槽位。对于以 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)及更高版本为目标平台的应用,如果调用方没有 LOCATION_HARDWARE 权限,那么所有标记为低动力的 LocationRequest 对象都会抛出异常,而不是静默地丢弃请求的低动力部分。 |
#### 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。 |
#### NEVER_SANDBOX_DISPLAY_APIS 变更 ID :184838306 默认状态 :对所有应用都处于停用状态。 启用后,可防止将 Display API 沙盒应用于信箱或 SCM activity。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 为目标平台的应用无法将服务或广播接收器用作通知 trampoline。 如需详细了解此变更,请参阅无法通过服务或广播接收器创建通知 trampoline。 |
#### NULL_TELEPHONY_THROW_NO_CB 变更 ID :182185642 默认状态 :对以 Android 12(API 级别 31)或更高版本为目标平台的应用处于启用状态。 用于检查当前进程的目标 SDK 版本是否为 Android 12(API 级别 31)或更高版本。 适用于以下方法: * requestCellInfoUpdate(Executor, TelephonyManager.CellInfoCallback) * setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer) * updateAvailableNetworks(List, Executor, Consumer) * requestNumberVerification() * setSimPowerStateForSlot() |
#### OVERRIDE_MIN_ASPECT_RATIO 变更 ID :174042980 默认状态 :对所有应用都处于停用状态。 此变更是所有强制采用指定最小宽高比的变更的把关程序。启用此变更可应用以下最小宽高比: * OVERRIDE_MIN_ASPECT_RATIO_LARGE * OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 为应用软件包启用此变更后,系统会将应用清单文件中指定的最小宽高比替换为已启用的最大宽高比(除非应用清单文件中指定的值更高)。 |
#### 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 定义的中等值。 |
#### PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED 变更 ID :160794467 默认状态 :对以 Android 12(API 级别 31)或更高版本为目标平台的应用处于启用状态。 对于以 Android 12(API 级别 31)及更高版本为目标平台的应用,您必须指定应用创建的每个 PendingIntent 对象的可变性。这项额外的要求可提高应用的安全性。 如需详细了解此变更,请参阅待处理 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。现在,您可以启用此变更 ID 并使用 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。 |
兼容性框架变更 (Android 11)
本页将介绍 Android 11(API 级别 30)的兼容性框架中增加的每项会影响应用的行为变更。在准备以 Android 11 为目标平台时,请将此列表与开发者选项和 ADB 命令结合使用,以测试和调试您的应用。
ADD_CONTENT_OBSERVER_FLAGS
变更 ID:150939131
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,系统会提供一个包含整数 flags 参数的新的公共 API 重载 onChange(boolean, Uri, int)。
对于使用包含整数 userId 参数的非 SDK onChange() 重载方法的应用,该新方法是一种公共 SDK 方法。
ADMIN_APP_PASSWORD_COMPLEXITY
变更 ID:123562444
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的管理应用,每当应用设置的密码要求与当前指定的密码质量不相符时,系统就会抛出错误。例如,当密码质量设置为 DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED 时,应用将无法设置最小密码长度。在这种情况下,在尝试设置最小密码长度之前,应用应首先调用 setPasswordQuality() 方法,然后才能调用 setPasswordMinimumLength() 方法。
此外,如果以 Android 11 为目标平台的管理应用降低密码质量,任何不再适用的现有密码要求都会重置为其默认值。
APP_DATA_DIRECTORY_ISOLATION
变更 ID:143937733
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
以 Android 11 为目标平台的应用不能再访问任何应用的私有数据目录中的文件,而不管其他应用的目标 SDK 版本是什么。
如需了解详情,请参阅访问私有目录。
APN_READING_PERMISSION_CHANGE_ID
变更 ID:124107808
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,现在必须具备 Manifest.permission.WRITE_APN_SETTINGS 权限才能访问 APN 数据库。
如需详细了解此变更,请参阅限制对 APN 数据库的读取访问。
BACKGROUND_RATIONALE_CHANGE_ID
变更 ID:147316723
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
现在,应用每次在后台请求访问设备的位置信息时,都必须提供有效的理由。
如需详细了解此变更,请参阅有关如何在 Android 11 中访问后台位置信息的指南,该指南介绍了 Android 11 中与位置信息相关的隐私权变更。
CALLBACK_ON_CLEAR_CHANGE
变更 ID:119147584
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
现在每次调用 Editor.clear 时,都会使用 null 键回调 OnSharedPreferenceChangeListener.onSharedPreferenceChanged。
如需详细了解此变更,请参阅 OnSharedPreferenceChangeListener 的回调变更。
CALLBACK_ON_MORE_ERROR_CODE_CHANGE
变更 ID:130595455
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
错误代码现在针对 updateAvailableNetworks(List, Executor, Consumer) 和 setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer) 进行了扩展。
CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE
变更 ID:148180766
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
这是 startWatchingMode(String, String, AppOpsManager.OnOpChangedListener) 的细微行为变更。在进行此变更之前,系统会针对切换的操作回调。在进行此变更之后,系统会针对实际请求的操作回调;如果未指定操作,就会针对所有切换的操作回调。
CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID
变更 ID:136219221
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,只有在清单文件中将 R.attr.foregroundServiceType 分别配置为 ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA 和 ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE 时,前台服务才会获得摄像头和麦克风功能的"使用中"权限。在较低版本的 Android 系统中,前台服务会自动接收摄像头和麦克风功能。
如需详细了解此变更,请参阅 Android 11 中的前台服务类型。
CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK
变更 ID:128611929
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
应用无法再在后台发布自定义消息框。但是,应用在后台仍然可以使用 Toast.makeText(Context, CharSequence, int) 方法及其变体发布消息框。
如需详细了解此变更,请参阅自定义消息框视图被屏蔽。
CHANGE_RESTRICT_SAW_INTENT
变更 ID:135920175
默认状态:无法切换此变更的状态。它只由兼容性框架记录。
使用 android.settings.MANAGE_APP_OVERLAY_PERMISSION 操作和 package 数据 URI 架构的 intent 不再将用户引导至应用专用屏幕以管理相关权限。相反,用户会被引导至另一个屏幕,在该屏幕中,用户可以管理所有已请求该权限的应用。
注意 :此变更适用于在 Android 11 上运行的所有应用,而无论应用的 targetSdkVersion 是什么。即使您无法开启或关闭此变更,也应测试应用与此变更的兼容性。如需详细了解此变更,请参阅 MANAGE_OVERLAY_PERMISSION intent 始终会将用户转至系统权限屏幕。
CHANGE_TEXT_TOASTS_IN_THE_SYSTEM
变更 ID:147798919
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
文本消息框现在由 SystemUI 呈现,而不是在应用内呈现。这样可防止应用规避对在后台发布自定义消息框的限制。
DEFAULT_SCOPED_STORAGE
变更 ID:149924527
默认状态:对于所有应用处于启用状态。
以 Android 11 为目标平台的所有应用现在都默认使用分区存储,并且不能再停用分区存储。
不过,无论您应用的目标 SDK 版本和清单标记值是什么,您都可以在不使用分区存储的情况下测试应用,只需关闭此变更即可。
重要提示 :关闭此变更以进行应用测试时,您还必须停用 FORCE_ENABLE_SCOPED_STORAGE(如果尚未将其停用)以恢复旧存储行为。
如需详细了解 Android 11 中分区存储的变更,请转到关于 Android 11 中 Android 存储变更的页面,请参阅分区存储部分。
EMPTY_INTENT_ACTION_CATEGORY
变更 ID:151163173
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,如果 intent 过滤器的 action 或 category 为空字符串,系统现在会抛出错误。Android 11 之前的平台中有一个错误,允许系统在这种情况下继续运行,而不抛出错误。请注意,这不包括相应属性为 null 或缺失的情况,因为在此类情况下始终都会抛出错误。
FILTER_APPLICATION_QUERY
变更 ID:135549675
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
应用现在需要先声明想要使用的软件包和 intent,然后才能获取有关设备上其他应用的详细信息。应用必须在其清单中使用 <queries> 标记进行声明。
如需详细了解如何在 Android 11 中查询安装的其他应用并与之交互,请参阅软件包可见性隐私权页面。
FORCE_ENABLE_SCOPED_STORAGE
变更 ID:值 - 132649864
默认状态:对于所有应用处于停用状态。
以 Android 11 为目标平台的所有应用现在都默认使用分区存储,并且不能再停用分区存储。
但是,如果您的应用仍以 Android 10(API 级别 29)或更低版本为目标平台,无论应用的目标 SDK 版本和清单标记值是什么,您都可以在使用分区存储的情况下测试应用,只需开启此变更即可。
重要提示 :开启此变更以进行应用测试时,您还必须启用 DEFAULT_SCOPED_STORAGE(如果尚未将其启用)。
如需详细了解 Android 11 中分区存储的变更,请转到关于 Android 11 中 Android 存储变更的页面,请参阅分区存储部分。
GET_DATA_CONNECTION_STATE_R_VERSION
变更 ID:148535736
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
检查 PreciseDataConnectionState#getDataConnectionState 的 SDK 版本。
GET_DATA_STATE_R_VERSION
变更 ID:148534348
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
检查 getDataState() 的 SDK 版本。
GET_PROVIDER_SECURITY_EXCEPTIONS
变更 ID:150935354
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11(API 级别 30)或更高版本为目标平台的应用,getProvider(String) 不再抛出任何安全异常。
GET_TARGET_SDK_VERSION_CODE_CHANGE
变更 ID:145147528
默认状态:对于以 Android 10(API 级别 29)或更高版本为目标平台的应用处于启用状态。
检查 SmsManager.sendResolverResult() 方法的 SDK 版本。
注意:此变更目前包含在兼容性框架中,但会影响先前 Android 版本的 SDK 版本检查。您可以放心地忽略它。
GWP_ASAN
变更 ID:135634846
默认状态:对于所有应用处于停用状态。
在应用中启用采样原生内存 bug 检测。
如需详细了解此变更,请参阅 GWP-ASan 指南。
HIDE_MAXTARGETSDK_P_HIDDEN_APIS
变更 ID:149997251
默认状态:对于以 Android 10(API 级别 29)或更高版本为目标平台的应用处于启用状态。
对于以 Android 10(API 级别 29)或更高版本为目标平台的应用,移除了对 Android 10(API 级别 29)的 max-target-p (greylist-max-p) 列表中所有非 SDK 接口的访问权限。
HIDE_MAXTARGETSDK_Q_HIDDEN_APIS
变更 ID:149994052
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11(API 级别 30)或更高版本为目标平台的应用,移除了对 Android 11(API 级别 30)的 max-target-q (greylist-max-q) 列表中所有非 SDK 接口的访问权限。
如需详细了解此变更,请参阅 Android 11 中现在被屏蔽的非 SDK 接口。
LISTEN_CODE_CHANGE
变更 ID:147600208
默认状态:对于以 Android 10(API 级别 29)或更高版本为目标平台的应用处于启用状态。
检查 TelephonyManager.listen(PhoneStateListener, int) 的 SDK 版本。
注意:此变更目前包含在兼容性框架中,但会影响先前 Android 版本的 SDK 版本检查。您可以放心地忽略它。
MISSING_APP_TAG
变更 ID:150776642
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,如果应用的清单文件缺少 application 或 instrumentation 标记,系统现在会抛出错误。
NATIVE_HEAP_POINTER_TAGGING
变更 ID:135754954
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,现在原生堆分配在最高有效字节中有一个非零标记。
如需了解详情,请参阅堆指针标记。
PHONE_STATE_LISTENER_LIMIT_CHANGE_ID
变更 ID:150880553
默认状态:对于所有应用处于启用状态。
对于以 Android 11 为目标平台的应用,现在对任何进程可通过 TelephonyManager.listen(PhoneStateListener, int) 注册的 PhoneStateListener 对象数量施加了限制。默认限制为 50,该值可能会因远程设备配置更新而发生变化。 当违规进程试图注册过多的监听器时,TelephonyManager.listen(PhoneStateListener, int) 会抛出 IllegalStateException,从而强制执行此限制。
PREVENT_META_REFLECTION_BLACKLIST_ACCESS
变更 ID:142365358
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
以 Android 11 为目标平台的应用不能再使用额外的反射层访问受限制的非 SDK 接口。
PROCESS_CAPABILITY_CHANGE_ID
变更 ID:136274596
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,现在可以使用 Context.BIND_INCLUDE_CAPABILITIES 标记将正在使用的功能从客户端进程传递到绑定服务。
REMOVE_ANDROID_TEST_BASE
变更 ID:133396946
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的应用,已将 android.test.base 库移除,前提是应用不依赖于 android.test.runner(因为它依赖于 android.test.base 库中的类)。
REQUEST_ACCESSIBILITY_BUTTON_CHANGE
变更 ID:136293963
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
对于以 Android 11 为目标平台的无障碍服务,现在必须在无障碍服务元数据文件中指定 FLAG_REQUEST_ACCESSIBILITY_BUTTON 标记。否则,该标记会被忽略。
如需详细了解此变更,请参阅在元数据文件中声明"无障碍"按钮使用情况。
RESOURCES_ARSC_COMPRESSED
变更 ID:132742131
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
如果以 Android 11(API 级别 30)为目标平台的应用包含压缩的 resources.arsc 文件或者如果此文件未按 4 字节边界对齐,应用将无法安装。
如需详细了解此变更,请参阅压缩的资源文件。
RESTRICT_STORAGE_ACCESS_FRAMEWORK
变更 ID:141600225
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
如果您的应用以 Android 11 为目标平台并使用存储访问框架 (SAF),您就无法再使用 ACTION_OPEN_DOCUMENT 和 ACTION_OPEN_DOCUMENT_TREE intent 操作访问某些目录。如需详细了解这些变更,请转到介绍 Android 11 中与存储相关的隐私权更新的页面,请参阅文档访问限制部分。
SELINUX_LATEST_CHANGES
变更 ID:143539591
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
此变更会控制应用对 untrusted_app_R-targetSDk SELinux 域的访问。这是兼容性框架的其中一项基础变更,可让应用在不更改其 targetSDKVersion 的情况下,切换受 targetSdkVersion 控制的其他变更的状态。因此,对于以 Android 11 为目标平台的应用,您不应停用此变更,否则应用将无法运行。
此变更不会影响使用共享用户 ID 的应用。
THROW_SECURITY_EXCEPTIONS
变更 ID:147340954
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
在 Android 11 之前,SecurityException 只会因权限错误而被 setEnabled API 抛出。在 Android 11 中,情况不再如此,SecurityException 可以因多种原因而被抛出,并且这些原因不会为调用方所知晓。
为了维持现有的 API 行为,如果不是以 Android 11 为目标平台的应用发生原来的权限失败或操作方强制执行失败,该异常会被强制转换为存在于 Android 11 之前的源代码中的 IllegalStateException。
USE_SET_LOCATION_ENABLED
变更 ID:117835097
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标平台的应用处于启用状态。
以 Android 11 为目标平台的管理应用不能再使用 DevicePolicyManager.setSecureSetting(ComponentName, String, String) 更改已弃用的 Settings.Secure.LOCATION_MODE 设置,而应改用 DevicePolicyManager.setLocationEnabled(ComponentName, boolean)。