Google I/O 2023 para (AI)ndroides

, , ,

Hace unos días se celebró la Google I/O 2023, evento anual en la que Google presenta las novedades en sus productos, sistemas operativos y servicios así como los frameworks, SDKs y herramientas disponibles para que los desarrolladores puedan para crear sus propias aplicaciones o productos apoyándose en todo el ecosistema del gigante tecnológico.

(PaLM)adita en la espalda de Google a OpenAI

La mayor parte de la Keynote se centró en el tema de moda en la tecnología: Inteligencia Artificial. Para amenizar toda la conferencia han desarrollado un juego de cartas generadas mediante IA por si quieres jugar: I/O Flip!. Comenzó la conferencia explicando como la compañía ha ido desarrollando e integrando de forma transparente la IA en sus productos y servicios a lo largo de la última década, y como han decidido dar algunos pasos más, alguno de ellos muy útiles en Android como veremos.

Google nos presentó la nueva versión de su modelo de aprendizaje, PaLM 2, mucho más potente que el anterior y desde el cual que se basan el resto de modelos más específicos según la idiosincrácia del servicio. PaLM 2 tiene además varias vertientes y estructuras base dependiendo de la capacidad computacional necesaria para su uso y el volumen de información que maneja el modelo. El más sencillo es Gecko, que podrá ser ejecutado en los propios dispositivos Android de forma offline. Además, estará disponible la PaLM API, con la que nuestras aplicaciónes podrán interactuar como lo hacen los servicios de Google, así como MakerSuite, una forma rápida y sencilla de prototipar ideas con IA generativas para cualquier público.

Implementa Machine Learning en cualquier dispositivo

MediaPipe es una solución para implementar aplicaciones que permitan Machine Learning a bajo nivel en los propios dispositivos de forma rápida y con abstracciones sencillas de usar. Permite soluciones de visión (analizar objetos en imágenes y videos), lenguaje natural (compresión del significado tras un texto) y audio (escuchar y reconocer sonidos) entre otras cosas que están por venir.

Por su parte MLKit, el SDK de machine learning con modelos preconstruidos, trae mejoras en su API para escaneo de código de barras, detección de rostros, la nueva detección de malla facial, reconocimiento de texto, respuestas inteligentes y el escaner de documentos.

Por ultimo, con TensorFlow en su versión Lite vendrá disponible en los Google Play Service y puede ser ejecutada directamente en dispositivos móviles. Esta librería, más generalista que las anteriores, permite realizar tareas de Machine Learning que deberán ser entrenadas desde cero por nuestras aplicaciones, pero nos permitirá trabajar con reconocimiento de imágenes y objetos así como procesamiento de lenguaje natural entre otras cosas para adaptar estos modelos a las necesidades propias del negocio de nuestras aplicaciones.

Cuéntate algo Bard

Google presentó durante la Keynote su asistente conversacional, Bard, que viene a competir con OpenAI en el corto plazo. Aún en fase experimental, permitirá conversaciones, uso de imágenes, mapas y muy pronto se podrá conversar en 40 idiomas diferentes, entre ellos el español. También permitirá ser usado por los desarrolladores para generación, depuración y análisis de código, teniendo soporte paralenguages de programación y frameworks más conocidos.

Google tiene IA para todos

