# Print output for @column tags ?> Compatibility changes - Android SDK | Android Developers

Most visited

Recently visited

ADD_CONTENT_OBSERVER_FLAGS

Value: 150939131
Enabled for apps with a targetSdkVersion of greater than 29.

Starting in Build.VERSION_CODES.R, there is a new public API overload onChange(boolean, Uri, int) that delivers a int flags argument.

Some apps may be relying on a previous hidden API that delivered a int userId argument, and this change is used to control delivery of the new int flags argument in its place.

ADMIN_APP_PASSWORD_COMPLEXITY

Value: 123562444
Enabled for apps with a targetSdkVersion of greater than 29.

For admin apps targeting R+, throw when the app sets password requirement that is not taken into account at given quality. For example when quality is set to DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, it doesn't make sense to require certain password length. If the intent is to require a password of certain length having at least NUMERIC quality, the admin should first call DevicePolicyManager.setPasswordQuality(ComponentName, int) and only then call DevicePolicyManager.setPasswordMinimumLength(ComponentName, int).

Conversely when an admin app targeting R+ lowers password quality, those requirements that stop making sense are reset to default values.

APN_READING_PERMISSION_CHANGE_ID

Value: 124107808
Enabled for apps with a targetSdkVersion of greater than 29.

Compat framework change ID for the APN db read permission change. In API level 30 and beyond, accessing the APN database will require the Manifest.permission.WRITE_APN_SETTINGS permission. This change ID tracks apps that are affected because they don't hold this permission.

APP_DATA_DIRECTORY_ISOLATION

Value: 143937733
Enabled for apps with a targetSdkVersion of greater than 29.

Apps have no access to the private data directories of any other app, even if the other app has made them world-readable.

BACKGROUND_RATIONALE_CHANGE_ID

Value: 147316723
Enabled for apps with a targetSdkVersion of greater than 29.

This change makes it so that apps are told to show rationale for asking for background location access every time they request.

CALLBACK_ON_CLEAR_CHANGE

Value: 119147584
Enabled for apps with a targetSdkVersion of greater than 29.

There will now be a callback to OnSharedPreferenceChangeListener.onSharedPreferenceChanged with a null key on Editor.clear.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

Value: 130595455
Enabled for apps with a targetSdkVersion of greater than 29.

To expand the error codes for updateAvailableNetworks(List, Executor, Consumer) and setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

Value: 148180766
Enabled for apps with a targetSdkVersion of greater than 29.

This is a subtle behavior change to startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Before this change the system called back for the switched op. After the change the system will call back for the actually requested op or all switched ops if no op is specified.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

Value: 136219221
Enabled for apps with a targetSdkVersion of greater than 29.

In targetSdkVersion R and above, foreground service has camera and microphone while-in-use capability only when the R.attr.foregroundServiceType is configured as ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA and ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE respectively in the manifest file. In targetSdkVersion below R, foreground service automatically have camera and microphone capabilities.

CAMERA_MIC_INDICATORS_NOT_PRESENT

Value: 162547999
Disabled for all apps.

A ChangeId indicating that this device supports camera and mic indicators. Will be "false" if present, because the CompatChanges#isChangeEnabled method returns true if the change id is not present.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

Value: 128611929
Enabled for apps with a targetSdkVersion of greater than 29.

Apps that post custom toasts in the background will have those blocked. Apps can still post toasts created with Toast.makeText(Context, CharSequence, int) and its variants while in the background.

CHANGE_RESTRICT_SAW_INTENT

Value: 135920175
Used for logging only.

Intents with action android.settings.MANAGE_APP_OVERLAY_PERMISSION and data URI scheme package don't go to the app-specific screen for managing the permission anymore. Instead, they redirect to this screen for managing all the apps that have requested such permission.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

Value: 147798919
Enabled for apps with a targetSdkVersion of greater than 29.

Text toasts will be rendered by SystemUI instead of in-app, so apps can't circumvent background custom toast restrictions.

CTS_SYSTEM_API_CHANGEID

Value: 149391281
Enabled for apps with a targetSdkVersion of greater than 1234.

A change ID to be used only in the CTS test for this SystemApi

DEFAULT_SCOPED_STORAGE

Value: 149924527
Enabled for all apps.

Scoped Storage is on by default. However, it is not strictly enforced and there are multiple ways to opt out of scoped storage:

  • Target Sdk < Q
  • Target Sdk = Q and has `requestLegacyExternalStorage` set in AndroidManifest.xml
  • Target Sdk > Q: Upgrading from an app that was opted out of scoped storage and has `preserveLegacyExternalStorage` set in AndroidManifest.xml
