Cambios en el marco de compatibilidad (Android 11)

En esta página, se describe cada cambio de comportamiento que afecta a las apps y que se agregó al marco de compatibilidad en Android 11 (nivel de API 30). Usa esta lista junto con las opciones para desarrolladores y los comandos de ADB para probar y depurar tu app mientras te preparas para la orientación a Android 11.

ADD_CONTENT_OBSERVER_FLAGS

ID del cambio: 150939131

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Para las apps orientadas a Android 11, hay un nuevo onChange(boolean, Uri, int) de sobrecarga de API pública que incluye un argumento flags de número entero.

Este nuevo método es una alternativa pública del SDK para las apps que usan el método onChange() de sobrecarga que no pertenece al SDK y que incluye un argumento userId de número entero.

ADMIN_APP_PASSWORD_COMPLEXITY

ID del cambio: 123562444

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las aplicaciones de administración orientadas a Android 11, se arroja un error cada vez que una app establece un requisito de contraseña que no es relevante para la calidad de la contraseña asignada actualmente. Por ejemplo, cuando la calidad de la contraseña está configurada en DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, una app no puede establecer una longitud mínima de contraseña. En este caso, antes de intentar establecer la longitud mínima de la contraseña, la app debe llamar primero al método setPasswordQuality() y, luego, a setPasswordMinimumLength().

Además, cuando una aplicación de administración orientada a Android 11 disminuye la calidad de la contraseña, se restablecen los valores predeterminados de los requisitos de contraseña existentes que ya no se aplican.

APP_DATA_DIRECTORY_ISOLATION

ID del cambio: 143937733

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Las apps orientadas a Android 11 ya no pueden acceder a los archivos de los directorios de datos privados de ninguna app, independientemente de la versión del SDK de destino de la otra app.

Para obtener más información, consulta Acceso a directorios privados.

APN_READING_PERMISSION_CHANGE_ID

ID del cambio: 124107808

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11, el acceso a la base de datos de APN ahora requiere el permiso Manifest.permission.WRITE_APN_SETTINGS.

Para obtener más información sobre este cambio, consulta Acceso de lectura restringido a la base de datos de APN.

BACKGROUND_RATIONALE_CHANGE_ID

ID del cambio: 147316723

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Ahora las apps deben proporcionar un fundamento válido cada vez que solicitan acceso a la ubicación del dispositivo en segundo plano.

Para obtener más información sobre este cambio, consulta la guía sobre Cómo acceder a la ubicación en segundo plano en Android 11, en la que se analizan los cambios de privacidad relacionados con la ubicación en Android 11.

CALLBACK_ON_CLEAR_CHANGE

ID del cambio: 119147584

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Cada vez que se llama al método Editor.clear, se realiza una devolución de llamada a OnSharedPreferenceChangeListener.onSharedPreferenceChanged con una clave null.

A fin de obtener más información sobre este cambio, consulta Cambios de devolución de llamada para OnSharedPreferenceChangeListener.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

ID del cambio: 130595455

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Ahora, se amplían los códigos de error para updateAvailableNetworks(List, Executor, Consumer) y setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer).

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

ID del cambio: 148180766

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Este es un cambio de comportamiento sutil en startWatchingMode(String, String, AppOpsManager.OnOpChangedListener). Antes de este cambio, el sistema realizaba una devolución de llamada para la operación conmutada. Después del cambio, el sistema realizará una devolución de llamada para la operación efectivamente solicitada, o todas las operaciones conmutadas si no se especifica ninguna operación.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

ID del cambio: 136219221

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11, los servicios en primer plano solo pueden acceder a la cámara y el micrófono con el dispositivo en uso cuando el atributo R.attr.foregroundServiceType está configurado como ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA y ServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE, respectivamente, en el archivo de manifiesto. En las versiones anteriores de Android, los servicios en primer plano podían acceder automáticamente a la cámara y el micrófono.

Para obtener más información sobre este cambio, consulta Tipos de servicios en primer plano en Android 11.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID del cambio: 128611929

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Las apps ya no pueden publicar avisos personalizados en segundo plano. Sin embargo, pueden seguir publicando avisos con el método Toast.makeText(Context, CharSequence, int) y sus variantes en segundo plano.

Para obtener más información sobre este cambio, consulta Bloqueo de vistas de avisos personalizados.

CHANGE_RESTRICT_SAW_INTENT

ID del cambio: 135920175

Estado predeterminado: no se puede activar ni desactivar este cambio. Solo se registra en el marco de compatibilidad.

Los intents que usan la acción android.settings.MANAGE_APP_OVERLAY_PERMISSION y el esquema de URI de datos package ya no dirigen al usuario a una pantalla específica de la app para administrar el permiso asociado. En cambio, se dirige al usuario hacia una pantalla en la que puede administrar todas las apps que solicitaron el permiso.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