Y muchas más novedades que se vienen:

  • Google Workspace con integración de IA como asistente para el día a día, todo ello usando Duet AI:
    • En Gmail, con las respuestas inteligentes, redacciones inteligentes o la opción de Help me write que nos generarán correos basados en nuestras ideas y contenidos de los hilos de conversación.
    • En Docs con Help Promp, nos ayudará a redactar generando escritos basados en nuestras ideas de forma similar que en Gmail.
    • En Spreadsheet con Help me organice creará tablas basadas en la información que recogemos en las celdas.
    • En Slides, con Help me visualize creará diapositivas basado en ideas, así como generación de imágenes integrados. También la IA nos ayudará a crear las notas del orador basandose en la información recogida en nuestras diapositivas.
    • Project Tailwind, aún en experimental, será un libro de notas generado por IA que recogerá nuestros documentos e información de nuestro espacio de trabajo y creará información ordenada y una base de conocimiento con la que interactuar de forma conversacional.
  • En Google Cloud, tendremos dos vertientes de IA:
    • Vertex AI permitirá la generación de aplicativos, imágenes e incluso voces con los modelos expecíficos como Codey (de texto a código), Imagen (de texto a imágenes) y Chirp (de habla a texto) respectivamente.
    • Con la ya mencionada Duet AI, nos ayudará para trabajar como compañero de programación y hacer pair programming directamente en la consola.
  • Y Google Search va a sufrir una revolución total, usando IA directamente en la búsqueda haciendo que nuestros criterios puedan ser más vervosos, así como directamente usar el modo conversacional para ir ajustando nuestras búsquedas conforme hablamos con el búscador, también integrado con Shopping. Esta idea de buscadores basados en IA y asistentes conversacionales ya lo vemos en plataformas como You, pero Google es Google.
  • Google Photos tiene la función Find que usa y amplía el usa de la IA para encontrar fotos mediante los criterios de búsqueda, pero sobre todo tendremos la función Magic Eraser y Magic Editor para corregir defectos en las fotos como obstáculos, enfoque, posiciones de los elementos, etc.

Google promete que su enfoque en este boom de la tecnología IA, desarrollo y evolución está siendo realizado de forma responsable, sostenible y hacerlo accesible para todos. Veremos en el futuro si es cierto.

Android 14

Hace pocas semana se anunció la primera beta y se acaba de publicar la segunda de ellas de la siguiente versión del SO del robot verde, Android 14 o Upsade-Down Cake como es conocido internamente siguiendo la tradición de nombres de postres para las versiones. Esta versión tiene como objetivo principal ser el sistema más completo y expresivo para dispositivos móviles. Para ello ser el más completo, tendrá de serie la funcionalidad Find My Device, así como mejoras centradas en proteger la privacidad y seguridad de los usuarios. Integrará el nuevo protocolo de mensajería RCS (Rich Communication Service) que viene a sustituir los viejos SMS y MMS para convertirse en el estándar de los operadores para la comunicación entre dispositivos. Por la parte de la expresividad y personalización, al ya presentado Material You, vendrá con integraciones de IA para crear wallpapers 3d, wallpapers basados en emojis o imágenes generados con esta tecnología en los propios dispositivos.

Para la comunidad de desarrolladores Android, seguir garantizando la privacidad y seguridad de los usuarios de nuestras aplicaciones hace necesario realizar integraciones con las nuevas APIs.

Full Screen Intent Notifications

Este tipo de notificaciones permiten a las aplicaciones lanzar notificaciones con Intent que abren notificaciones a pantalla completa, como por ejemplo para alarmas o llamadas. A partir de Android 14, tendremos que declarar explícitamente el nuevo permiso para ello:

val builder = NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.notiication_icon)
    .setContentTitle("Título urgente")
    .setContentText("Mensaje urgente")
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
    .setFullScreenIntent(fullScreenPendingIntent, true)

    

Seguridad ante todo

Muchos pequeños detalles a tener en cuenta para garantizar la seguridad de los usuarios que utilicen nuestras apps:

  • Será necesario declarar explícitamente los Intent si queremos abrir componentes no exportados:
val intent = Intent("com.example.app.PAY")
intent.setPackage("com.example.app")
startActivity(intent)
  • Tendremos que especificar si un Receiver está exportado o no cuando lo registremos y no sea un Broadcast del sistema:
// Registra un Receiver exportado
context.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_EXPORTED)

// Registra un Receiver no exportado
context.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED)
  • Nuestra aplicaciones deberán indicar su target version mínimo a SDK 23, o se podrá instalar (ya sabemos que para publicar es necesario SDK 31)
  • Para los servicios en primer plano, será necesario declará de qué tipo son de forma explícita:

    
    

    
        
        
    

Health Connect

