La empresa Google ha lanzado la versión abierta de la plataforma móvil Android 12. Los códigos fuente relacionados con esta nueva versión están disponibles en el repositorio Git del proyecto (rama android-12.0.0_r1). Se han preparado actualizaciones de firmware para los dispositivos de la serie Pixel, así como para los smartphones de fabricación de Samsung Galaxy, OnePlus, Oppo, Realme, Tecno, Vivo y Xiaomi. Además, se han creado builds universales GSI (Generic System Images) adecuadas para diferentes dispositivos basados en arquitecturas ARM64 y x86_64.
Novedades principales:
- Se ha propuesto una de las actualizaciones de diseño de interfaz más significativas en la historia del proyecto. El nuevo diseño implementa el concepto 'Material You', presentado como una variante de Material Design de próxima generación. Este nuevo concepto se aplicará automáticamente a todas las plataformas y elementos de la interfaz, sin requerir cambios por parte de los desarrolladores de aplicaciones. En julio se planea ofrecer a los desarrolladores de aplicaciones la primera versión estable del nuevo kit de herramientas para el desarrollo de interfaces gráficas: Jetpack Compose.

La plataforma presenta un nuevo diseño de widgets. Los widgets son más destacados, con un mayor redondeo de esquinas y la posibilidad de utilizar colores dinámicos que se ajustan al tema del sistema. Se han añadido elementos de control interactivos, como casillas de verificación y botones de alternancia (CheckBox, Switch y RadioButton), que permiten, por ejemplo, editar listas de tareas en el widget de TODO sin necesidad de abrir la aplicación.

Se ha implementado una transición visual más fluida hacia las aplicaciones iniciadas desde los widgets. La personalización de los widgets se ha simplificado: se ha añadido un botón (un círculo con un lápiz) para una reconfiguración rápida de la colocación del widget en la pantalla, que aparece al mantener pulsado el widget.


Se han proporcionado modos adicionales de restricción del tamaño del widget y la posibilidad de usar un diseño adaptativo de los elementos del widget (responsive layout) para crear diseños estándar que cambien según el tamaño del área visible (por ejemplo, se pueden formar diferentes diseños para tabletas y teléfonos inteligentes). En la interfaz de selección de widgets (widget picker) se ha implementado una vista previa dinámica y la posibilidad de mostrar descripciones del widget.

- Se ha añadido la posibilidad de adaptar automáticamente la paleta del sistema al color de los fondos seleccionados: el sistema determina automáticamente los colores predominantes, corrige la paleta actual y aplica cambios a todos los elementos de la interfaz, incluido el área de notificaciones, la pantalla de bloqueo, los widgets y el control de volumen.
- Se han implementado nuevos efectos animados, como el aumento gradual de la escala y un desplazamiento suave de las áreas al desplazarse, aparecer y mover elementos en la pantalla. Por ejemplo, al cancelar una notificación en la pantalla de bloqueo, el indicador de tiempo se amplía automáticamente y ocupa el espacio que antes ocupaba la notificación.
- Se ha rediseñado la interfaz del panel desplegable de notificaciones y ajustes rápidos. Se han añadido opciones para Google Pay y el control de hogares inteligentes a los ajustes rápidos. Al mantener presionado el botón de encendido se activa Google Assistant, al cual se le puede dar una orden para hacer una llamada, abrir una aplicación o leer en voz alta un artículo. El aspecto general de las notificaciones ha sido unificado con el contenido definido por la aplicación.

- Se ha añadido un efecto de estiramiento de los límites de desplazamiento (Stretch overscroll), que indica al usuario que ha salido del área de desplazamiento y ha llegado al final del contenido. La imagen del contenido con este nuevo efecto se 'estira' y regresa. El nuevo modo de indicación del final del desplazamiento está activado por defecto, pero en la configuración hay una opción para volver al comportamiento anterior.
- Se ha optimizado la interfaz para dispositivos con pantallas plegables.

