Todo sobre la Google I/O 2021

Hace unas semanas se celebró una nueva edición de la Google I/O, evento en el que el gigante tecnológico presenta anualmente las novedades de sus productos, plataformas y herramientas de desarrollo.

En lo que concierne a Android, han sido muchas las novedades que se presentaron, como la nueva versión del sistema operativo, Android 12, enfocado en mejorar la privacidad y con una vuelta de tuerca al aspecto visual con Material You.

Siguen firmes en su clara apuesta por modernizar el desarrollo en la plataforma con Android Jetpack, con numerosas nuevas librerías o funcionalidades en las ya existentes, dedicando especial atención al nuevo framework para implementar de manera declarativa las interfaces de usuario, Compose.

Además, Kotlin sigue cogiendo peso como lenguaje para el desarrollo en la plataforma y, por ello, apuestan por mejorar el rendimiento en la construcción y compilación de las aplicaciones con Kotlin Symbol Processing y Gradle Android Plugin 7.0, incluidas en la futura versión de Android Studio que tendrá por nombre Arctic Fox y que contará con más herramientas para facilitar el trabajo diario de los desarrolladores.

 

 

Y ya vamos por Android 12

"Google I/O. Resumen SDOS. Android 12"

La nueva versión del sistema operativo viene con el mayor cambio de diseño realizado hasta la fecha por parte de Google. Continúa apostando por la seguridad y privacidad de los usuarios mediante un incremento del control y la monitorización de lo que hacen las aplicaciones que usamos. Y, por fin, incluyen el aclamado permiso de bluetooth independiente al de localización (¡aleluya!).

 

 

Material You

"Google I/O. Resumen SDOS. Material You"

Es el nuevo paso para Material Design, un cambio radical a la manera de pensar los diseños en Android enfocado en las emociones y expresividad. Permite, además, personalizar el estilo del sistema operativo y de las aplicaciones adaptándose a los gustos personales de cada usuario, todo ello sin olvidar la accesibilidad y siendo adaptativo a cada tipo de pantalla en la que se visualicen nuestras aplicaciones.

 

 

Desarrollo moderno en Android

Hace varias I/O que se presentó en sociedad Jetpack, un conjunto de bibliotecas para facilitarnos a los desarrolladores el seguimiento de buenas prácticas, reduciendo el código a implementar, haciéndolo más robusto y coherente para los diferentes dispositivos y versiones de Android.

"Google I/O. Resumen SDOS. Jetpack"

 

 

CameraX

Por fin tenemos disponible CameraX en versión estable. Con ella podremos integrar de manera sencilla el uso de la cámara de los dispositivos a través de una API coherente, simple, afín al ciclo de vida de las aplicaciones y, a la vez, mejorando el rendimiento en la inicialización de la cámara y en la captura de las fotografías. También provee de funciones para aprovechar las últimas mejoras y efectos tales como los modo Retrato, HDR, nocturno y modo belleza.

// Set up the CameraController
val cameraController = LifecycleCameraController(context)
cameraController.bindToLifecycle(lifecycleOwner)

// Attach the CameraController to PreviewView
val previewView = findViewById(R.id.preview_view)
previewView.setController(cameraController)

// Use the CameraController
cameraController.takePicture(...)

 

 

Hilt

Ya habíamos hablado en este post de la nueva librería para la inyección de dependencias en Android, y ahora sabemos que pasa también a versión estable. Simplifica esta tarea, a veces compleja, con una capa de abstracción sobre Dagger2.

@HiltViewModel
class MyViewModel @Inject constructor(
    val handle: SavedStateHandle,
    val repository: Repository,
) : ViewModel {
    //...
}

@AndroidEntryPoint
class MyFragment : Fragment() {
    val viewModel: MyViewModel by viewModels()
    val navigationGraphScoped: MyViewMode by hiltNavGraphViewModels(R.id.nav_graph)
}

@HiltWorker
class MyWorker @AssistedInject constructor(
    @Assisted context: Context,
    @Assisted params: WorkerParameters,
    repo: Repository,
) : Worker {
    //...
}

 

 

Paging 3.0

Tenemos también la versión estable de esta librería para cargar y mostrar datos por trozos conjuntamente con RecyclerView optimizando el rendimiento y uso del recursos del sistema.

"Google I/O. Resumen SDOS. Paging 3.0"

 

 

Security Crypto

Es la última librería estable presentada y viene a ayudarnos a cifrar los archivos y preferencias de nuestras apps.