Health Connect, la API presentada la pasada I/O 2022 enfocada en la normalización y securización de acceso a los datos de salud que se recogen de dispositivos weareables, se integrará en Android 14 a partir de otoño de este 2023 mediante una actualización del SO.

dependencies {
  ...
  implementation "androidx.health.connect:connect-client:1.0.0-alpha11"
  ...
}

    
    
val dataTypes = setOf(
    DataType.HEART_RATE_BPM,
    DataType.DISTANCE,
    DataType.LOCATION,
)

val config = ExerciseConfig(
    exerciseType = ExerciseType.BIKING,
    dataTypes = dataTypes,
    isAutoPauseAndResumeEnabled = false,
    isGpsEnabled = true,
)

Personalization

Además de a nivel de interfaz de usuario, Android 14 trae consigo algunas funcionalidades para adaptar el sistema operativo y las aplicaciones a las preferencias del usuario.

  • Preferencias de lenguaje por aplicación permitirá a los usuarios adaptar nuestra aplicación a un idioma concreto aunque el dispositivo se encuentre en otro (si lo habilitamos claro). Para ello:
android{
    androidResources {
        generateLocaleConfig true
    }
}
localeManager.overrideLocaleConfig = LocaleConfig(LocaleList.forLanguageTags(regional_locales))
  • Otra característica son las preferencias regionales, de temperatura y orden de los días de la semana:
LocalePreferences.getTemperatureUnit()
LocalePreferences.getFirstDayOfWeek()

Pair programming con Android Studio Bot

Como la cosa va de IA, el gran anuncio para los desarrolladores Android es la Android Studio Bot, el asistente conversacional integrado en el propio IDE de desarrollo, que vendrá a acompañarnos a partir de la versión Hedgehog. En este chat, de forma similar que con Bard, podremos interactuar iniciando conversaciones con cuestiones del tipo “¿Cómo puedo crear una base de datos con Room?” o “¿Qué es el tema oscuro?”, y pudiendo continuarlas ya que mantiene el contexto con “¿Cómo puedo hacerlo con Kotlin?”, “¿Cómo puedo aplicarlo en Compose?”. Podremos en cualquier momento generar código relacionado con las conversación que mantenemos con él, nos ayudará dando explicaciones además de referencias a la documentación oficial de Android y una opción para preguntar sobre un código en concreto al bot con Ask Studio Bot.

Android Studio Bot usa el ya mencionado Codey, el modelo generativo fundamental de Google descenciente de PaLM2 para transformar texto a código. Ni que decir tiene que estará en fase experimental, por lo que sus respuestas no tienen porqué ser buenas o solventar nuestros problemas pero si pueden ser de ayuda para mejorar nuestro conocimiento, forma de implementar nuestras aplicaciones Android y ser más productivos en nuestro día a día.

Otras herramientas que vienen a ayudarnos en Android Studio

No sólo tendremos pronto Android Studio Bot en nuestro IDE para ser más productivos. Siguen desarrollando nuestras herramientas para ayudarnos con el diseño de interfaces con Compose.

En la próxima versión Giraffe, además de la nueva interfaz de usuario del IDE más simple, traerá LiveEdit, que estará habilitado por defecto (en Flamingo es una opción aún experimental), mejorará las opciones y visualización de @Preview, así como se dará soporte al Animation Preview para los animateAsState, rememberInfiniteTransition y AnimatedContent. En la siguiente, Hedgehog, podremos depurar el estado de composición de nuestras funciones @Composable, implementar plantillas de MultiPreview, VisualLint para Compose así como un soporte a accesibilidad en los @Preview.

Pero no todas las herramientas son para Compose, ya que tedremos información sobre la calidad de nuestras aplicaciones directamente en Android Studio con la integración de Android Vitals y Firebase Crashlytics en el IDE.

Adaptarnos a todas las formas y tamaños

