本页面介绍了 Android 11 (API 级别 30) 中添加到兼容性框架的每个影响应用的行为变更。在您准备将应用目标平台设为 Android 11 时,请结合开发者选项和 ADB 命令使用此列表来测试和调试您的应用。
ADD_CONTENT_OBSERVER_FLAGS
变更 ID: 150939131
默认状态:对以 Android 11 (API 级别 30) 或更高版本为目标平台的应用启用。
对于以 Android 11 为目标平台的应用,新增了一个公共 API 重载 onChange(boolean, Uri, int)
,其中包含一个整型 flags
参数。
这个新方法是公共 SDK 替代方案,适用于那些使用包含整型 userId
参数的非 SDK onChange()
重载方法的应用。
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.makeText(Context, CharSequence, int)
方法及其变体发布浮动通知。
要详细了解此变更,请参阅自定义浮动通知视图被阻止。
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) 或更高版本为目标平台的应用启用。
文本浮动通知现在由 SystemUI 而非应用内呈现。这可以防止应用规避在后台发布自定义浮动通知的限制。
DEFAULT_SCOPED_STORAGE
变更 ID: 149924527
默认状态:对所有应用启用。
所有以 Android 11 为目标平台的应用现在默认使用分区存储,并且不能再选择停用分区存储。
但是,您可以通过关闭此变更来测试不带分区存储的应用,无论您的应用目标 SDK 版本和清单标志值如何。
要详细了解 Android 11 中分区存储的变更,请参阅关于 Android 11 存储变更页面上的分区存储部分。
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 存储变更页面上的分区存储部分。
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,此限制可通过远程设备配置更新进行更改。当违规进程尝试注册过多监听器时,此限制将通过 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.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
。
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)
。