val prefs: SharedPreferences = EncryptedSharedPreferences.create(
    context,
    "prefs_file_name",
    mainKey,
    prefKeyEncryptionScheme = AES256_SIV,
    prefValueEncryptionScheme = AES256_GCM,
)

prefs.edit()
    .putBoolean("show_completed", true)
    .apply()

 

 

Nuevas incorporaciones a Jetpack

  • DataStore. Van a proveernos de una solución simple, robusta y alternativa a las SharedPreferences, totalmente asíncrona e integrada con las corrutinas y flow de Kotlin. Dependiendo de las necesidades, tendremos varias opciones de implementación:
    • Proto. Fuertemente tipada mediante esquemas de datos.
    • Preference. Guardado mediante claves-valor.
    • Custom. Provee la posibilidad de implementar una solución ad-hoc.
  • Macrobenchmark. Con esta biblioteca vamos a poder medir con precisión el rendimiento tanto en la inicialización como durante el uso de la misma, tanto localmente como con nuestros procesos de integración continua, verificando los resultados y posibles regresiones antes de publicar nuevas versiones.
  • AppSearch. Biblioteca para la optimización de búsquedas de texto completo dentro de la app y en el dispositivo:
    • Totalmente funcional con respecto a SQL.
    • Búsqueda avanzada de texto completo.
    • Incluye esquemas comunes para tipos de objeto, basados en schemas.org.
  • Google Shortcuts. Biblioteca para integración de shortcuts de Google Assistant y otros productos de la compañía.
  • Emoji2. Emojis para todos.

 

 

Mejoras en las librerías existentes

  • WorkManager. A partir de la versión 2.5 da soporte a múltiples procesos. En la futura versión 2.7 podremos manejar las restricciones de primer plano incluidas en Android S.
  • Room. Soporte a enumeraciones, QueryCallback para simplificar tareas como registrar trazas tras las ejecuciones, anotación ProvidedTypeConverter y soporte experimental con Kotlin Symbol Processing que promete compilaciones 2x más rápidas que con kapt.
    @ProvidedTypeConverter
    class TimeStampConverter(timeformat: String) {
        @TypeConverter
        fun fromTimestamp(value: Long) {
            //...
        }
    }
    
    Room.inMemoryDatabaseBuilder(context, CacheDatabase::class)
        .addTypeConverter(TimeStampConverter(getPreferredTimeFormat()))
        .build()
  • ConstraintLayout. Mejoras de rendimiento y corrección de incidencias.
  • Fragment. Mejoras de rendimiento, integración con ActivityResult y nueva interfaz FragmentOnAttachListener.
    // Obtain the fragment manager. May be a childFragmentManager,
    // if in a fragment, to observe child attachment
    val fragmentManager = supportFragmentManager
    
    val listener = FragmentOnAttachListener { fragmentManager, fragment ->
        // Respond to the fragment being attached.
    }
    
    fragmentManager.addFragmentOnAttachListener(listener)

     

  • Navigation. Este framework de navegación va a incluir soporte para navegar con múltiples backstacks.
  • Integraciones con Compose. La mayoría de bibliotecas ya incluyen integración con Compose (Hilt, Paging, Navigation, Activity, ViewModel, ConstraintLayout…).

 

 

Compone la UI con Compose

Ya venía avisando la gran G mediante su comunidad de Android Developer Experts que el futuro de la implementación de UI estaba a la vuelta de la esquina. Ahora ya sabemos que Jetpack Compose será estable este mismo julio.

Compose es el kit de herramientas modernos para compilar UI nativas en Android. Viene a simplificar y acelerar el desarrollo de la UI permitiéndonos que nuestras apps cobre vida con menos código, herramientas más potentes y APIs intuitivas, de la mano de Kotlin.

@Composable
fun JetpackCompose(){
    Card{
        var expanded by remember { mutableStateOf(false) }
        Column(Modifier.clickable {expanded = !expanded}) {
            Image(painterResource(R.drawable.jetpack_compose))
            AnimatedVisivility(expanded){
                Text(
                    text = "Jetpack Compose",
                    style = MaterialTheme.typography.h2,
                )
            }
        }
    }
}
"Google I/O. Resumen SDOS. Jetpack Compose"

 

Próximamente iremos publicando una serie de post relacionados con Compose al igual que hemos venido haciendo con SwiftUI (su homólogo en iOS).

 

 

Kotlin es nuestro amigo