Históricamente, en Android se ha tenido que dar soporte a múltiples formatos de pantallas de forma relativamente artesanal. A esto le sumamos la nueva tendencia con los disposivos plegables como el nuevo (y prohibitivo) Pixel Fold también presentado en la keynote, o la compatibilidad de las aplicaciones Android con ChromeOS, cuestión que hace cada vez más complejo adaptar nuestros desarrollos a este escenario.

Los ingenieros de Google han pensado en ayudarnos mediante diversos frameworks y librerías como Jetpack WindowManager (para poder conocer en tiempo de ejecución estos nuevos factores de forma, estado de plegado así como entornos multiventana, incorporación de actividades), la clase WindowSize que normaliza los tamaños en Compact, Medium y Expanded para los dispositivos; herramientas integradas en Android Studio como Resizable Emulator; la nueva documentación oficial de Diseño de UI en la que se describe y explica las guías de diseño para móvil, weareables, pantallas grandes y TV basadas en Material You, formatos, patrones y distribuciones de elementos en estándar en los diferentes dispositivos así como kits para Figma, además de ejemplos claros para poder fijarnos en las mejores prácticas para adaptar nuestras aplicaciones a todos los escenarios de dispositivos.

Compose para diseñarlos a todos

Novedades en Compose, el framework declarativo para el diseño de interfaces de usuario, que está en continua mejora e incorporación de componentes de Material 3. Se ha mejorado un 22% el rendimiento gracias a la nueva implementación de Modifier así como los componentes Text y TextField.

Pager

El nuevo componente Pager permite desplazarnos de forma horizontal o vertical contenido de forma similar a ViewPager2 en el sistema tradicional de vistas.

@Composable
fun MyCustomPager(modifier: Modifier = Modifier){
    HorizontalPager(pageCount = 3) { page ->
        // Page content
    }
}

@Composable
fun MyVerticalCustomPager(modifier: Modifier = Modifier){
    Vertical(pageCount = 3) { page ->
        // Page content
    }
}

Flow

El otro componente es Flow, que permite de forma sencilla organizar contenido en un flujo vertical u horizontal como las líneas de texto de un párrafo o unas etiquetas.

@Composable 
fun MyCustomFlow(){
    FlowRow{
        // Flow content
    }
}

