Comunidad

Now in Android #121

Lectura de 9 minutos
Daniel Galpin
Developer Advocate

Te damos la bienvenida a Now in Android, tu guía continua sobre las novedades y los aspectos destacados del mundo del desarrollo de Android.

Sigue leyendo para ver la cobertura de Android 16 QPR2 beta 1, la versión de funciones de Android Studio Narwhal, Jetpack Compose 1.9, Media 3 1.8, Shape Morphing y Autocompletar en Compose, entre otras novedades.

Puedes ver un resumen en vídeo:

 

 

También tenemos un pódcast.

Sin embargo, en esta publicación encontrarás la información más detallada, así que sigue leyendo.

Ya está disponible la versión beta 1 de Android 16 QPR2 ✨

Ya está disponible la primera versión beta de Android 16 QPR2, la primera versión de Android con una versión secundaria del SDK de Android. Las versiones secundarias del SDK pueden incluir nuevas APIs que amplíen las funciones de la plataforma, pero no pueden introducir cambios de comportamiento targetSdkVersion controlados, lo que minimiza la cantidad de pruebas que debes hacer en tus aplicaciones.

sdk-release-graph.webp

Puedes llamar a las nuevas APIs consultando SDK_INT_FULL en la enumeración VERSION_CODES_FULL:

  if (Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) {
  // Call new APIs from the Android 16 QPR2 release
}

VERSION_CODES_FULL no se puede usar en los atributos del manifiesto uses-sdk.

Estas son algunas de las novedades más importantes de la versión beta 1 de QPR2.

Interfaz de usuario, experiencia del sistema y accesibilidad:

  • La opción de tema oscuro ampliado invierte de forma inteligente las aplicaciones con tema claro para los usuarios que prefieren un aspecto oscuro.
  • El sistema puede generar iconos de aplicación con tema automático si tu aplicación no proporciona una capa monocromática.
  • Las sesiones del selector interactivo mantienen activa la interfaz de usuario de tu aplicación mientras la hoja para compartir está abierta, usando ChooserManager y ChooserSession.
  • Una nueva API Data Transfer permite migrar datos de forma más fiable y segura entre Android y iOS. Para ello, es necesario actualizar el archivo XML de las reglas de extracción de datos de tu aplicación y la implementación de BackupAgent.
  • El paquete android.graphics.pdf se ha ampliado para admitir la anotación y edición de documentos PDF a través de PdfRenderer.Page.
  • Los valores de ViewConfiguration ahora se adaptan a dispositivos virtuales concretos. Migra a ViewConfiguration.get(context) para usarlo en situaciones con varias pantallas.
  • Puedes controlar la intensidad de la vibración al pulsar de forma más granular especificando VibrationAttributes con View.performHapticFeedback(HapticFeedbackRequest).
  • Ahora, las baldosas de ajustes rápidos se pueden asignar a categorías predefinidas en el archivo AndroidManifest.xml.

Audio y contenido multimedia:

  • Decodificación por software de Immersive Audio Model and Formats (IAMF), un formato de audio espacial abierto.
  • La función Compartir audio personal para dispositivos Bluetooth LE Audio está integrada directamente en el selector de salida del sistema.
  • Los usuarios pueden controlar el brillo del HDR con un control deslizante de brillo HDR/SDR
  • Los extras del selector de fotos pueden destacar álbumes o consultas de búsqueda específicos.

