Cambios en el comportamiento: apps orientadas a Android 11

Al igual que las versiones anteriores, Android 11 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios se aplican exclusivamente a las apps orientadas a Android 11 o versiones posteriores. Si tu app establece la targetSdkVersion como 30, debes modificarla para que admita estos comportamientos de manera correcta, según corresponda.

Asegúrate de revisar también la lista de cambios en el comportamiento que afectan a todas las apps que se ejecutan en Android 11.

Privacidad

Android 11 introduce cambios y restricciones para mejorar la privacidad del usuario, incluidos los siguientes:

Para obtener más información, visita la página Privacidad.

Seguridad

Etiquetado de punteros de montón

Detalles del cambio

Nombre del cambio: NATIVE_HEAP_POINTER_TAGGING

ID del cambio: 135754954

Cómo activarlo o desactivarlo

A medida que pruebes la compatibilidad de tu app con Android 11, podrás activar o desactivar este cambio con los siguientes comandos de ADB:

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

Obtén más información acerca del marco de compatibilidad y sobre cómo activar o desactivar los cambios en Cómo probar la compatibilidad de la app con Android 11.

Los punteros de montón ahora tienen una etiqueta distinta de cero en el byte más importante (MSB). Las aplicaciones que usan punteros de forma incorrecta, incluidas las que modifican el MSB, ahora pueden fallar o sufrir otros problemas. Este cambio es necesario para admitir dispositivos de hardware futuros con la extensión de etiquetado de memoria (MTE) de ARM habilitada. Para obtener más información, consulta Punteros etiquetados.

Para inhabilitar esta función, consulta la documentación del manifiesto de allowNativeHeapPointerTagging.

Las vistas de avisos personalizados están bloqueadas

Detalles del cambio

Nombre del cambio: CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

ID del cambio: 128611929

Cómo activarlo o desactivarlo

A medida que pruebes la compatibilidad de tu app con Android 11, podrás activar o desactivar este cambio con los siguientes comandos de ADB:

adb shell am compat enable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME
adb shell am compat disable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME

Obtén más información acerca del marco de compatibilidad y sobre cómo activar o desactivar los cambios en Cómo probar la compatibilidad de la app con Android 11.

A partir de Android 11, las vistas de avisos personalizadas dejarán de estar disponibles. Si tu app está orientada a Android 11, se bloquearán los avisos que contengan vistas personalizadas cuando se publiquen en segundo plano. Si bien no se recomienda hacerlo, las vistas personalizadas de avisos seguirán funcionando si orientas tu app a una versión anterior de Android.

En cambio, se recomienda usar barras de notificaciones cuando sea posible. Si el caso práctico de tu app te impide usar barras de notificaciones, como cuando debes enviar un mensaje al usuario mientras la app está en segundo plano, puedes usar avisos de texto, ya que no están restringidos por el cambio de comportamiento nuevo.

Para obtener más información sobre estos cambios, consulta Actualizaciones a los avisos en Android 11.

Conectividad

Acceso de lectura restringido a la base de datos del APN

Detalles del cambio

Nombre del cambio: APN_READING_PERMISSION_CHANGE_ID

ID del cambio: 124107808

Cómo activarlo o desactivarlo

A medida que pruebes la compatibilidad de tu app con Android 11, podrás activar o desactivar este cambio con los siguientes comandos de ADB:

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

Obtén más información acerca del marco de compatibilidad y sobre cómo activar o desactivar los cambios en Cómo probar la compatibilidad de la app con Android 11.

Las aplicaciones orientadas a Android 11 ahora requieren el permiso con privilegios Manifest.permission.WRITE_APN_SETTINGS para acceder a la base de datos del APN del proveedor de Telefonía o leerla. Si intentas acceder a la base de datos del APN sin este permiso, se generará una excepción de seguridad.

Accesibilidad

Cómo declarar el uso del botón de accesibilidad en el archivo de metadatos

Detalles del cambio

Nombre del cambio: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

ID del cambio: 136293963

Cómo activarlo o desactivarlo

A medida que pruebes la compatibilidad de tu app con Android 11, podrás activar o desactivar este cambio con los siguientes comandos de ADB:

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

Obtén más información acerca del marco de compatibilidad y sobre cómo activar o desactivar los cambios en Cómo probar la compatibilidad de la app con Android 11.

A partir de Android 11, tu servicio de accesibilidad no puede declarar una asociación con el botón de accesibilidad del sistema durante el tiempo de ejecución. Si agregas AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON a la propiedad flags de un objeto AccessibilityServiceInfo, el framework no pasará los eventos de devolución de llamada del botón de accesibilidad a tu servicio.

En su lugar, debes declarar la asociación del servicio de accesibilidad con el botón de accesibilidad mediante la marca flagRequestAccessibilityButton en el archivo de metadatos del servicio de accesibilidad, que, por lo general, es res/raw/accessibilityservice.xml.

Cámara

Las acciones de intents multimedia requieren la cámara predeterminada del sistema

