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.
Los campos finales estáticos ahora son inmodificables
Las apps que se ejecutan en Android 17 o versiones posteriores y que se segmentan para Android 17 o versiones posteriores no pueden cambiar los campos static final. Si una app intenta cambiar un campo static final con la reflexión, se producirá un IllegalAccessException. Si intentas modificar uno de estos campos a través de las APIs de JNI (como SetStaticLongField()), la app fallará.
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
InputConnectionpersonalizado pueden recuperar datos de selección de candidatos llamando aTextAttribute.isTextSuggestionSelected(). Luego, estas apps deben llamar aAccessibilityEvent.setTextChangeTypes()cuando envíen eventosTYPE_VIEW_TEXT_CHANGED. Las apps segmentadas para Android 17 que usan elTextViewestándar tendrán esta función habilitada de forma predeterminada. (Es decir,TextViewcontrolará 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_CHANGEDpueden llamar aAccessibilityEvent.getTextChangeTypes()para identificar la naturaleza de la modificación y ajustar sus estrategias de comentarios en consecuencia.
Privacidad
Android 17 incluye los siguientes cambios para mejorar la privacidad del usuario.
Se requiere permiso de red local para las apps segmentadas para Android 17
| ¿Está disponible para probar? (Compilación obligatoria) | Sí (Android 17 o versiones posteriores) |
|---|---|
¿Exige cambiar targetSDKVersion? (Nivel de API) |
Sí (nivel de API "CINNAMON_BUN")Consulta la documentación del atributo del manifiesto para obtener más información sobre este valor. |
Android 17 introduce el permiso de tiempo de ejecución ACCESS_LOCAL_NETWORK para proteger a los usuarios del acceso no autorizado a la red local. Dado que este permiso se incluye en el grupo de permisos NEARBY_DEVICES existente, los usuarios que ya otorgaron otros permisos NEARBY_DEVICES no recibirán un nuevo mensaje. Este nuevo requisito evita que las apps maliciosas exploten el acceso sin restricciones a la red local para realizar un seguimiento y crear huellas digitales encubiertos de los usuarios. Si declaras y solicitas este permiso, tu app podrá descubrir dispositivos en la red de área local (LAN), como dispositivos inteligentes para la casa o receptores de transmisión, y conectarse a ellos.
Las apps que se segmentan para Android 17 o versiones posteriores ahora tienen dos rutas para mantener la comunicación con los dispositivos LAN: adoptar selectores de dispositivos mediados por el sistema que preservan la privacidad para omitir el mensaje de permiso o solicitar explícitamente este nuevo permiso en el tiempo de ejecución para mantener la comunicación de la red local.
Para obtener más información, consulta la documentación sobre el permiso de red local.
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 heredadaMODE_BACKGROUND_ACTIVITY_START_ALLOWED. En cambio, debes adoptar controles detallados, comoMODE_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.
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.