Cambios en el comportamiento: apps orientadas a Android 17 o versiones posteriores

Al igual que las versiones anteriores, Android 17 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios se aplican exclusivamente a las apps orientadas a Android 17 o versiones posteriores. Si tu app está orientada a Android 17 o versiones posteriores, debes modificarla para que admita estos comportamientos, cuando 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 17, independientemente de la targetSdkVersion de tu app.

Funcionalidad principal

Android 17 incluye los siguientes cambios que modifican o expanden varias capacidades principales del sistema Android.

Nueva implementación sin bloqueo de MessageQueue

A partir de Android 17, las apps que se segmentan para Android 17 o versiones posteriores reciben una nueva implementación sin bloqueo de android.os.MessageQueue. La nueva implementación mejora el rendimiento y reduce los fotogramas perdidos, pero puede dañar los clientes que reflejan los campos y métodos privados de MessageQueue.

Para obtener más información, incluidas las estrategias de mitigación, consulta la guía sobre el cambio de comportamiento de MessageQueue.

Accesibilidad

Android 17 incluye los siguientes cambios para mejorar la accesibilidad.

Compatibilidad con la accesibilidad de la escritura compleja con IME en el teclado físico

Esta función presenta nuevas APIs de AccessibilityEvent y TextAttribute para mejorar los comentarios por voz del lector de pantalla para la entrada de idiomas CJKV. Las apps de IME de CJKV ahora pueden indicar si se seleccionó un candidato de conversión de texto durante la composición de texto. Las apps con campos de edición pueden especificar tipos de cambios de texto cuando envían eventos de accesibilidad de texto cambiado. Por ejemplo, las apps pueden especificar que se produjo un cambio de texto durante la composición de texto o que un cambio de texto se produjo a partir de una confirmación. Esto permite que los servicios de accesibilidad, como los lectores de pantalla, proporcionen comentarios más precisos según la naturaleza de la modificación del texto.

Adopción de apps

  • Apps de IME: Cuando se configura la composición de texto en campos de edición, los IME pueden usar TextAttribute.Builder.setTextSuggestionSelected() para indicar si se seleccionó un candidato de conversión específico.

  • Apps con campos de edición: Las apps que mantienen un InputConnection personalizado pueden recuperar datos de selección de candidatos llamando a TextAttribute.isTextSuggestionSelected(). Luego, estas apps deben llamar a AccessibilityEvent.setTextChangeTypes() cuando envíen eventos TYPE_VIEW_TEXT_CHANGED. Las apps segmentadas para Android 17 que usan el TextView estándar tendrán esta función habilitada de forma predeterminada. (Es decir, TextView controlará la recuperación de datos del IME y la configuración de los tipos de cambio de texto cuando se envíen eventos a los servicios de accesibilidad).

  • Servicios de accesibilidad: Los servicios de accesibilidad que procesan eventos de TYPE_VIEW_TEXT_CHANGED pueden llamar a AccessibilityEvent.getTextChangeTypes() para identificar la naturaleza de la modificación y ajustar sus estrategias de comentarios en consecuencia.

Seguridad

Android 17 incluye las siguientes mejoras en la seguridad de los dispositivos y las apps.

Seguridad de la actividad

En Android 17, la plataforma continúa su cambio hacia una arquitectura "segura de forma predeterminada", y se introduce un conjunto de mejoras diseñadas para mitigar los exploits de gravedad alta, como el phishing, el secuestro de interacciones y los ataques de suplente confundido. Esta actualización requiere que los desarrolladores habiliten explícitamente los nuevos estándares de seguridad para mantener la compatibilidad de la app y la protección del usuario.