Conectividad:

  • Las mejoras de la gestión de dispositivos complementarios te permiten proporcionar iconos de dispositivo personalizados, escuchar la retrollamada EVENT_ASSOCIATION_REMOVED y habilitar la verificación entre aplicaciones mediante DeviceId.
  • Las actualizaciones de Bluetooth incluyen compatibilidad con la búsqueda pasiva de BluetoothLeScanner (ScanSettings.SCAN_TYPE_PASSIVE), motivos de pérdida de la vinculación (BluetoothDevice.EXTRA_BOND_LOSS_REASON) y obtención directa de UUIDs de servicios (BluetoothDevice.EXTRA_UUID_LE).
  • Las actualizaciones de la distancia de Wi-Fi RTT (RttStationRangingParams) admiten la medición de la distancia de las estaciones.
  • Se ha añadido un nuevo PhoneNumberManager para analizar y validar números de teléfono de encabezados P-Associated-URI de IMS.
  • Las mejoras de privacidad de la red MediaRouter permiten enviar contenido a través de nuevos medios, como Bluetooth y UWB. Debes usar el selector de salida del sistema o solicitar permisos NEARBY_DEVICES para los selectores personalizados de la aplicación.

Privacidad y seguridad:

  • Un nuevo estado de seguridad a nivel de sistema, Bloqueo de seguridad del dispositivo, bloquea los dispositivos y requiere la autenticación principal para desbloquearlos.
  • Se añade un interruptor visible para los usuarios en Protección antirrobo del teléfono para habilitar o inhabilitar "Bloqueo por autenticación fallida".

Productividad de los desarrolladores:

  • Las nuevas APIs de AppWidgetManager te permiten consultar métricas de interacción con widgets.
  • Las aplicaciones depurables instaladas mediante ADB ahora recibirán alertas tempranas sobre la compatibilidad con el tamaño de página de 16 KB.
  • ProfilingManager añade compatibilidad con nuevos activadores de creación de perfiles iniciados por el sistema y requestRunningSystemTrace para capturar trazas en segundo plano.
  • El interruptor "Registro de impresión detallado" de las opciones para desarrolladores proporciona información de depuración adicional para el marco de impresión de Android.
  • Se ha habilitado un sistema de pruebas más sólido para las experiencias de escritorio y multidispositivo con las nuevas APIs UiAutomation para capturas de pantalla en pantallas no predeterminadas y AccessibilityWindowInfo.refresh públicas.
  • Se ha añadido compatibilidad con la API para la nueva biblioteca androidx.core:core-backported-fixes.
  • Ahora se admiten aplicaciones con interfaz gráfica de usuario en el terminal de Linux
  • WindowInspector.addGlobalWindowViewsListener admite notificaciones de cambios en la vista raíz en tiempo real.

Puedes registrar cualquier dispositivo Pixel compatible para recibir actualizaciones beta de forma inalámbrica o usar imágenes del sistema de 64 bits con el emulador de Android en Android Studio. La estabilidad de la plataforma está prevista para octubre del 2025.

La actualización con nuevas funciones Narwhal de Android Studio es estable: empieza a usar el modo Agente 🐳

narwhal.webp

La actualización de funciones Narwhal de Android Studio ya es estable. Entre las nuevas funciones y mejoras, se incluyen las siguientes:

Streaming de dispositivos Android con tecnología de Firebase

device-streaming.webp

Android Device Streaming, con la tecnología de Firebase, ha introducido una compatibilidad estable con los laboratorios de dispositivos Android de partners, lo que te permite conectarte de forma remota a dispositivos Android físicos alojados por partners fabricantes de equipos originales, como Samsung, Xiaomi, OPPO, OnePlus y vivo.

Aceleramos el desarrollo con lanzamientos mensuales de Android Studio, que ahora se publican con el doble de frecuencia que antes

accelarating-releases.webp

Android Studio está pasando a un ritmo de lanzamiento estable mensual para ofrecerte nuevas funciones y correcciones de errores críticos más rápido. Aunque el IDE de Android Studio se actualizará mensualmente, cada pocos meses se lanzarán nuevas versiones de la plataforma IntelliJ, y las actualizaciones con nuevas funciones se encargarán de las versiones estables intermedias. El Emulador de Android y el complemento de Android para Gradle seguirán actualizándose por separado cada dos meses. Este programa de lanzamiento acelerado se basa en inversiones a largo plazo en la infraestructura de pruebas.