ID del cambio: 147798919

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

SystemUI ahora renderiza los avisos de texto en lugar de hacerlo en la app. Esto evita que las apps eludan las restricciones para publicar avisos personalizados en segundo plano.

DEFAULT_SCOPED_STORAGE

ID del cambio: 149924527

Estado predeterminado: habilitado para todas las apps.

Ahora, todas las apps orientadas a Android 11 usan el almacenamiento específico de forma predeterminada, y ya no pueden inhabilitarlo.

Sin embargo, puedes desactivar este cambio para probar tu app sin almacenamiento específico, independientemente de la versión del SDK de destino de la app ni los valores de las marcas del manifiesto.

Para obtener más información sobre los cambios en el almacenamiento específico de Android 11, consulta la sección Almacenamiento específico en la página sobre los cambios en el almacenamiento de Android en Android 11.

EMPTY_INTENT_ACTION_CATEGORY

ID del cambio: 151163173

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En las apps orientadas a Android 11, ahora el sistema muestra un error si la action o la category de un filtro de intent es una string vacía. Un error en la plataforma antes de Android 11 permitía que pasara este caso sin arrojar una alerta. Ten en cuenta que no incluye los casos en los que el atributo es nulo o no está, que siempre arrojaron un error.

FILTER_APPLICATION_QUERY

ID del cambio: 135549675

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Ahora, las apps deben declarar los paquetes y los intents que van a usar antes de obtener detalles sobre otras apps de un dispositivo. Se deben realizar esas declaraciones mediante la etiqueta <queries> en el manifiesto de la app.

Si deseas obtener más información sobre cómo buscar otras apps instaladas en Android 11 e interactuar con ellas, consulta la página de privacidad sobre visibilidad del paquete.

FORCE_ENABLE_SCOPED_STORAGE

ID de cambio: Valor: 132649864

Estado predeterminado: inhabilitado para todas las apps.

Ahora, todas las apps orientadas a Android 11 usan el almacenamiento específico de forma predeterminada, y ya no pueden inhabilitarlo.

Sin embargo, si tu app aún se orienta a Android 10 (API nivel 29) o versiones anteriores, puedes activar este cambio para probar la app con almacenamiento específico, sin importar los valores de las marcas del manifiesto ni la versión del SDK de destino.

Para obtener más información sobre los cambios en el almacenamiento específico de Android 11, consulta la sección Almacenamiento específico en la página sobre los cambios en el almacenamiento de Android en Android 11.

GET_DATA_CONNECTION_STATE_R_VERSION

ID del cambio: 148535736

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Sirve para comprobar la versión del SDK de PreciseDataConnectionState#getDataConnectionState.

GET_DATA_STATE_R_VERSION

ID del cambio: 148534348

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Sirve para comprobar la versión del SDK de getDataState().

GET_PROVIDER_SECURITY_EXCEPTIONS

ID del cambio: 150935354

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11 (API nivel 30) o versiones posteriores, getProvider(String) ya no arroja excepciones de seguridad.

GET_TARGET_SDK_VERSION_CODE_CHANGE

ID del cambio: 145147528

Estado predeterminado: habilitado para apps orientadas a Android 10 (nivel de API 29) o versiones posteriores.

Sirve para verificar la versión del SDK del método SmsManager.sendResolverResult().

GWP_ASAN

ID del cambio: 135634846

Estado predeterminado: inhabilitado para todas las apps.

Habilita la detección de errores en la memoria nativa de muestra en las apps.

Para obtener más información sobre este cambio, consulta la guía de GWP-ASan.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

ID del cambio: 149997251

Estado predeterminado: habilitado para apps orientadas a Android 10 (nivel de API 29) o versiones posteriores.

En el caso de las apps orientadas a Android 10 (nivel de API 29) o versiones posteriores, se quita el acceso a todas las interfaces que no pertenecen al SDK y que forman parte de la lista max-target-p (greylist-max-p) para Android 10 (nivel de API 29).

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

ID del cambio: 149994052

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11 (nivel de API 30) o versiones posteriores, quita el acceso a todas las interfaces que no pertenecen al SDK y que forman parte de la lista max-target-q (greylist-max-q) para Android 11 (nivel de API 30).

Para obtener más información sobre este cambio, consulta Interfaces que no pertenecen al SDK y que ahora están bloqueadas en Android 11.

LISTEN_CODE_CHANGE

ID del cambio: 147600208

Estado predeterminado: habilitado para apps orientadas a Android 10 (nivel de API 29) o versiones posteriores.

