Cambios de comportamiento: todas las apps

La plataforma de Android 11 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios se aplican a todas las apps cuando se ejecutan en Android 11, independientemente de la targetSdkVersion. Debes probar tu app y, luego, modificarla según corresponda para admitir estos cambios.

Asegúrate también de revisar la lista de cambios de comportamiento que solo afectan a las apps orientadas a Android 11.

Privacidad

Android 11 introduce una gran cantidad de cambios y restricciones para mejorar la privacidad del usuario. Para obtener más información, visita la página Privacidad.

Seguridad

Cómo realizar una encriptación basada en archivos después de un reinicio inalámbrico sin credenciales de usuario

Después de que el dispositivo recibe una actualización inalámbrica y se reinicia, las claves encriptadas de credencial en el almacenamiento protegido mediante credenciales estarán disponibles de inmediato para operaciones de Encriptación basada en archivos (FBE). Por lo tanto, tu app puede realizar acciones relacionadas con la encriptación basada en archivos antes de que el usuario ingrese su PIN, patrón o contraseña para desbloquear el dispositivo después del reinicio.

Los sockets SSL usan el motor SSL de Conscrypt de forma predeterminada

La implementación predeterminada del SSLSocket de Android se basa en Conscrypt. Desde Android 11, esa implementación se compila internamente sobre el SSLEngine de Conscrypt.

Asignador de seguridad reforzada Scudo

Android 11 usa el Asignador de seguridad reforzada Scudo de forma interna para brindar servicio a las asignaciones de montón. Scudo es capaz de detectar y mitigar algunos tipos de infracciones relacionadas con la seguridad de la memoria. Si ves fallas relacionadas con Scudo (por ejemplo, Scudo ERROR:) en informes de fallas por error en código nativo, consulta la documentación de solución de problemas de Scudo.

Cámara

Compatibilidad con el uso simultáneo de más de una cámara

En Android 11, se agregaron API para admitir consultas sobre el uso de más de una cámara a la vez, incluidas las cámaras frontal y posterior.

Usa los siguientes métodos para comprobar la compatibilidad con el dispositivo en el que se ejecuta tu app:

  • getConcurrentCameraIds() muestra un Set de combinaciones de ID de cámara que pueden transmitirse de forma simultánea con combinaciones de transmisión garantizadas cuando las configura el mismo proceso de aplicación.
  • isConcurrentSessionConfigurationSupported() consulta si los dispositivos de cámara pueden admitir de forma simultánea las configuraciones de sesión correspondientes.

Conectividad

Cambios en la API de Open Mobile

A partir de Android 11, la API de Open Mobile (OMAPI) tiene funciones adicionales:

  • Permite analizar reglas para privilegios de proveedor.

  • Permite personalizar el acceso de Elementos seguros incorporados (eSE) o el aprovisionamiento de un eSE mediante una o más de las siguientes opciones:

    • Permiso con privilegios del sistema
    • Identificadores de aplicación (AID) de la Regla de acceso a la aplicación principal (ARA-M) configurable
    • API del sistema para restablecer el lector de OMAPI
  • Proporciona a los lectores un indicador claro para que las apps filtren la capacidad del dispositivo.

Rendimiento y depuración

La llamada a la API de JobScheduler limita la depuración

Android 11 ofrece compatibilidad de depuración para apps a fin de identificar posibles invocaciones de la API JobScheduler que superaron determinados límites de frecuencia. Los desarrolladores pueden utilizar esta función para identificar posibles problemas de rendimiento. En el caso de las aplicaciones con el atributo debuggable del manifiesto establecido como verdadero, las invocaciones de la API de JobScheduler que superen los límites de frecuencia mostrarán RESULT_FAILURE. Los límites se establecen de manera que los casos prácticos legítimos no se vean afectados.

Limpiador del descriptor de archivo (fdsan)

Android 10 presentó fdsan (limpiador del descriptor de archivo). fdsan detecta el procesamiento incorrecto de la propiedad del descriptor de archivo, como, por ejemplo, "usar después de cerrar" y "cerrar dos veces". El modo predeterminado de fdsan cambia en Android 11. Ahora, se anula fdsan cuando se detecta un error; el comportamiento anterior era registrar una advertencia y continuar. Si observas fallas debido a fdsan en tu aplicación, consulta la fdsan documentation.

Accesibilidad

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

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 vez de eso, 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.

Interfaz de usuario

Cambios en SYSTEM_ALERT_WINDOW

Hay varios cambios en cómo se otorga el permiso SYSTEM_ALERT_WINDOW a las apps. Los cambios están diseñados para hacer que el permiso sea más intencional y proteger a los usuarios.

Algunas aplicaciones reciben el permiso SYSTEM_ALERT_WINDOW automáticamente a pedido.

Algunas clases de apps reciben el permiso SYSTEM_ALERT_WINDOW automáticamente a pedido. Estas apps no necesitan enviar ACTION_MANAGE_OVERLAY_PERMISSION para obtener el permiso SYSTEM_ALERT_WINDOW. Pueden solicitar SYSTEM_ALERT_WINDOW directamente.

Cualquier app que tenga ROLE_CALL_SCREENING y solicite SYSTEM_ALERT_WINDOW recibe el permiso automáticamente. Si la app pierde ROLE_CALL_SCREENING, pierde el permiso.

Los intents MANAGE_OVERLAY_PERMISSION siempre llevan al usuario a la pantalla de permisos del sistema

A partir de Android 11, los intents ACTION_MANAGE_OVERLAY_PERMISSION siempre llevan al usuario a la pantalla Configuración de nivel superior, donde puede otorgar o revocar los permisos SYSTEM_ALERT_WINDOW de las apps. Se ignoran todos los datos de package: del intent.

En las versiones anteriores de Android, el intent ACTION_MANAGE_OVERLAY_PERMISSION podía especificar un paquete, que llevaba al usuario a una pantalla específica de la app para administrar el permiso. Esta función ya no es compatible con Android 11. Ahora, el usuario debe seleccionar primero la aplicación a la que desea otorgar o revocar el permiso. Este cambio se implementó para proteger a los usuarios y hacer que el otorgamiento de permisos sea más intencional.

Compatibilidad con apps

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 interfaces que no pertenezcan al SDK de lista gris (según el nivel de API objetivo), utilizar cualquier método o campo que no pertenezca al SDK siempre implica un riesgo grande 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.