Novedades de la versión de agosto del 2025 de Jetpack Compose 🚀

jetpack-compose.webp

La versión de agosto del 2025 de Jetpack Compose (versión 1.9) ya es estable. En esta versión se han introducido Modifier.dropShadow y Modifier.innerShadow para renderizar efectos de sombra de caja. Los nuevos modificadores onVisibilityChanged y onFirstVisible te permiten monitorizar la visibilidad de los elementos para registrar impresiones o actualizaciones de la interfaz de usuario. Puedes aplicar estilos enriquecidos en OutputTransformation con TextFieldBuffer.addStyle para transformar el texto.

Los componentes LazyLayout ya son estables y puedes definir un LazyLayoutCacheWindow para mejorar el rendimiento de Lazy List y Grid con una prefetched mejorada. Scrollable2D permite el desplazamiento bidimensional, incluido el desplazamiento rápido y el desplazamiento anidado, con varias mejoras para la interoperabilidad del desplazamiento y el desplazamiento anidado con las vistas. Una API opcional (Composer.setDiagnosticStackTraceEnabled) proporciona información más detallada sobre la ubicación de los fallos en los rastreos de la pila, por lo que se recomienda usarla solo en las compilaciones de depuración. Las nuevas anotaciones @RememberInComposition y @FrequentlyChangingValue, junto con las comprobaciones de Lint asociadas, están disponibles en una nueva biblioteca de anotaciones de tiempo de ejecución. Los menús contextuales se pueden personalizar con Modifier.appendTextContextMenuComponents y Modifier.filterTextContextMenuComponents. Ahora se requiere la versión 8.8.2 o una posterior del complemento de Android para Gradle (AGP) o de Lint.

Media3 1.8.0: novedades 🚀

media3.webp

Ya está disponible Media3 1.8.0, que incluye varias funciones y mejoras nuevas. ExoPlayer incorpora un modo de desplazamiento para las búsquedas frecuentes iniciadas por el usuario, que puedes habilitar mediante ExoPlayer.setScrubbingModeEnabled. HlsInterstitialsAdsLoader ahora admite emisiones en directo para la inserción de anuncios guiada por el servidor.

Se ha actualizado el MetadataRetriever para que puedas obtener las duraciones de los elementos multimedia sin reproducirlos. En el caso de Transformer, la versión incluye operaciones de recorte más rápidas mediante listas de edición MP4 con experimentalSetMp4EditListTrimEnabled y optimizaciones del codificador específicas del chipset a través de CodecDbLite, que se habilitan llamando a setEnableCodecDbLite en DefaultEncoderFactory.Builder.

Otras novedades son la compatibilidad con descargas parciales en Downloader con PreCacheHelper, el enrutamiento automático de audio XR en ExoPlayer y las interacciones más eficientes de MediaCodec. El módulo MediaSession ahora mantiene las notificaciones visibles durante más tiempo de forma predeterminada y la aplicación de demostración de MediaSession muestra la función de reanudación de la reproducción. Una nueva aplicación de demostración de composición, creada con Kotlin y Compose, muestra la edición avanzada de vídeo con varios recursos.

Artículos 📚

#WeArePlay: conoce a las personas que programan un mundo más sostenible

weareplay.webp

La iniciativa #WeArePlay destaca aplicaciones Android y juegos que abordan los retos medioambientales. El juego BoRa — Parque Nacional Iguazú, desarrollado por Mayla, Flávia, Andréia y Ariane, ofrece experiencias interactivas gamificadas y accesibles para la educación sobre la naturaleza durante las visitas al parque. La aplicación de Louis y Justin, CyberTracker, permite a los rastreadores indígenas analfabetos registrar datos de biodiversidad a través de una interfaz basada en iconos, lo que apoya las iniciativas de conservación. Por último, Earth5R, fundada por Bharati y Saurabh, ofrece formación sobre el medio ambiente y conecta a los usuarios con prácticas y proyectos para desarrollar habilidades para la economía verde.