- Se han realizado transiciones de sonido más suaves: al cambiar de una aplicación que reproduce sonido a otra, el sonido de la primera se atenúa suavemente mientras el de la segunda aumenta gradualmente, sin superposición de un sonido sobre otro.
- Se ha modernizado la interfaz de gestión de conexiones de red en el bloque de ajustes rápidos, el panel y el configurador del sistema. Se ha añadido un nuevo panel de Internet que permite cambiar rápidamente entre diferentes proveedores y diagnosticar problemas.

- Se ha agregado la función de tomar capturas de pantalla que abarcan no solo el área visible, sino también el contenido en el área de desplazamiento. La posibilidad de guardar contenido fuera del área visible funciona para todas las aplicaciones que utilizan la clase View para mostrar. Para implementar el soporte de capturas de pantalla desplazables en programas que utilizan interfaces específicas, se ha propuesto una API ScrollCapture.

- Se ha mejorado la función de rotación automática del contenido de la pantalla, que ahora puede utilizar el reconocimiento facial de la cámara frontal para determinar la necesidad de rotar la pantalla, por ejemplo, cuando una persona utiliza el teléfono acostada. Para garantizar la privacidad, la información se procesa en tiempo real sin guardar imágenes intermedias. Esta función está disponible solo en smartphones Pixel 4 y modelos más recientes.
- Se ha mejorado el modo 'imagen en imagen' (PIP, Picture in Picture) y se ha aumentado la fluidez de los efectos de transición. En caso de activar la transición automática a PIP con el gesto up-to-home (deslizando la parte inferior de la pantalla hacia arriba), la aplicación ahora se trasladará inmediatamente al modo PIP sin esperar a que finalice la animación. Se ha mejorado el cambio de tamaño de las ventanas PIP con contenido que no es video. Se ha añadido la posibilidad de ocultar la ventana PIP arrastrándola hacia el borde izquierdo o derecho de la pantalla. Se ha cambiado el comportamiento al tocar la ventana PIP: un toque ahora mostrará los botones de control, mientras que un doble toque cambiará el tamaño de la ventana.
- Se ha llevado a cabo una optimización significativa del rendimiento del sistema: la carga en la CPU de los principales servicios del sistema se ha reducido en un 22%, lo que a su vez ha aumentado el tiempo de autonomía en un 15%. Gracias a la disminución de la competencia por bloqueos, la reducción de retrasos y la optimización de entrada/salida, se ha mejorado el rendimiento al cambiar de una aplicación a otra y se ha reducido el tiempo de inicio de las aplicaciones.
En PackageManager, al trabajar con instantáneas en modo solo lectura, la competencia por bloqueos se ha reducido en un 92%. En el mecanismo de comunicación entre procesos Binder se ha aplicado un almacenamiento en caché ligero, lo que ha permitido reducir las latencias hasta 47 veces para ciertos tipos de invocaciones. Se ha mejorado el rendimiento del manejo de archivos dex, odex y vdex, lo que ha llevado a una reducción en el tiempo de carga de las aplicaciones, especialmente en dispositivos con poca memoria. El inicio de aplicaciones desde notificaciones se ha acelerado, por ejemplo, iniciar Google Photos desde una notificación ahora se realiza un 34% más rápido.
Se ha incrementado el rendimiento de las consultas a la base de datos mediante la aplicación de optimizaciones inline en la operación CursorWindow. Para volúmenes de datos pequeños, CursorWindow se ha vuelto un 36% más rápido, mientras que para conjuntos de más de 1000 filas, la aceleración puede alcanzar hasta 49 veces.
Se han propuesto criterios para clasificar dispositivos según su rendimiento. Dependiendo de las capacidades del dispositivo, se le asigna una clase de rendimiento, que luego puede ser utilizada en aplicaciones para limitar la funcionalidad de los códecs en dispositivos poco potentes o para trabajar con contenido multimedia de mayor calidad en hardware potente.
- Se ha implementado un modo de hibernación de aplicaciones, que permite, si el usuario no ha interactuado con el programa durante un tiempo prolongado, restablecer automáticamente los permisos otorgados previamente a la aplicación, detener su funcionamiento, devolver los recursos utilizados por la aplicación, como la memoria, y bloquear la ejecución de trabajos en segundo plano y el envío de notificaciones push. Este modo puede aplicarse a la mayoría de las aplicaciones y permite proteger los datos del usuario, a los que todavía tienen acceso programas olvidados. Si se desea, el modo de hibernación se puede desactivar selectivamente en la configuración.
- Se ha optimizado la animación al girar la pantalla, lo que ha permitido reducir la latencia antes del giro en aproximadamente un 25%.
- Se ha incluido un nuevo motor de búsqueda de alto rendimiento, AppSearch, que permite indexar información en el dispositivo y realizar búsquedas de texto completo con clasificación de resultados. AppSearch proporciona dos tipos de índices: para organizar la búsqueda en aplicaciones individuales y para búsqueda en todo el sistema.
- Se ha añadido la API Game Mode y las configuraciones correspondientes, que permiten gestionar el perfil de rendimiento del juego; por ejemplo, se puede sacrificar rendimiento para extender la duración de la batería o utilizar todos los recursos disponibles para alcanzar el máximo FPS.
- Se ha agregado la función play-as-you-download para descargar recursos de juegos en segundo plano durante la instalación, lo que permite comenzar a jugar antes de que finalice la descarga.
- Se ha mejorado la reactividad y la velocidad de respuesta al trabajar con notificaciones. Por ejemplo, al tocar una notificación, se realiza una transición instantánea a la aplicación relacionada. En las aplicaciones, el uso de manejadores intermedios de notificaciones (notification trampoline) ha sido limitado.
- Se ha optimizado las llamadas IPC en Binder. Gracias a la nueva estrategia de almacenamiento en caché y a la eliminación de conflictos durante los bloqueos, se ha logrado reducir significativamente las latencias. En general, el rendimiento de las llamadas a Binder ha aumentado aproximadamente el doble, y en algunos casos se han logrado aceleraciones aún más significativas. Por ejemplo, la llamada a refContentProvider() se ha vuelto 47 veces más rápida, releaseWakeLock() 15 veces más rápida y JobScheduler.schedule() 7.9 veces más rápida.
- Para prevenir posibles problemas de rendimiento, se prohíbe a las aplicaciones iniciar servicios prioritarios (foreground service) mientras están en segundo plano, excepto en algunos casos especiales. Se recomienda usar WorkManager para iniciar trabajos en segundo plano. Para facilitar la transición, se ha propuesto un nuevo tipo de trabajo en JobScheduler, que se inicia inmediatamente, tiene prioridad elevada y acceso a la red.
- Se ha implementado la interfaz Privacy Dashboard con una visión general de todas las configuraciones de permisos, lo que permite entender a qué datos del usuario tienen acceso las aplicaciones. La interfaz también ofrece una línea de tiempo que visualiza el historial de acceso de las aplicaciones al micrófono, la cámara y los datos de ubicación. Para cada aplicación se pueden ver los detalles y las razones del acceso a datos confidenciales.

