此页面描述了在 Android 11(API 级别 30)中添加到兼容性框架中的每个影响应用的行为变更。将此列表与开发者选项和 ADB 命令结合使用,在准备以 Android 11 为目标时测试和调试您的应用。
ADD_CONTENT_OBSERVER_FLAGS
变更 ID: 150939131
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标的应用已启用。
对于以 Android 11 为目标的应用,有一个新的公共 API 重载onChange(boolean, Uri, int)
,其中包含一个整数flags
参数。
此新方法是使用包含整数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 的应用,访问 APN 数据库现在需要 Manifest.permission.WRITE_APN_SETTINGS
权限。
要了解有关此更改的更多信息,请参阅 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
时,现在会向 OnSharedPreferenceChangeListener.onSharedPreferenceChanged
回调,键值为 null
。
要了解有关此更改的更多信息,请参阅 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。但是,应用仍然可以使用 Toast.makeText(Context, CharSequence, int)
方法及其变体在后台发布 Toast。
要了解有关此更改的更多信息,请参阅 自定义 Toast 视图被阻止。
CHANGE_RESTRICT_SAW_INTENT
变更 ID: 135920175
默认状态:此更改无法切换。兼容性框架仅记录它。
使用 android.settings.MANAGE_APP_OVERLAY_PERMISSION
操作和 package
数据 URI 方案的 Intent 不再将用户定向到用于管理相关权限的特定应用屏幕。相反,用户会被定向到一个屏幕,他们可以在该屏幕上管理所有请求该权限的应用。
CHANGE_TEXT_TOASTS_IN_THE_SYSTEM
变更 ID: 147798919
默认状态:对于以 Android 11(API 级别 30)或更高版本为目标的应用已启用。
文本 Toast 现在由 SystemUI 而不是应用内呈现。这可以防止应用绕过在后台发布自定义 Toast 的限制。
DEFAULT_SCOPED_STORAGE
变更 ID: 149924527
默认状态:对所有应用启用。
所有目标平台为 Android 11 的应用现在默认使用 作用域存储,并且不能再 选择退出作用域存储。
但是,您可以测试没有作用域存储的应用,无论您的应用的目标 SDK 版本和清单标志值如何,都可以通过关闭此更改来进行测试。
要了解有关 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 版本和清单标志值如何,都可以通过打开此更改来测试具有作用域存储的应用。
要了解有关 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 版本。
GWP_ASAN
变更 ID: 135634846
默认状态:对所有应用禁用。
启用应用中的采样本地内存错误检测。
要了解有关此更改的更多信息,请参阅 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 版本。
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,可以通过远程设备配置更新来更改。此限制使用 IllegalStateException
强制执行,当违规进程尝试注册过多侦听器时,TelephonyManager.listen(PhoneStateListener, int)
会抛出此异常。
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.runner
(因为它依赖于 android.test.base
库中的类),则已删除 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
。
使用 `setlocationEnabled` (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)
。