¿Qué es HDR? 🌟

hdr.webp

Alto rango dinámico (HDR): permite a los desarrolladores de Android aumentar el brillo máximo más allá del rango dinámico estándar (SDR) para ofrecer una fidelidad visual mejorada. Android admite HDR para vídeos e imágenes, incluidas tecnologías como Ultra HDR para la compatibilidad con versiones anteriores.

Para entender el color, hay que tener en cuenta tres componentes:

  • Profundidad de bits: define la precisión de la representación del color. Cuanto mayor sea la profundidad, más suaves serán las transiciones.
  • Función de transferencia: asigna valores de píxeles numéricos a la luminancia o el color mostrados, ajustándose a la respuesta visual humana no lineal. Por ejemplo, sRGB, HLG y PQ.
  • Gama de colores: representa la gama de colores que puede reproducir un dispositivo.

Confusiones frecuentes sobre el HDR:

  • Colores intensos: las gamas de colores más amplias, como Display P3 y Adobe RGB, estaban disponibles antes del HDR, y la mayoría de las pantallas siguen recortando a P3, incluso con contenido BT.2020.
  • Más contraste o mejor detalle de los negros: el HDR no ofrece negros más oscuros que el SDR en la misma pantalla. Las pantallas OLED ofrecen un contraste infinito en ambos casos. Aunque PQ asigna más bits a las zonas oscuras, no es una función HDR universal.
  • Mayor profundidad de bits: aunque algunos perfiles de vídeo HDR (por ejemplo, HDR10) usan secuencias de 10 o 12 bits, esto es específico de esos perfiles y no es inherente al propio HDR. Las profundidades de bits más altas también son habituales en otros formatos de imagen.

El HDR significa principalmente mayor brillo máximo. Este "margen de HDR" se define como una región flotante en relación con SDR. Mientras que los vídeos HDR tradicionales suelen codificar un espacio libre fijo, las pantallas modernas usan un espacio libre dinámico, lo que puede provocar diferencias en la calidad. Tecnologías como Ultra HDR y los mapas de ganancia ofrecen alternativas con un uso eficiente de los bits. El kit de herramientas de interfaz de usuario de Android utiliza la API extendedRangeBrightness para ofrecer experiencias HDR, incluso con RGBA_8888.

Vídeos 📹

Elementos compartidos avanzados con transformación de formas | Consejos de Jetpack Compose

Jetpack Compose ahora permite transiciones avanzadas de elementos compartidos, transformaciones de formas sofisticadas y animaciones de revelación. Los desarrolladores pueden configurar SharedTransitionLayout en el nivel superior de la aplicación y usar Modifier.sharedBounds para vincular elementos.

La transformación de formas es una nueva función clave que se consigue aprovechando la biblioteca de formas gráficas AndroidX de Material 3. Para ello, se crea un objeto Morph con formas de inicio y fin definidas, se controla su progreso con animateFloat (de AnimatedVisibilityScope) y se aplica como clip mediante un OverlayClip personalizado. Los efectos de revelado usan skipToLookaheadSize y skipToLookaheadPosition. Todas estas animaciones avanzadas también son compatibles con los gestos de retroceso predictivo.

Gemini multimodal en Android Studio: desarrollo de interfaces de usuario basado en IA

IA Gemini en Android Studio ayuda a desarrollar interfaces de usuario generando código a partir de diseños (incluida la conversión de imágenes en código), creando vistas previas de Compose con datos sintéticos y perfeccionando interfaces de usuario mediante comandos directos.

Consumir un SDK habilitado para el entorno de ejecución

Android 14 presenta entorno de ejecución de SDK, una nueva tecnología que aísla los SDKs de terceros en un entorno aislado de procesos seguro e independiente para mejorar la privacidad y la seguridad.

