Android 11 presenta herramientas para probar y depurar tu app en función de los cambios de comportamiento en la última versión de la plataforma. Estas herramientas son parte de un nuevo marco de compatibilidad que permite a los desarrolladores de apps activar y desactivar los cambios de forma individual. Usa esta flexibilidad para desactivar un solo cambio y continuar probando la app en relación con otros cambios en la plataforma, o para aislar y probar solo un cambio de comportamiento a la vez.
Se pueden activar o desactivar ambos tipos de cambios de comportamiento, incluidos los que afectan a todas las apps y los que afectan solo a las apps orientadas a Android 11.
Cómo identificar los cambios habilitados
Puedes comprobar qué cambios de comportamiento están habilitados usando las opciones para desarrolladores, logcat o un comando de ADB.
Cómo identificar los cambios habilitados mediante las opciones para desarrolladores

Figura 1: Pantalla Cambios de compatibilidad con apps en las opciones para desarrolladores
Puedes ver los cambios que están habilitados y activarlos o desactivarlos en las opciones para desarrolladores de un dispositivo. Para acceder a esas opciones, sigue estos pasos:
- Si no están habilitadas las opciones para desarrolladores, habilítalas.
- Abre la app de Configuración de tu dispositivo y navega hasta Sistema > Avanzado > Opciones para desarrolladores > Cambios de compatibilidad con apps.
- Selecciona tu app de la lista.
Por lo general, cada cambio de comportamiento pertenece a una de las siguientes dos categorías:
Cambios que afectan a todas las apps cuando se ejecutan en Android 11, sin importar la
targetSdkVersion
de la app.Estos cambios están habilitados de forma predeterminada en el marco de compatibilidad y aparecen en la IU, en la sección Cambios habilitados de manera predeterminada.
Cambios que solo afectan a las apps orientadas a Android 11.
Estos cambios están habilitados de forma predeterminada en el marco de compatibilidad si tu app está orientada a Android 11 y aparecen en la IU, en la sección Habilitados después del SDK 29.
También verás una sección en la figura 1, llamada Cambios inhabilitados de manera predeterminada. Los cambios que se incluyen en esta sección suelen ser experimentales.
Cómo identificar los cambios habilitados mediante logcat
Para cada cambio de comportamiento, la primera vez durante el proceso de la app cuando llama a la API afectada, el sistema genera un mensaje de logcat como este:
D CompatibilityChangeReporter: Compat change id reported: 141455849; UID 10265; state: ENABLED
Cada mensaje de logcat incluye la siguiente información:
- ID del cambio
- Indica qué cambio afecta a la app. Este valor se mapea a uno de los cambios de comportamiento que aparecen en la pantalla Cambios de compatibilidad con apps (consulta la figura 1). En este ejemplo,
141455849
se mapea aANONYMIZED_DEVICE_ADDRESS_CHANGE_ID
. - UID
- Indica qué app se ve afectada por el cambio.
- Estado
Indica si el cambio está afectando a la app en este momento.
El estado puede ser uno de los siguientes valores:
Estado Significado ENABLED
El cambio está habilitado actualmente y afectará el comportamiento de la app si esta usa las API que se modificaron. DISABLED
En este momento, el cambio está inhabilitado y no afectará a la app.
Nota: Si este cambio está inhabilitado porque la
targetSDKVersion
de la app está por debajo del límite obligatorio (la app no está orientada a Android 11), se habilitará el cambio de forma predeterminada cuando la app incremente latargetSDKVersion
para orientarse a Android 11.LOGGED
El cambio se registra mediante el marco de compatibilidad, pero no se puede activar ni desactivar. Aun así, es posible que siga afectando el comportamiento de la app. Consulta la descripción del cambio en la lista de cambios de comportamiento para más información. En muchos casos, estos tipos de cambios son experimentales y se pueden ignorar.
Cómo identificar los cambios habilitados mediante ADB
Ejecuta el siguiente comando de ADB para ver el conjunto completo de cambios (habilitados o inhabilitados) en todo el dispositivo:
adb shell dumpsys platform_compat
El resultado muestra la siguiente información para cada cambio:
- ID del cambio
- Un identificador único para este cambio de comportamiento. Por ejemplo,
141455849
. - Nombre
- Es el nombre de este cambio de comportamiento. Por ejemplo,
ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID
. - Criterios de targetSDKVersion
¿Con qué
targetSDKVersion
se restringe el cambio (si corresponde)?Por ejemplo, si este cambio solo está habilitado para apps orientadas al SDK versión 30 o superior, se muestra
enableAfterTargetSdk=29
. Si el cambio no está restringido portargetSDKVersion
, se muestraenableAfterTargetSdk=0
.- Anulaciones de paquetes
Es el nombre de cada paquete en el que se anuló el estado predeterminado del cambio (habilitado o inhabilitado).
Por ejemplo, si este es un cambio que está habilitado de forma predeterminada, se mostrará el nombre del paquete de la app si desactivaste el cambio mediante las opciones para desarrolladores o ADB. En este caso, el resultado sería el siguiente:
packageOverrides={com.my.package=false}
Los cambios restringidos por
targetSDKVersion
se pueden habilitar o inhabilitar de forma predeterminada, por lo que la lista de paquetes puede incluir instancias de verdadero o falso, según latargetSDKVersion
de cada app. Por ejemplo:packageOverrides={com.my.package=true, com.another.package=false}
Cuándo activar o desactivar los cambios
El propósito principal del marco de compatibilidad es brindarte control y flexibilidad cuando pruebas la app con una nueva versión de Android.
Cuándo desactivar los cambios
Los cambios que afectan a todas las apps están habilitados de forma predeterminada para una versión de plataforma específica, sin importar la targetSDKVersion
de la app. Por lo general, primero deberías probar y actualizar la app para estos cambios, a fin de asegurarte de que no afecte de manera negativa la experiencia de los usuarios de esa versión. También debes priorizar la prueba de estos cambios, porque no puedes desactivarlos si usas una compilación de actualización pública de Android (para proteger la seguridad de los usuarios finales).
Si la app está orientada a una targetSDKVersion
específica, cualquier cambio que se vea restringido por esa versión también estará habilitado de forma predeterminada.
Debido a que la app podría verse afectada por más de un cambio, puedes desactivarlos uno por uno. Si falla la app, usa este enfoque para ayudar a determinar qué cambio de plataforma dañó tu app.
Cuándo activar los cambios
Los cambios restringidos por una targetSDKVersion
específica están inhabilitados de forma predeterminada cada vez que se orienta una app a una versión del SDK anterior a la versión restringida. En algunos casos, se recomienda habilitar estos cambios.
Por ejemplo, supongamos que pruebas tu app con una serie de cambios de plataforma en la próxima targetSdkVersion
. Con las opciones para desarrolladores o los comandos de ADB, puedes habilitar y probar cada uno de los cambios restringidos, en lugar de modificar el manifiesto de la app y aceptar todos los cambios a la vez. Este control adicional te ayuda a probar los cambios de forma aislada, para evitar depurar y actualizar varias partes de tu app a la vez.
Cómo activar o desactivar los cambios
El marco de compatibilidad te permite activar o desactivar cada cambio mediante las opciones para desarrolladores o los comandos de ADB. Debido a que activar o desactivar los cambios puede hacer que falle la app o que se inhabiliten importantes cambios de seguridad, existen algunas restricciones para activar o desactivar los cambios.
Cómo activar o desactivar los cambios mediante las opciones para desarrolladores
Usa las opciones para desarrolladores si deseas activar o desactivar los cambios. Sigue estos pasos a fin de encontrar estas opciones:
- Si no están habilitadas las opciones para desarrolladores, habilítalas.
- Abre la app de Configuración de tu dispositivo y navega hasta Sistema > Avanzado > Opciones para desarrolladores > Cambios de compatibilidad con apps.
- Selecciona tu app de la lista.
En la lista de cambios, busca el cambio que desees activar o desactivar, y presiona el interruptor.
Cómo activar o desactivar cambios mediante ADB
Para activar o desactivar un cambio mediante ADB, ejecuta uno de los siguientes comandos:
adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
Pasa el CHANGE_ID
(por ejemplo, 141455849
) o el CHANGE_NAME
(por ejemplo, ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID
) y el PACKAGE_NAME
de la app.
También puedes usar el siguiente comando para restablecer el estado predeterminado de un cambio y quitar cualquier anulación que hayas establecido mediante ADB o las opciones para desarrolladores:
adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
Restricciones para activar o desactivar los cambios
De forma predeterminada, cada cambio de comportamiento está habilitado o inhabilitado. Los cambios que afectan a todas las apps están habilitados de forma predeterminada. Otros cambios están restringidos por una targetSdkVersion
. Estos cambios están habilitados de forma predeterminada cuando una app se orienta a la versión del SDK correspondiente o una superior, y están inhabilitados de forma predeterminada cuando una app se orienta a una versión del SDK inferior a la versión restringida. Al activar o desactivar un cambio, anulas su estado predeterminado.
Para evitar que se use el marco de compatibilidad con intenciones maliciosas, existen algunas restricciones sobre cuándo puedes activar o desactivar los cambios. La posibilidad de activar o desactivar un cambio depende del tipo de cambio, de si la app es depurable y del tipo de compilación que se ejecuta en el dispositivo. En la siguiente tabla, se indica cuándo puedes activar o desactivar diferentes tipos de cambios:
Tipo de compilación | App no depurable | App depurable | |
---|---|---|---|
Todos los cambios | Cambios restringidos por targetSDKVersion | Todos los demás cambios | |
Vista previa para desarrolladores o compilación Beta | No se puede activar o desactivar | Se puede activar o desactivar | Se puede activar o desactivar |
Compilación de usuario público | No se puede activar o desactivar | Se puede activar o desactivar | No se puede activar o desactivar |
Cambios de comportamiento incluidos en el marco de compatibilidad
En la lista de esta sección, se describe cada cambio de comportamiento que se incluye en el marco de compatibilidad de Android 11. Usa esta lista junto con las opciones para desarrolladores y los comandos de ADB a fin de probar y depurar tu app.
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.
Ahora, se procesan los avisos de texto en la IU del sistema y no en la app. Esto evita que las apps eludan las restricciones relacionadas con la 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 acerca de 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 en las actualizaciones de la configuración del dispositivo remoto. El límite se aplica mediante un IllegalStateException
arrojado desde 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)
.