- Se han añadido indicadores de actividad del micrófono y la cámara al panel, que aparecen cuando una aplicación accede a la cámara o al micrófono. Al hacer clic en los indicadores, se muestra un diálogo de configuraciones que permite identificar qué aplicación está utilizando la cámara o el micrófono y, si es necesario, revocar los permisos.
- Se han agregado interruptores en el bloque desplegable de ajustes rápidos que permiten desactivar forzosamente el micrófono y la cámara. Una vez desactivados, los intentos de acceso a la cámara y al micrófono generarán una notificación y enviarán datos vacíos a la aplicación.

- Se ha añadido una nueva notificación que se muestra en la parte inferior de la pantalla cada vez que una aplicación intenta leer el contenido del portapapeles a través de la función getPrimaryClip(). Si el contenido del portapapeles se copia en la misma aplicación en la que fue agregado, no se mostrará la notificación.
- Se ha añadido un permiso separado BLUETOOTH_SCAN para escanear dispositivos cercanos a través de Bluetooth. Anteriormente, esta capacidad se proporcionaba al tener acceso a la información sobre la ubicación del dispositivo, lo que llevaba a la necesidad de otorgar permisos adicionales a las aplicaciones que requerían emparejamiento con otro dispositivo a través de Bluetooth.
- Se ha modernizado el diálogo para proporcionar acceso a la información sobre la ubicación del dispositivo. Ahora se le da al usuario la opción de transmitir a la aplicación los datos de su ubicación exacta o proporcionar solo información aproximada, así como restringir el acceso a solo la sesión activa de la aplicación (prohibiendo el acceso en segundo plano). El nivel de precisión de los datos emitidos al seleccionar una ubicación aproximada se puede modificar en la configuración, incluida la vinculación a aplicaciones específicas.