Para desarrolladores:

  • Los SDKs habilitados para el entorno de ejecución (RE) se ejecutan en este proceso independiente.
  • Los SDKs con reconocimiento del tiempo de ejecución (RA) actúan como intermediarios en tu aplicación.
  • Carga los SDKs de RE con SdkSandboxManagerCompat, respetando las restricciones (por ejemplo, en primer plano o de carga única).
  • Las herramientas de shim simplifican la comunicación entre procesos de bajo nivel.
  • Renderiza la interfaz de usuario de los SDKs de RE con SandboxedSdkView y SandboxedUiAdapter.
  • Inicia actividades desde el entorno de ejecución de SDK con SdkActivityLauncher.

Animación de formas de Material 3 en WearOS | Consejos de Jetpack Compose

Wear OS Material 3 para Compose ahora simplifica la transformación de formas. Los desarrolladores pueden añadir fácilmente cambios de forma animados a los botones redondos con IconButtonDefaults.animatedShapes, crear grupos de botones que animen los cambios de anchura con el componente ButtonGroup y Modifier.animateWidth(), y crear listas de desplazamiento vertical (TransformingLazyColumn) en las que los elementos se escalan y se transforman con TransformationSpec a medida que se acercan a los bordes de la pantalla.

Lanzamientos de AndroidX 🚀

A continuación, se muestra un resumen de los cambios de AndroidX, priorizando los más relevantes para los desarrolladores de aplicaciones Android:

Cambio general que afecta a las bibliotecas de Compose:

  • Valor predeterminado minSdk Se ha aumentado a la API 23: en el caso de androidx.compose animation, foundation, material, runtime y ui, la versión mínima predeterminada del SDK se ha cambiado de la API 21 a la API 23. Esto significa que, si usas las últimas versiones alfa de estas bibliotecas de Compose, tu aplicación requerirá implícitamente Android 6.0 (Marshmallow) o una versión posterior.

Principales cambios para los desarrolladores de Compose:

  • Nueva API retain (Compose Runtime): introduce una API retain similar a rememberSaveable, pero para valores que abandonan la jerarquía de composición sin serializarse. Tiene una vida útil más corta que los valores guardados y se comporta de forma similar a un ViewModel, lo que proporciona una nueva forma de gestionar el estado de los elementos componibles que pueden entrar y salir de la composición.
  • Transiciones de elementos compartidos mejoradas (animación y UI de Compose): nuevas APIs para habilitar o inhabilitar elementos compartidos de forma dinámica, tener en cuenta las transiciones en curso y definir límites de destino alternativos cuando se elimine un elemento compartido. También hay disponible un nuevo Modifier.skipToLookaheadPosition para anclar diseños.
  • Prefetching de paginación mejorado (Compose Foundation): la estrategia de prefetching de Pager ahora usa una "ventana de caché" (1 tamaño de viewport) en lugar de un solo elemento, y el prefetching inicial está habilitado de forma predeterminada. Los elementos también se conservan durante más tiempo para que el desplazamiento sea más fluido.
  • Gestión de enfoque perfeccionada para ratón o panel táctil (Compose Foundation y UI): ComposeViews ahora borrará automáticamente el enfoque cuando se produzca un evento de puntero hacia abajo (desde el ratón o el panel táctil) fuera del nodo enfocado. Puedes inhabilitar esta opción.
  • Rectángulos de enfoque personalizables (Compose Foundation): FocusProperties ahora te permite definir un área de enfoque personalizada en lugar de usar el cuadro delimitador de forma predeterminada, lo que mejora el recorrido del enfoque y la lógica de "mantener a la vista" en los contenedores desplazables.
  • Composable LifecycleOwner (ciclo de vida): un nuevo composable permite crear instancias de LifecycleOwner con ámbito directamente en el árbol de la interfaz de usuario. Esto resulta especialmente útil para gestionar los ciclos de vida de los componentes de forma independiente y para bibliotecas como Navigation.
  • Compatibilidad con tipos anulables en SavedStateHandle (Lifecycle y SavedState): se ha simplificado el proceso de guardar y restaurar propiedades anulables con compatibilidad nativa en SavedStateHandle y SavedStateRegistryOwner.
  • Nuevo LineHeightStyle.Mode.Tight (Compose Foundation & UI): el nuevo modo Compacto permite aplicar alturas de línea más pequeñas, aunque eso suponga cortar glifos más altos, lo que ofrece un control más preciso del diseño del texto.
  • Tocar dos veces para seleccionar una palabra (Compose Foundation): se ha añadido la opción de tocar dos veces para seleccionar palabras en SelectionContainer y BasicTextField.
  • Cambios en el comportamiento de WindowInsets (interfaz de usuario de Compose y Foundation):
    ◦ Se ha añadido una nueva API WindowInsets.cutoutPath para obtener la ruta del recorte de pantalla.
    ◦ Se ha quitado la marca isWindowInsetsDefaultPassThroughEnabled, por lo que WindowInsets ya no se consume de forma predeterminada, lo que permite que las vistas secundarias las reciban.
  • AndroidView requestRectangleOnScreen Corrección (Compose Foundation): las solicitudes realizadas por AndroidViews (por ejemplo, EditText intentar permanecer en la pantalla) ahora se propagan correctamente a Compose.
  • Desplazamiento con la rueda del ratón en 2D mejorado (Compose Foundation y UI): se ha mejorado la compatibilidad con los eventos de desplazamiento con la rueda del ratón en 2D, con nuevas APIs de prueba y una marca para controlar el comportamiento.