Desde 2017 Google declaró claramente su apuesta por Kotlin como lenguaje de desarrollo para aplicaciones Android. Actualmente el 80% del top 1000 están implementadas en este lenguaje y el 60% de los desarrolladores profesionales trabajan con él. En SDOS el 100%.

Ya habíamos contado en otro post los múltiples beneficios de implementar nuestras apps con Kotlin (expresividad, seguro, interoperabilidad, concurrencia estructurada). Como dato, se ha reducido un 10% los errores producidos por nulos.

Nos van a seguir haciendo la vida más sencilla gracias a Kotlin Symbol Processing, herramienta que viene a sustituir a su homólogo kapt prometiendo compilaciones 2x más rápidas. Además, con la versión 1.5 de Kotlin han trabajado en la reimplementación del compilador, todo para mejorar los tiempos de construcción y compilación.

En cuando a bibliotecas, además de Compose, tenemos más versiones de extensiones como PlayCore, Map & Places y Android KTX.

Quizás los elementos más importantes en cuanto a las novedades sean Flow y sus hijos StateFlow y SharedFlow, que vienen con el objetivo de heredar el legado de LiveData, pero propios al lenguaje, y ofrecer además soluciones a problemas más complejos de concurrencia y gestión de hilos.

 

 

¿Desarrollar con la ayuda de un Zorro Ártico?

A partir de la próxima versión, Google ha decidido cambiar el versionado de Android Studio dándole más significado. Esta nueva versión será la 2020.3.1 (donde 2020 es el año de la versión de Intellij, 3 la versión del IDE de Jetbrains y 1 la versión de Android Studio). También parece que van a recibir nombres particulares y esta primera versión será Arctic Fox.

"Google I/O. Resumen SDOS. Arctic Fox"

Esta nueva versión incluirá muchísimas herramientas para ayudarnos a implementar nuestras aplicaciones, ya sea a nivel de diseño, para realizar pruebas en dispositivos virtuales o para aumentar la productividad. Vendrá con soporte para Kotlin Symbol Processing y Android Gradle Plugin 7.0.0.

 

 

Herramientas

Diseño

  • Muchas relacionadas con Compose:
    • Preview View. Previsualización de los diseños realizados con este framework.
    • Live Literals. Posibilidad de ver en tiempo real los cambios de texto en funciones composables.
    • Constraint preview. Previsualización de las restricciones en una vista implementada con Compose y ConstraintLayout.
    • Interactive preview. Opciones para interactuar en el propio IDE con nuestros diseños sin tener que ejecutar en dispositivos virtuales o reales.
  • Animated drawables. Ventana en la que podremos visualizar animaciones implementadas mediante vectores.
  • Motion Editor. Actualización de esta ventana para facilitar aún más las animaciones con MotionLayout.
  • Layout Validation y Layout Inspector. Herramientas para la validación e inspección de los diseños realizados mediante archivos .xml.
  • Accessible Scanner. Herramienta que permitirá optimizar la accesibilidad de nuestros diseños.

 

De dispositivos

  • Más posibilidades para visualizar nuestras apps en diferentes resoluciones de pantalla o tipos de dispositivo.
  • Device Manager integrará los dispositivo conectados reales conjuntamente con los virtuales que tengamos configurados.
  • Wireless ADB, con el que no tendremos que conectar físicamente los dispositivos reales para probar o depurar nuestras aplicaciones.

 

Productividad

  • Test retention. Snapshots de emuladores con los que capturaremos estados de pruebas fallidas en test de instrumentación.
  • Profiling. Mejoras en la herramienta.
  • WorkManager Inspector. Nos permitirá tener una visión más clara en la gestión de trabajos.

 

 

Google se ha puesto las pilas

Nuestra voluntad es seguir en la vanguardia tecnológica para poder implementar aplicaciones modernas, robustas y escalables, atractivas y enfocadas a tener buenas experiencias de usuario, para cumplir con las necesidades de nuestros clientes para con su negocio. Google se ha puesto las pilas y parece enfocado en ayudarnos a cumplir con este objetivo.

Así pues, nos comprometemos a seguir contando cómo aplicamos continuamente estas mejoras provistas por parte de Google en el ecosistema Android para dar soluciones tecnológicas a nuestras aplicaciones.

 

 

**Portions of this page are reproduced from work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

Posts relacionados

Resumen de la WWDC21: lo que todo developer debe...

Todas las novedades con las que arranca la WWDC21

Comentarios
¿Qué opinas? Escríbenos. Nos encantará leerte :)