- Se ofrece a los desarrolladores de aplicaciones la opción de desactivar las ventanas emergentes de advertencia que cubren el contenido. Anteriormente, la posibilidad de mostrar ventanas cubiertas se regulaba a través de una solicitud de permisos, que se confirmaba durante la instalación de aplicaciones que mostraban ventanas cubiertas. No había herramientas que permitieran influir en el solapamiento del contenido de las aplicaciones que eran superpuestas. Con la llamada Window#setHideOverlayWindows(), todas las ventanas que cubrían el contenido ahora se esconderán automáticamente. Por ejemplo, el ocultamiento puede activarse al mostrar información especialmente importante, como la confirmación de una transacción.
- Se han proporcionado configuraciones adicionales a las aplicaciones para restringir operaciones con notificaciones durante el bloqueo de pantalla. Anteriormente, solo se ofrecía la posibilidad de gestionar la visibilidad de las notificaciones durante el bloqueo de pantalla, pero ahora se puede habilitar una autenticación obligatoria para realizar cualquier acción con las notificaciones durante el bloqueo. Por ejemplo, una aplicación de mensajería puede requerir autenticación antes de eliminar un mensaje o marcarlo como leído.
- Se ha añadido la API PackageManager.requestChecksums() para solicitar y verificar la suma de verificación de una aplicación instalada. Se admiten algoritmos como SHA256, SHA512 y Merkle Root.
- En el motor web WebView se ha implementado la posibilidad de utilizar el atributo SameSite para gestionar el manejo de Cookies. El valor 'SameSite=Lax' limita el envío de Cookies para subsolicitudes de otros sitios, como la solicitud de una imagen o la carga de contenido a través de un iframe de otro sitio. En el modo 'SameSite=Strict', las Cookies no se envían para ningún tipo de solicitudes intersitios, incluyendo todos los enlaces entrantes de sitios externos.
- Se ha continuado trabajando en la aleatorización de direcciones MAC para excluir la posibilidad de rastrear el dispositivo al conectarse a una red inalámbrica. Se ha limitado el acceso a la dirección MAC del dispositivo para aplicaciones no privilegiadas y al llamar a la función getHardwareAddress() ahora se devuelve un valor vacío.
- Se ha añadido la posibilidad de adaptar los elementos de la interfaz a dispositivos con pantallas redondeadas. Los desarrolladores ahora pueden obtener información sobre los redondeos de pantalla y ajustar los elementos de la interfaz que entran en las áreas invisibles de las esquinas. A través de la nueva API RoundedCorner, se pueden conocer parámetros como el radio y el centro del redondeo, y con Display.getRoundedCorner() y WindowInsets.getRoundedCorner() se pueden determinar las coordenadas de cada esquina redondeada de la pantalla.

