La empresa Google ha publicado el lanzamiento de la plataforma móvil abierta Android 17. Los códigos fuente relacionados con esta nueva versión están disponibles en el repositorio Git del proyecto (rama android-17.0.0_r1). Se han preparado compilaciones de firmware para los dispositivos Pixel 6/6a/6 Pro, Pixel 7/7a/7 Pro, Pixel 8/8a/8 Pro, Pixel 9/9a/9 Pro/9 Pro XL/9 Pro Fold, Pixel 10/10 Pro/10 Pro XL/10 Pro Fold, Pixel Fold y Pixel Tablet. También hay disponibles compilaciones preliminares de firmware para dispositivos HONOR, iQOO, Lenovo, OnePlus, OPPO, realme, Sharp, vivo y Xiaomi. Durante el proceso se están generando compilaciones universales GSI (Generic System Images), adecuadas para diferentes dispositivos basados en arquitecturas ARM64 y x86_64.
Entre los cambios (1, 2, 3):
- Se ha añadido un nuevo modo de trabajo en ventanas múltiples, llamado "Bubbles", que permite ejecutar cualquier aplicación en ventanas flotantes, similares a las notificaciones que se muestran sobre otro contenido para el envío de mensajes ("burbujas"), pero no vinculadas a una API especializada. Abrir una aplicación en una ventana flotante se lleva a cabo mediante la presión prolongada sobre el icono de la aplicación. En pantallas grandes, los iconos de las ventanas flotantes se muestran en un área separada en la barra de tareas. Estas ventanas se pueden agrupar, mover y fijar en la pantalla.

- Se ha continuado el desarrollo de la plataforma para dispositivos con pantallas grandes, tales como tabletas, laptops, sistemas de escritorio y smartphones con pantallas plegables. Se han eliminado las opciones anteriores para desactivar el nuevo comportamiento en dispositivos con pantallas de más de 600 píxeles condicionales de ancho (dp), relacionadas con la ignorancia de ciertas API para gestionar el cambio de tamaño y orientación de pantalla (screenOrientation, resizeableActivity, [min|max]AspectRatio), así como la colocación adaptativa de aplicaciones en ventanas que permiten el cambio de tamaño y el movimiento por la pantalla.


- Se ha añadido la API del sistema EyeDropper API, que permite a la aplicación obtener información sobre el color de cualquier píxel en la pantalla sin necesidad de obtener permisos para capturar la pantalla. La seguridad se garantiza porque el usuario elige la área para determinar el color a través de una interfaz controlada por la plataforma con "pipeta", que no está controlada por la aplicación, es decir, la aplicación no puede solicitar información sobre un píxel específico y recrear el contenido de la pantalla píxel por píxel.

- Se ha agregado una interfaz del sistema para seleccionar contactos de la agenda, que se puede acceder al recibir el permiso ACTION_PICK_CONTACTS. Esta interfaz permite prescindir del permiso READ_CONTACTS, que permite leer todos los datos de contacto. Cuando se llama a la nueva interfaz, el usuario decide qué información de la agenda se transmitirá a la aplicación, con la opción de seleccionar solo ciertos campos.

- Se ha añadido la API PhotoPickerUiCustomizationParams para modificar la interfaz de selección de fotos, lo que permite acercarla al estilo de la aplicación que la invoca. Por ejemplo, se puede cambiar la proporción de aspecto de las miniaturas de las fotos de 1:1 (cuadrado) a 9:16 (vertical).

- Se ha añadido el permiso USE_LOCATION_BUTTON, que permite integrar en la interfaz de la aplicación un botón del sistema para otorgar acceso a datos de ubicación precisos. El botón es dibujado por el sistema y, al ser pulsado por el usuario, abre el acceso a la ubicación solo durante la duración de la sesión actual.

- Se ha añadido una configuración que permite eliminar la visualización de los nombres de las aplicaciones debajo de sus iconos.