@Composable
fun MyCustomVerticalFlow() {
    FlowColumn {
        // Flow content
}

Material 3

La versión 1.1 de la librería de Material 3 para Compose incluye también nuevos conocidos como BottomSheets, DatePicker, TimePicker, Searchbar o Tooltips.

Soporte en Glide y Maps

Por fin tenemos soporte para Compose en librerías muy utilizadas en la comunidad de desarrolladores como son Glide y Maps:

@Composable
fun MyCustomImage(){
    GlideImage(
        model = myUrl,
        contentDescription = getString(R.id.picture_of_cat),
        modifier = Modifier.padding(padding).clickable(onClick = onClick).fillParentMaxSize(),
    )
}
@Composable
fun MyCustomMap(){
    Marker(
        state = MarkerState(position = LatLng(-34, 151)),
        title = "Marker in Sydney",
    )
    Marker(
        state = MarkerState(position = LatLng(-35.66, 139.6)),
        title = "Marker in Tokyo",
    )
}

Compose for TV

En alpha la primera versión de Compose para Android TV, con componentes adaptados a los patrones propios de las aplicaciones de televisión. Contenedores desplazables como TvLazyRow, TvLazyColumn y TvLazyGrid optimizados; componentes de navegación tales como SideNavigation, TabRow y Tab; así como otros patrones clásico en TV como Casousel, InmersiveList, HeroContent o ContentCard:

@Composable
fun MyTvScreen(){
    Carousel(itemCount = 4) { index ->
        CarouselItem(
            background = {
                Background(index)
            },
            content = {
                Content(index)
            },
        )
    }
}

Glance

Ya en versión beta la librería Glance, con la que podremos crear nuestros widgets optimizados para todos los tipos de dispositivos entre ellos los wearables.

WearOS

Concretamente para WearOS se ha presentado el nuevo Watch Face Format, el nuevo formato declarativo en XML que han desarrollado conjuntamente Google y Samsung, diseñado para facilitar la creación de Watch Faces por parte de los desarrolladores. Para poder implementarlas, tendremos que usar Watch Face Studio.


    
        
        
            
            
            
        
    

Además se ha incluído a Glance la Tiles API para las tarjetas que podemos ver en las aplicaciones de WearOs.

class HelloTileService: GlanceTileService(){
    @Composable
    override fun Content(){
        Text(text = "Hello Glance")
    }
}

Todas estas novedades podrán utilizadas en la nueva versión del SO, WearOS 4, ya en preview para desarrolladores.

Kotlin sustentando todo el ecosistema Android

Todas estas mejoras no serían posible sin el trabajo de colaboración entre Jetbrans y Google con Kotlin, anunciado hace ya 6 años como lenguaje oficial para el desarrollo en Android y 4 de primera clase. A partir de la próxima versión de Android Studio Giraffe el lenguaje por defecto para los scripts de Gradle también será Kotlin. Además, durante el próximo año 2024 saldrá la nueva versión del compilador de Kotlin, K2, que vendrá a mejorar rendimiento en las compilaciones del código fuente de forma contundente.

También tenemos como novedad el procesador de anotaciones KSP (Kotlin Symbol Tool) que viene a sustitutir el original Kapt (Kotlin Annotation Processing Tool) que optimizará la generación de código de las librerías que lo necesitan para sus implementaciones y nuestras integraciones. Es dos veces más rápido, comprende funcionalidades propias de Kotlin como lenguaje de programación así como está preparado para el desarrollo multiplataforma con Kotlin, olvidándonos del compilador de Java.

Hablando de desarrollo multiplataforma, los ingenieros de Android han anunciado además de DataStore las librerías Annotation y Collections para Kotlin Multiplatform, lo que confirma el apoyo de Google a la apuesta de Jetbrains con KMM.

Desarrollo moderno y sencillo con MAD

Desde hace un tiempo, los ingenieros de Android está apostando por MAD (Modern Android Development) a nivel de librerías, documentación y contenidos para desarrollar aplicaciones Android de vanguardia. A principios de año se presentó la nueva Guía de Arquitectura por parte de los ingenieros de Android, en las que nos cuentan buenas prácticas para definir la arquitectura de nuestras aplicaciones. Todo esto soportado por Android Jetpack, el conglomerado de librerías con las que estandarizar y simplificar funcionalidades típicas en el desarrollo móvil. Además de Compose y Window Manager, la última gran novedad es Media3 que por fin es estable en su versión 1.0. Con esta librería desarrollada sobre la conocida Exoplayer, viene a simplificar el controls de sesiones de video y audio en nuestras aplicaciones.

implementation 'androidx.media3:media3-exoplayer:1.X.X'
implementation 'androidx.media3:media3-exoplayer-dash:1.X.X'
implementation 'androidx.media3:media3-ui:1.X.X'
val player = ExoPlayer.builder(context).build()
val session = MediaSession.Builder(context, player).build()
val controller = MediaController.Builder(context, sessio.token).build()

Conclusiones

Hay que digerir sobre la marcha toda la revolución que está suponiendo la introducción de la Inteligencia Artificial y el Machine Learning en nuestras vidas; y como podemos ofrecer nuevas soluciones utilizando estas nuevas APIs y SDKs así como las propias herramientas que nos acaban de presentar Google en esta I/O.

Con Android 14, el sistema operativo continúa con su esfuerzo con proteger la privacidad y seguridad de los usuario, con el reto que supone en nuestros desarrollos día a día.

Compose ha venido para quedarse y en este último I/O hemos visto quizás que este framework declarativo esté llegando al punto de madurez para su uso en las aplicaciones de nuestro clientes y colaboradores de manera estable. Todo ello bien conjugado con las librerías de Jetpack y la filosofía Modern Android Development para que nuestras aplicaciones se adapten a todos los formatos y dispositivos.

Javier Rodríguez,
Android Tech Leader