- Se ha añadido una nueva API CompanionDeviceService, que permite activar aplicaciones que controlan dispositivos complementarios, como relojes inteligentes y rastreadores de fitness. Esta API aborda el problema del inicio y la conexión de las aplicaciones necesarias cuando un dispositivo complementario se encuentra cerca. El sistema activa el servicio al detectar el dispositivo cercano y envía una notificación cuando el dispositivo se desconecta o entra o sale del área de visibilidad. Las aplicaciones también pueden utilizar un nuevo perfil de dispositivos complementarios para simplificar la configuración de permisos para conectarse al dispositivo.
- Se ha mejorado el sistema de predicción del ancho de banda. Las aplicaciones ahora pueden solicitar información sobre el ancho de banda total previsto en relación con el operador, la red inalámbrica específica (SSID de Wi-Fi), el tipo de red y el nivel de señal.
- Se ha simplificado la aplicación de efectos visuales típicos, como el desenfoque y la distorsión de colores, que ahora se pueden aplicar mediante la API RenderEffect a cualquier objeto RenderNode o a toda el área visible, incluso en cadena con otros efectos. Esta capacidad, por ejemplo, permite desenfocar una imagen desplegada a través de ImageView sin necesidad de copiar, procesar y reemplazar explícitamente el bitmap, realizando estas acciones del lado de la plataforma. Además, se ha introducido la API Window.setBackgroundBlurRadius(), mediante la cual se puede desenfocar el fondo de la ventana con un efecto de vidrio esmerilado y resaltar la profundidad a través del desenfoque del espacio que rodea la ventana.

- Se han integrado herramientas para la transcodificación de flujos multimedia, que pueden utilizarse en entornos de aplicaciones con cámara que guardan video en formato HEVC, para garantizar la compatibilidad con aplicaciones que no soportan este formato. Para dichas aplicaciones, se ha añadido la función de transcodificación automática a un formato más común, AVC.
- Se ha añadido soporte para el formato de imagen AVIF (AV1 Image Format), que utiliza tecnologías de compresión intra-frame del formato de codificación de video AV1. El contenedor para la distribución de datos comprimidos en AVIF es completamente análogo al HEIF. AVIF es compatible tanto con imágenes en HDR (Alto Rango Dinámico) y espacio de color de amplio gamut, como con rango dinámico estándar (SDR).
- Se ha propuesto una API unificada OnReceiveContentListener para insertar y mover entre aplicaciones tipos avanzados de contenido (texto formateado, imágenes, videos, archivos de audio, etc.), utilizando diversas fuentes de datos, incluyendo el portapapeles, el teclado y la interfaz de arrastrar y soltar.
- Se ha añadido un efecto de retroalimentación táctil implementado con el vibrador integrado en los teléfonos, cuya frecuencia e intensidad de vibración dependen de los parámetros del sonido que se reproduce actualmente. Este nuevo efecto permite sentir físicamente el sonido y puede aplicarse para aumentar la realismo en juegos y aplicaciones de audio.
- En el modo inmersivo, donde la aplicación se muestra a pantalla completa ocultando las barras de herramientas, se ha simplificado la navegación mediante gestos de control. Por ejemplo, en aplicaciones de lectura de libros, visualización de videos y trabajo con fotografías, ahora se puede navegar utilizando un solo gesto de deslizar.
- En el marco del proyecto Mainline, que permite actualizar componentes del sistema individualmente sin necesidad de actualizar toda la plataforma, se han preparado nuevos módulos del sistema actualizables además de los 22 módulos disponibles en Android 11. Las actualizaciones afectan a componentes no vinculados al hardware, que se descargan a través de Google Play de manera separada a las actualizaciones OTA del firmware del fabricante. Entre los nuevos módulos que podrán actualizarse a través de Google Play sin necesidad de actualizar el firmware se encuentran ART (Android Runtime) y un módulo para la recodificación de video.
- Se ha añadido una API en la clase WindowInsets para determinar la posición de los indicadores de uso de la cámara y el micrófono (los indicadores pueden superponerse a los controles en programas de pantalla completa, y a través de la API el aplicativo puede ajustar su interfaz).
- Se ha añadido la capacidad, para dispositivos gestionados de manera centralizada, de prohibir el uso de interruptores para desactivar el micrófono y la cámara.
- Se ha proporcionado la opción de iniciar servicios activos (foreground) para aplicaciones CDM (Companion Device Manager) que controlan dispositivos complementarios como relojes inteligentes y rastreadores de fitness.
- En lugar de trabajar en una edición para dispositivos portátiles Android Wear, se ha decidido desarrollar una nueva plataforma unificada en colaboración con Samsung, que combina las capacidades de Android y Tizen.
- Se han ampliado las capacidades de las ediciones de Android para sistemas de infoentretenimiento automotriz y televisores inteligentes.
Fuente: opennet.ru