Sirve para comprobar la versión del SDK para TelephonyManager.listen(PhoneStateListener, int).

MISSING_APP_TAG

ID del cambio: 150776642

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En las apps orientadas a Android 11, ahora se genera un error cuando el archivo de manifiesto de una app no tiene la etiqueta application o instrumentation.

NATIVE_HEAP_POINTER_TAGGING

ID del cambio: 135754954

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11, las asignaciones de montones nativos ahora tienen una etiqueta distinta de cero en el byte más importante.

Para obtener más información, consulta Cómo etiquetar punteros de pila.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

ID del cambio: 150880553

Estado predeterminado: habilitado para todas las apps.

En las apps orientadas a Android 11, ahora hay un límite en la cantidad de objetos PhoneStateListener que cualquier proceso puede registrar mediante TelephonyManager.listen(PhoneStateListener, int). El límite predeterminado es 50, que se puede cambiar en las actualizaciones de la configuración del dispositivo remoto. Este límite se aplica mediante un IllegalStateException que arroja TelephonyManager.listen(PhoneStateListener, int) cuando el proceso ofensivo intenta registrar demasiados objetos de escucha.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

ID del cambio: 142365358

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Las apps orientadas a Android 11 ya no pueden usar una capa adicional de reflexión para acceder a interfaces restringidas que no pertenecen al SDK.

PROCESS_CAPABILITY_CHANGE_ID

ID del cambio: 136274596

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11, ahora se puede usar la marca Context.BIND_INCLUDE_CAPABILITIES para pasar funciones en uso del proceso del cliente a un servicio vinculado.

REMOVE_ANDROID_TEST_BASE

ID del cambio: 133396946

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de las apps orientadas a Android 11, se quitó la biblioteca android.test.base si la app no depende de android.test.runner (ya que depende de las clases de la biblioteca android.test.base).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID del cambio: 136293963

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

En el caso de los servicios de accesibilidad orientados a Android 11, ahora se debe especificar la marca FLAG_REQUEST_ACCESSIBILITY_BUTTON en el archivo de metadatos del servicio de accesibilidad. De lo contrario, se ignorará la marca.

Para obtener más información sobre este cambio, consulta Cómo declarar el uso del botón de accesibilidad en el archivo de metadatos.

RESOURCES_ARSC_COMPRESSED

ID del cambio: 132742131

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Las apps orientadas a Android 11 (nivel de API 30) no se pueden instalar si tienen un archivo resources.arsc comprimido o si este no está alineado con un límite de 4 bytes.

Para obtener más información sobre este cambio, consulta Archivos de recursos comprimidos.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

ID del cambio: 141600225

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Si la app está orientada a Android 11 y usa el marco de trabajo de acceso al almacenamiento (SAF), ya no podrás acceder a determinados directorios con las acciones de intent ACTION_OPEN_DOCUMENT y ACTION_OPEN_DOCUMENT_TREE. Para obtener más información acerca de estos cambios, consulta la sección sobre restricciones de acceso a documentos en la página que trata sobre las actualizaciones de privacidad relacionadas con el almacenamiento en Android 11.

SELINUX_LATEST_CHANGES

ID del cambio: 143539591

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Este cambio restringe el acceso de las apps al dominio untrusted_app_R-targetSDk SELinux. Este es uno de los cambios fundamentales del marco de compatibilidad, que permite que las apps activen o desactiven otros cambios restringidos por targetSdkVersion sin que se modifique la targetSDKVersion de las apps. Por este motivo, no debes inhabilitar este cambio para una app orientada a Android 11, ya que no funcionará la app.

Este cambio no afecta a las apps que usan un ID de usuario compartido.

THROW_SECURITY_EXCEPTIONS

ID del cambio: 147340954

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Antes de Android 11, las API setEnabled solo arrojaban una SecurityException ante un error de permiso. En Android 11, esto ya no ocurre, y se puede arrojar una SecurityException por varios motivos, ninguno de los cuales se expone al emisor.

Para mantener el comportamiento existente de la API, si se produce un error de permiso heredado o de aplicación de un agente en una app que no está orientada a Android 11, se mostrará de manera forzosa la excepción IllegalStateException que existía en la fuente antes de Android 11.

USE_SET_LOCATION_ENABLED

ID del cambio: 117835097

Estado predeterminado: habilitado para apps orientadas a Android 11 (API nivel 30) o versiones posteriores.

Las apps de administración orientadas a Android 11 ya no pueden usar DevicePolicyManager.setSecureSetting(ComponentName, String, String) para cambiar la configuración obsoleta de Settings.Secure.LOCATION_MODE. En cambio, deben usar DevicePolicyManager.setLocationEnabled(ComponentName, boolean).