- Se ha cambiado el diseño de la barra de herramientas para grabar screencasts.

- Se ha añadido soporte para reacciones en pantalla (Screen Reactions), que combinan grabación de video con la cámara frontal y la creación de un screencast para superponer comentarios sobre las acciones en la pantalla.
- Se ha agregado un modo para juegos en dispositivos con pantallas plegables, en el cual una mitad de la pantalla plegable se usa para mostrar el juego, y la otra para un controlador virtual.

- Se ha añadido la API Handoff, que permite transferir el estado de una aplicación a otro dispositivo Android cercano (por ejemplo, una tableta) y continuar trabajando allí.

- Se han implementado ventanas interactivas ancladas, que a diferencia de las ventanas tradicionales en modo de 'imagen en imagen', permanecen interactivas al ser ancladas sobre otras aplicaciones en modo de escritorio.
- Se han añadido dos nuevas APIs: la API UWB DL-TDOA, que determina la posición de un dispositivo dentro de un edificio utilizando Wi-Fi para la navegación en interiores; la API Proximity Detection para detectar dispositivos cercanos a través de Wi-Fi.
- Se ha añadido soporte para el formato de video VVC (Versatile Video Coding), también conocido como el estándar de compresión de video H.266, desarrollado conjuntamente por los grupos de trabajo MPEG (ISO/IEC JTC 1) y VCEG (ITU-T), con la participación de empresas como Apple, Ericsson, Intel, Huawei, Microsoft, Qualcomm y Sony. H.266 reemplaza a H.265 (HEVC) y proporciona una alta eficiencia en la transmisión y almacenamiento de todas las resoluciones de pantalla (desde SD y HD hasta 4K y 8K), admite video con rango dinámico ampliado (HDR, High Dynamic Range) y video panorámico en 360 grados.
- Se ha añadido la posibilidad de grabar video con un nivel de calidad constante. Este modo se configura en el objeto MediaRecorder, utilizando el método setVideoEncodingQuality(), que permite fijar el nivel de calidad sin vincularlo a la tasa de bits.
- Se ha añadido soporte para el formato de imágenes RAW14, utilizado en cámaras digitales profesionales y que permite almacenar 15 bits por canal de color.
- Se ha añadido soporte para el formato de video HDR Eclipsa Video.
- Se ha añadido un codificador de audio en formato HE-AAC (Codificación de Audio Avanzada de Alta Eficiencia), que admite tanto tasas de bits bajas como altas.
- Se ha añadido un nuevo permiso ACCESS_LOCAL_NETWORK para restringir el acceso de las aplicaciones a la red local. La posesión de este permiso permite a las aplicaciones descubrir y conectarse a dispositivos en la red local, como dispositivos inteligentes del hogar y sistemas multimedia. El permiso se ha añadido para bloquear el escaneo de recursos en la red local por aplicaciones maliciosas, por ejemplo, para la identificación encubierta del entorno del usuario.
- Se ha ampliado la protección contra el robo de contraseñas de un solo uso (OTP) y códigos de verificación enviados a través de SMS. El acceso directo a tales mensajes se abre ahora a la mayoría de las aplicaciones solo tres horas después de su recepción. En la aplicación estándar para leer SMS, tales mensajes se muestran de inmediato.
- Se ha implementado una protección contra llamadas de estafadores que se hacen pasar por empleados del banco. La plataforma puede interactuar con las aplicaciones bancarias instaladas para verificar que la llamada fue iniciada por el banco. Además, los bancos pueden identificar números de teléfono en los que solo se permiten llamadas entrantes.
- Se ha añadido la posibilidad de otorgar a las aplicaciones acceso temporal a datos de ubicación precisa, que solo es válido durante la sesión actual con el programa.
- El mecanismo de protección contra la carga dinámica de código (DCL, Dynamic Code Loading) se ha ampliado para su uso con bibliotecas nativas cargadas mediante el método System.load(), y no solo.
archivos en formatos DEX y JAR. DCL permite evitar la inserción de código malicioso en archivos ejecutables cargados dinámicamente, gracias a la asignación de permisos de acceso que solo permiten la lectura para dichos archivos. - Se ha habilitado por defecto el mecanismo de Transparencia de Certificados, que lleva un registro público de todos los certificados emitidos y revocados.
- Se ha proporcionado la capacidad de firmar paquetes APK con una firma digital basada en un algoritmo híbrido que combina un algoritmo clásico con el algoritmo ML-DSA, resistente a la ingeniería inversa en computadoras cuánticas.
- Para aplicaciones que funcionan en segundo plano, se restringe el acceso a la API para la reproducción de sonido, la conexión a dispositivos de audio y el cambio de volumen. Se entiende que solo las aplicaciones activas con las que el usuario está interactuando en ese momento pueden comenzar la reproducción y cambiar el volumen.
- Se ha añadido soporte para el cifrado híbrido basado en el mecanismo HPKE (Hybrid Public Key Encryption, RFC 9180), que combina la facilidad de transmisión de claves en el cifrado de clave pública con el alto rendimiento del cifrado simétrico (los datos se cifran con una clave simétrica rápida, mientras que la clave misma se cifra con un algoritmo asimétrico lento).
- Al ingresar contraseñas y códigos PIN mediante un teclado físico, por defecto se desactiva la visualización del último carácter ingresado mientras se escribe.
- Para simplificar la implementación del soporte de touchpads en los juegos, se ha unificado el manejo de eventos entre el ratón y el touchpad: por defecto, los eventos del touchpad relacionados con el movimiento del puntero y los gestos de desplazamiento se transforman ahora en un formato de coordenadas relativas, como para el ratón. El acceso a las coordenadas absolutas se proporciona al especificar explícitamente el modo POINTER_CAPTURE_MODE_ABSOLUTE.
- Se ha añadido al objeto ChooserSession el método getInitialRestingBounds(), que permite conocer la posición final y el tamaño del diálogo de selección (Chooser) después de que la animación haya terminado y se hayan cargado los datos.
- Se han añadido los métodos getStreamingAppMaxDownlinkKbps y getStreamingAppMaxUplinkKbps para determinar el ancho de banda máximo de la conexión con el fin de seleccionar el nivel de calidad al transmitir en vivo.
- Se ha proporcionado a los fabricantes de hardware una API para crear extensiones para cámaras, que permiten usar en las aplicaciones capacidades específicas, como el mecanismo de mejora de detalle Super Resolution, modos de reducción de ruido y optimizadores de calidad basados en IA.
- Se ha añadido una API para obtener información sobre el tipo de cámara (cámara integrada, cámara web conectada por USB o cámara virtual).
- Se ha añadido soporte para audífonos conectados a través de Bluetooth Low Energy (BLE). Estos dispositivos se han clasificado en una nueva categoría TYPE_BLE_HEARING_AID, lo que permite a las aplicaciones distinguir entre audífonos y auriculares, así como gestionar por separado la reproducción de sonidos del sistema (por ejemplo, se pueden reproducir sonidos de notificaciones, llamadas y alarmas en el altavoz integrado del teléfono, en lugar de en el audífono).
- Se han añadido configuraciones separadas para mostrar la contraseña ingresada en el teclado físico y en la pantalla táctil. De forma predeterminada, los caracteres de la contraseña ingresados con el teclado físico se ocultan inmediatamente.
- Se ha mejorado la visualización de los widgets de aplicaciones en pantallas externas, teniendo en cuenta la diferencia en DPI al escalar.
- Se ha añadido la solicitud ACTION_VPN_APP_EXCLUSION_SETTINGS, que permite abrir la pantalla de configuración del sistema para permitir que la aplicación tenga acceso a la red bypassing VPN-el túnel.
- Se ha añadido soporte para las características del lenguaje y las clases de Java disponibles en OpenJDK 25.
- Se han ampliado las capacidades de las interfaces de programación para trabajar con la cámara. Se ha agregado el método updateOutputConfigurations() al objeto CameraCaptureSession para adjuntar o desconectar áreas de salida sobre la marcha sin necesidad de reconfigurar toda la sesión de captura de datos de la cámara. En la práctica, este cambio permite realizar un cambio fluido entre diferentes modos de operación de la cámara (por ejemplo, grabación de video y toma de fotografías). Al trabajar con cámaras lógicas que abarcan varios sensores físicos, se ha añadido la capacidad de obtener metadatos de cada sensor, y no solo del primario.
- Se ha declarado obsoleto el atributo android:usesCleartextTraffic, que permitía a la aplicación transmitir tráfico no cifrado, por ejemplo, solicitudes a través de "http://". Si es necesario utilizar tráfico no cifrado, se deben utilizar archivos separados con configuraciones de seguridad.
- Se añadieron configuraciones para gestionar el historial de llamadas VoIP, permitiendo controlar la conservación de información en los registros y la visualización de información sobre las llamadas realizadas en la interfaz.
- Se han ampliado las capacidades de la API Wi-Fi RTT (Round-Trip-Time) para la localización continua de la distancia aproximada a los puntos de acceso y la identificación segura de nodos para conexiones P2P (peer-to-peer).
- Se han añadido nuevos perfiles en CompanionDeviceManager para solicitar autorizaciones y la interacción de aplicaciones con dispositivos médicos y rastreadores de fitness.
- En el Android Runtime (ART) se ha implementado un recolector de basura generacional (Generational Concurrent Mark-Compact Garbage Collector), que utiliza el procesamiento separado de objetos 'viejos' y 'jóvenes', aumentando la eficiencia en la limpieza de objetos recién creados con un tiempo de vida corto. La aplicación del recolector de basura generacional reduce el riesgo de pausas durante la asignación de recursos y disminuye la carga en la CPU, mejorando la eficiencia del consumo de energía.
- Se ha implementado un límite en la cantidad máxima de memoria RAM que puede consumir una aplicación. Si se supera el límite, calculado según la RAM disponible en el dispositivo, la aplicación se cierra forzosamente. Para reducir el tamaño de la memoria utilizada, se ha propuesto R8 Optimizer, que empaqueta los nombres de clases, métodos y campos, además de eliminar código y recursos no utilizados.
- Al compilar el núcleo de Linux, se ha activado la optimización AutoFDO (Auto-Feedback-Directed Optimization), que utiliza los resultados del perfilado con información sobre la frecuencia de ejecución de diferentes partes del código para mejorar el rendimiento de las operaciones que se ejecutan con frecuencia. En las pruebas realizadas, la inclusión de AutoFDO para el núcleo redujo el tiempo de arranque en un 2.1%, aceleró el primer lanzamiento de aplicaciones en un 4.3%, mejoró la eficiencia de las llamadas al sistema en un 9.3%, redujo el tiempo de ejecución de las transacciones mmap del Binder en un 12.3%, HwBinder en un 20% y Binder RPC en un 21.7%.
- Se ha propuesto una nueva implementación de la cola de mensajes android.os.MessageQueue, que funciona sin bloqueos. La nueva implementación permite aumentar el rendimiento y reducir la pérdida de fotogramas.
- A las aplicaciones que declaren soporte para Android 17 y versiones más nuevas se les prohíbe modificar los valores de los campos marcados como 'static final', lo que permite realizar optimizaciones de rendimiento más agresivas en tiempo de ejecución.
- Para reducir el consumo de memoria, se ha limitado el tamaño de los propios diseños de las vistas de notificación (notification view).
- Se han añadido triggers adicionales TRIGGER_TYPE_COLD_START, TRIGGER_TYPE_OOM y TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE al perfilador ProfilingManager para recopilar datos útiles al depurar problemas de rendimiento.
Fuente: opennet.ru