This flag is enabled for all apps by default as Scoped Storage is enabled by default. Developers can disable this flag to opt out of Scoped Storage and have legacy storage workflow. Note: FORCE_ENABLE_SCOPED_STORAGE should also be disabled for apps to opt out of scoped storage. Note: This flag is also used in com.android.providers.media.LocalCallingIdentity. Any modifications to this flag should be reflected there as well. See https://developer.android.com/training/data-storage#scoped-storage for more information.

EMPTY_INTENT_ACTION_CATEGORY

Value: 151163173
Enabled for apps with a targetSdkVersion of greater than 29.

An intent filter's actor or category is an empty string. A bug in the platform before R allowed this to pass through without an error. This does not include cases when the attribute is null/missing, as that has always been a failure.

FILTER_APPLICATION_QUERY

Value: 135549675
Enabled for apps with a targetSdkVersion of greater than 29.

Apps targeting Android R and above will need to declare the packages and intents they intend to use to get details about other apps on a device. Such declarations must be made via the <queries> tag in the manifest.

FORCE_ENABLE_SCOPED_STORAGE

Value: 132649864
Disabled for all apps.

Setting this flag strictly enforces Scoped Storage regardless of:

  • The value of Target Sdk
  • The value of `requestLegacyExternalStorage` in AndroidManifest.xml
  • The value of `preserveLegacyExternalStorage` in AndroidManifest.xml
Note: DEFAULT_SCOPED_STORAGE should also be enabled for apps to be enforced into scoped storage. Note: This flag is also used in com.android.providers.media.LocalCallingIdentity. Any modifications to this flag should be reflected there as well. See https://developer.android.com/training/data-storage#scoped-storage for more information.

GET_DATA_CONNECTION_STATE_R_VERSION

Value: 148535736
Enabled for apps with a targetSdkVersion of greater than 29.

Used for checking if the SDK version for PreciseDataConnectionState#getDataConnectionState is above Q.

GET_DATA_STATE_R_VERSION

Value: 148534348
Enabled for apps with a targetSdkVersion of greater than 29.

Used for checking if the SDK version for getDataState() is above Q.

GET_PROVIDER_SECURITY_EXCEPTIONS

Value: 150935354
Enabled for apps with a targetSdkVersion of greater than 29.

For apps targeting Android R and above, getProvider(String) will no longer throw any security exceptions.

GET_TARGET_SDK_VERSION_CODE_CHANGE

Value: 145147528
Enabled for apps with a targetSdkVersion of greater than 28.

To check the SDK version for SmsManager.sendResolverResult method.

GPS_STATUS_USAGE

Value: 144027538
Enabled for apps with a targetSdkVersion of greater than 30.

For apps targeting Android S and above, all GpsStatus API usage must be replaced with GnssStatus APIs.

GWP_ASAN

Value: 135634846
Disabled for all apps.

Enable sampled memory bug detection in the app. @see GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

Value: 149997251
Enabled for apps with a targetSdkVersion of greater than 28.

Gating access to greylist-max-p APIs.

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

Value: 149994052
Enabled for apps with a targetSdkVersion of greater than 29.

Gating access to greylist-max-q APIs.

INCOMPLETE_LOCATION

Value: 148964793
Enabled for apps with a targetSdkVersion of greater than 16.

For apps targeting Android K and above, incomplete locations may not be passed to setTestProviderLocation(String, Location).

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

Value: 158482162
Enabled for apps with a targetSdkVersion of greater than 30.

If this change is enabled, the BACKUP permission needed for isBackupServiceActive() will be enforced on the service end rather than client-side in BackupManager.

LISTEN_CODE_CHANGE

Value: 147600208
Enabled for apps with a targetSdkVersion of greater than 28.

To check the SDK version for listenForSubscriber(int, String, String, PhoneStateListener, int, boolean).

MISSING_APP_TAG

Value: 150776642
Enabled for apps with a targetSdkVersion of greater than 29.

Missing an "application" or "instrumentation" tag.

NATIVE_HEAP_POINTER_TAGGING

Value: 135754954
Enabled for apps with a targetSdkVersion of greater than 29.

Native heap allocations will now have a non-zero tag in the most significant byte. @see Tagged Pointers

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

Value: 150880553
Enabled for all apps.

This change enables a limit on the number of PhoneStateListener objects any process may register via TelephonyManager.listen(PhoneStateListener, int). The default limit is 50, which may change via remote device config updates. This limit is enforced via an IllegalStateException thrown from TelephonyManager.listen(PhoneStateListener, int) when the offending process attempts to register one too many listeners.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