Estos son los impactos clave para los desarrolladores:

  • Refuerzo de BAL y habilitación mejorada: Estamos perfeccionando las restricciones de inicio de actividad en segundo plano (BAL) extendiendo las protecciones a IntentSender. Los desarrolladores deben migrar de la constante heredada MODE_BACKGROUND_ACTIVITY_START_ALLOWED. En cambio, debes adoptar controles detallados, como MODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLE, que restringe los inicios de actividad a situaciones en las que la app que realiza la llamada es visible, lo que reduce significativamente la superficie de ataque.
  • Herramientas de adopción: Los desarrolladores deben utilizar el modo estricto y las verificaciones de lint actualizadas para identificar patrones heredados y garantizar la preparación para los requisitos futuros del SDK de destino.

Protecciones de localhost

Para mejorar la seguridad de la plataforma y la privacidad del usuario, Android 17 introduce un nuevo permiso de tiempo de instalación, USE_LOOPBACK_INTERFACE. Este cambio restringe la comunicación entre apps y perfiles a través de la interfaz de bucle invertido (por ejemplo, 127.0.0.1 o ::1), que antes se permitía de forma implícita con el permiso INTERNET. En el caso de las apps que se segmentan a Android 17 o versiones posteriores, se aplican las siguientes reglas:

  • Se requiere consentimiento mutuo: La comunicación entre apps y perfiles ahora está bloqueada de forma predeterminada. Para que una conexión se realice correctamente, tanto la app emisora como la app receptora deben declarar explícitamente el permiso USE_LOOPBACK_INTERFACE en sus manifiestos.
  • Tráfico dentro de la app exento: La comunicación de bucle invertido dentro de la misma app (comunicación dentro de la app) no se ve afectada y no requiere este nuevo permiso.
  • Comportamiento del SDK de destino:
    • La app se orienta a Android 17 o versiones posteriores: El permiso se debe solicitar de forma explícita. Si falta, fallan las operaciones de socket (como la conexión TCP o el envío de UDP), y, por lo general, se devuelve un error EPERM (operación no permitida).
    • La app se segmenta para el nivel de API 36 o uno inferior: El permiso se trata como un permiso dividido en INTERNET. Las apps que se segmentan para niveles de API inferiores obtienen automáticamente este permiso si tienen INTERNET.
  • Advertencia de compatibilidad: Si una app receptora actualiza su objetivo a Android 17, pero no solicita este permiso, se rechazarán las conexiones entrantes de otras apps, incluso si la app emisora se orienta a un nivel de API inferior.

Habilita la CT de forma predeterminada

Si una app se orienta a Android 17 o versiones posteriores, la transparencia de certificados (CT) se habilita de forma predeterminada. (En Android 16, la CT está disponible, pero las apps debían habilitarla).

DCL nativa más segura: C

Si tu app se segmenta para Android 17 o versiones posteriores, la protección de carga dinámica de código (DCL) más segura que se introdujo en Android 14 para los archivos DEX y JAR ahora se extiende a las bibliotecas nativas.

Todos los archivos nativos cargados con System.load() deben marcarse como de solo lectura. De lo contrario, el sistema arroja UnsatisfiedLinkError.

Recomendamos que las apps eviten la carga dinámica de códigos siempre que sea posible, ya que de esta manera aumenta, en gran medida, el riesgo de que una app pueda verse comprometida por la inserción o la manipulación de código.

Factores de forma del dispositivo

Android 17 incluye los siguientes cambios para mejorar la experiencia del usuario en una variedad de tamaños y factores de forma de dispositivos.

Cambios en la API de la plataforma para ignorar las restricciones de orientación, cambio de tamaño y relación de aspecto en pantallas grandes (sw>=600 dp)

En Android 16, introdujimos cambios en la API de la plataforma para ignorar las restricciones de orientación, relación de aspecto y cambio de tamaño en pantallas grandes (sw >= 600 dp) para las apps que segmentan el nivel de API 36 o versiones posteriores. Los desarrolladores tienen la opción de inhabilitar estos cambios con el SDK 36, pero esta opción ya no estará disponible para las apps que segmenten Android 17 o versiones posteriores.

Para obtener más información, consulta Se ignoran las restricciones de orientación y cambio de tamaño.