Nuevas bibliotecas y utilidades:

  • androidx.core:core-backported-fixes (Nueva biblioteca): esta nueva biblioteca permite a los desarrolladores comprobar si se han aplicado correcciones de errores críticos (por ejemplo, problemas a nivel de plataforma, como errores específicos de la cámara) a un dispositivo. De esta forma, se pueden ofrecer experiencias de usuario diferentes en función de si se ha resuelto un error conocido o no.

Otros cambios importantes:

  • Actividad y entrada de juegos: se ha añadido la compatibilidad predeterminada con tamaños de página de 16 KB y compatibilidad con ratón para GameActivity.
  • Posicionamiento de la descripción emergente de Material 3: se han añadido más proveedores de posición para las descripciones emergentes, lo que permite colocarlas encima, debajo, a la izquierda o a la derecha del elemento de anclaje.
  • Material3 DatePicker Correcciones: asegura que DatePicker respete su propia configuración regional para el formato de los números y corrige los problemas de visualización de derecha a izquierda.
  • Compatibilidad con display_override de TWAs (navegador): se ha añadido compatibilidad con la propiedad display_override del manifiesto de TWAs, lo que ofrece más control sobre la visualización de las TWAs.
  • Abrir URL inicial en una aplicación externa (navegador): se ha añadido un intent para permitir abrir la URL inicial de una TWA en un navegador externo.

Android Developers Backstage

Android Developers Backstage vuelve con otro episodio.

Autocompletar en Redactar

Jetpack Compose 1.8 introduce funciones de Autocompletar significativamente mejoradas, que aprovechan el sistema semántico de Compose. Ahora, los desarrolladores pueden integrar fácilmente la función Autocompletar a nivel de sistema.Para ello, solo tienen que etiquetar los campos de texto con la semántica del tipo de contenido pertinente (por ejemplo, nombre de usuario o contraseña). De esta forma, no es necesario gestionar manualmente el árbol de Autocompletar y se mejora el rendimiento.

 

Bueno… 👋

Esto es todo por esta edición, en la que hemos hablado de la cobertura de Android 16 QPR2 beta 1, la versión de funciones de Android Studio Narwhal, Jetpack Compose 1.9, Media 3 1.8, Shape Morphing y Autocompletar en Compose, entre otras novedades.

Vuelve pronto para ver las próximas novedades del universo de desarrolladores de Android.

Escrito por:

Seguir leyendo