En esta página, se describe cada cambio de comportamiento que afecta la app 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.
Los avisos de texto ahora se renderizan mediante SystemUI en lugar de dentro de la app. Esto evita que las apps eludan las restricciones de publicación de 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 y se puede cambiar con las actualizaciones de la configuración del dispositivo remoto.
Este límite se aplica de manera forzosa con 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)
.