Value: 142365358
Enabled for apps with a targetSdkVersion of greater than 29.

Remove meta-reflection workaround for hidden api usage for apps targeting R+. This allowed apps to obtain references to blacklisted fields and methods through an extra layer of reflection.

PROCESS_CAPABILITY_CHANGE_ID

Value: 136274596
Enabled for apps with a targetSdkVersion of greater than 29.

Flag Context.BIND_INCLUDE_CAPABILITIES is used to pass while-in-use capabilities from client process to bound service. In targetSdkVersion R and above, if client is a TOP activity, when this flag is present, bound service gets all while-in-use capabilities; when this flag is not present, bound service gets no while-in-use capability from client.

REMOVE_ANDROID_TEST_BASE

Value: 133396946
Enabled for apps with a targetSdkVersion of greater than 29.

Remove android.test.base library for apps that target SDK R or more and do not depend on android.test.runner (as it depends on classes from the android.test.base library).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

Value: 136293963
Enabled for apps with a targetSdkVersion of greater than 29.

For accessibility services targeting APIs greater than API 29, FLAG_REQUEST_ACCESSIBILITY_BUTTON must be specified in the accessibility service metadata file. Otherwise, it will be ignored.

RESOURCES_ARSC_COMPRESSED

Value: 132742131
Enabled for apps with a targetSdkVersion of greater than 29.

The resources.arsc of one of the APKs being installed is compressed or not aligned on a 4-byte boundary. Resource tables that cannot be memory mapped exert excess memory pressure on the system and drastically slow down construction of Resources objects.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

Value: 141600225
Enabled for apps with a targetSdkVersion of greater than 29.

We support restrict Storage Access Framework from Build.VERSION_CODES.R. App Compatibility flag that indicates whether the app should be restricted or not. This flag is turned on by default for all apps targeting > Build.VERSION_CODES.Q.

SELINUX_LATEST_CHANGES

Value: 143539591
Enabled for apps with a targetSdkVersion of greater than 29.

This change gates apps access to untrusted_app_R-targetSDk SELinux domain. Allows opt-in to R targetSdkVersion enforced changes without changing target SDK. Turning this change off for an app targeting R is a no-op.

Has no effect for apps using shared user id. TODO(b/143539591): Update description with relevant SELINUX changes this opts in to.

TARGETED_PENDING_INTENT

Value: 148963590
Enabled for apps with a targetSdkVersion of greater than 16.

For apps targeting Android K and above, supplied PendingIntents must be targeted to a specific package.

THROW_EXCEPTION_ON_REQUIRE_INSTALL_PACKAGES_TO_ADD_INSTALLER_PACKAGE

Value: 150857253
Enabled for apps with a targetSdkVersion of greater than 29.

Adding an installer package name to a package that does not have one set requires the INSTALL_PACKAGES permission. If the caller targets R, this will throw a SecurityException. Otherwise the request will fail silently. In both cases, and regardless of whether this change is enabled, the installer package will remain unchanged.

THROW_SECURITY_EXCEPTIONS

Value: 147340954
Enabled for apps with a targetSdkVersion of greater than 29.

Pre R a SecurityException would only be thrown by setEnabled APIs (e .g. setEnabled(String, boolean, UserHandle)) for a permission error. Since R this no longer holds true, and SecurityException can be thrown for any number of reasons, none of which are exposed to the caller.

To maintain existing API behavior, if a legacy permission failure or actor enforcement failure occurs for an app not yet targeting R, coerce it into an IllegalStateException, which existed in the source prior to R.

USE_REAL_ROOT_LOCALE

Value: 159047832
Enabled for apps with a targetSdkVersion of greater than 29.

Since Android 11, formatter classes, e.g. java.text.SimpleDateFormat, no longer provide English data when Locale.ROOT format is requested. Please use Locale.ENGLISH to format in English. Note that Locale.ROOT is used as language/country neutral locale or fallback locale, and does not guarantee to represent English locale. This flag is only for documentation and can't be overridden by app. Please use targetSdkVersion to enable the new behavior.

USE_SET_LOCATION_ENABLED

Value: 117835097
Enabled for apps with a targetSdkVersion of greater than 29.

Admin apps targeting Android R+ may not use DevicePolicyManager.setSecureSetting(ComponentName, String, String) to change the deprecated Settings.Secure.LOCATION_MODE setting. Instead they should use DevicePolicyManager.setLocationEnabled(ComponentName, boolean).