A partir de Android 11, solo las apps de cámara ya instaladas en el sistema pueden responder a las siguientes acciones de intent:

Si hay más de una app de cámara preinstalada disponible, el sistema presenta un diálogo para que el usuario seleccione una. Si deseas que tu app use una app de cámara de terceros específica para capturar imágenes o videos, puedes configurar esos intents de forma explícita mediante un nombre de paquete o un componente para el intent.

Cómo empaquetar e instalar apps

Archivos de recursos comprimidos

Detalles del cambio

Nombre del cambio: RESOURCES_ARSC_COMPRESSED

ID del cambio: 132742131

Cómo activarlo o desactivarlo

A medida que pruebes la compatibilidad de tu app con Android 11, podrás activar o desactivar este cambio con los siguientes comandos de ADB:

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

Obtén más información acerca del marco de compatibilidad y sobre cómo activar o desactivar los cambios en Cómo probar la compatibilidad de la app con Android 11.

Las apps orientadas a Android 11 (nivel de API 30) o versiones posteriores no se pueden instalar si tienen un archivo comprimido resources.arsc o si el archivo no está alineado con un límite de 4 bytes. El sistema no puede asignar el archivo a la memoria en ninguna de estas condiciones. Las tablas de recursos que no pueden asignarse a la memoria deben leerse en un búfer en la memoria RAM, lo que genera demasiada presión de memoria en el sistema y mayor uso de la RAM del dispositivo.

Se requiere el esquema de firma de APK v2

Las apps orientadas a Android 11 (API nivel 30) que actualmente solo están firmadas con el esquema de firma de APK v1 ahora deben firmarse con el esquema de firma de APK v2 o una versión posterior. Los usuarios no pueden instalar ni actualizar apps que solo estén firmadas con el esquema de firma de APK v1 en dispositivos que ejecutan Android 11.

Para verificar que tu app esté firmada con el esquema de firma de APK v2 o posterior, puedes usar Android Studio o la herramienta apksigner en la línea de comandos.

Firebase

Firebase JobDispatcher y GCMNetworkManager

Si tu app está orientada a una API nivel 30 o posterior, las llamadas a la API de Firebase JobDispatcher y GcmNetworkManager están inhabilitadas en dispositivos que ejecutan Android 6.0 (API nivel 23) o versiones posteriores. Para obtener información sobre la migración, consulta Cómo migrar de Firebase JobDispatcher a WorkManager y Cómo migrar de GCMNetworkManager a WorkManager.

Transferencia de archivos de un dispositivo a otro

Si tu app está orientada a Android 11, ya no puedes inhabilitar la migración de archivos de un dispositivo a otro usando el atributo allowBackup. El sistema permite automáticamente esta función.

Sin embargo, puedes inhabilitar la función de copia de seguridad y restablecimiento basada en la nube de los archivos de tu app configurando el atributo allowBackup en false, incluso si tu app está orientada a Android 11.

Cambios de devolución de llamada para OnSharedPreferenceChangeListener

Detalles del cambio

Nombre del cambio: CALLBACK_ON_CLEAR_CHANGE

ID del cambio: 119147584

Cómo activarlo o desactivarlo

A medida que pruebes la compatibilidad de tu app con Android 11, podrás activar o desactivar este cambio con los siguientes comandos de ADB:

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

Obtén más información acerca del marco de compatibilidad y sobre cómo activar o desactivar los cambios en Cómo probar la compatibilidad de la app con Android 11.

Para las apps orientadas a Android 11 (nivel de API 30), cada vez que se llama a Editor.clear, se realiza una devolución de llamada a OnSharedPreferenceChangeListener.onSharedPreferenceChanged con una clave null.

Restricciones en interfaces no SDK

Android 11 incluye listas actualizadas de este tipo de interfaces que están basadas en la colaboración con desarrolladores de Android y las pruebas internas más recientes. Siempre que sea posible, nos aseguramos de que las alternativas públicas estén disponibles antes de restringir las interfaces que no pertenecen al SDK.

Si tu app no está orientada a Android 11, es posible que algunos de estos cambios no te afecten de inmediato. Sin embargo, aunque actualmente puedes usar algunas interfaces que no pertenecen al SDK (según el nivel de API al que esté orientada la app), utilizar cualquier método o campo que no pertenezca al SDK siempre implica un gran riesgo de error para tu app.

En caso de no saber con certeza si tu app usa este tipo de interfaces, puedes probarla para verificarlo. Si tu app depende de interfaces que no pertenezcan al SDK, deberías planificar una migración hacia otras alternativas que sí lo hagan. Sin embargo, sabemos que algunas apps tienen casos prácticos válidos para usarlas. Si no encuentras una alternativa al uso de una interfaz que no pertenezca al SDK para una función de tu app, deberías solicitar una nueva API pública.

Para obtener más información sobre los cambios implementados en esta versión de Android, consulta Actualizaciones a las restricciones de interfaces que no pertenecen al SDK en Android 11. Para obtener más información sobre interfaces que no pertenecen al SDK en general, consulta Restricciones en interfaces que no pertenecen al SDK.