Publicado por Bert de Weerd y Tingmui Li, Google Play
Cuando se lanzó Google Play en 2008, era fácil para los desarrolladores captar la atención de los usuarios porque solo había unos cientos de juegos y apps en Play Store. En la actualidad, hay millones de apps y juegos disponibles para usuarios en más de 190 países. Los recursos que brindas en Play Store (imágenes, videos, descripciones o incluso el nombre de la app) son esenciales para los usuarios a la hora de decidir qué descargarán.
Google Play muestra cada vez más los recursos en primer plano, destacando los recursos gráficos y las descripciones en la página principal de las apps y juegos. Para garantizar que los recursos de tu ficha ofrezcan a los usuarios una vista previa de las experiencias integradas en tus apps o juegos y generen más descargas, realizaremos las siguientes acciones:
Dado que el título, el ícono y el nombre del desarrollador de la app son los elementos que más importa ver en la página del directorio de la tienda, planeamos lanzar un conjunto de políticas a fin de que estos elementos sean únicos y fáciles de reconocer. Nos centraremos en lo siguiente:
No se permitirán en Google Play títulos, íconos ni nombres de desarrolladores de apps que no cumplan con las políticas nuevas. Te brindaremos más detalles sobre este cambio de política, incluidas las fechas de entrada en vigencia, más adelante en el año.
Te recomendamos revisar los ejemplos siguientes sobre lo que se puede y no se puede hacer, y pensar en cómo te podrían afectar a modo de preparación para este cambio.
También anunciaremos lineamientos nuevos sobre los elementos de vista previa para gráficos de funciones, capturas de pantalla, videos y descripciones breves que se incluyen a fin de promocionar las características y funcionalidades de tu app. Los recursos que no cumplan con nuestros lineamientos podrían no ser aptos para la promoción y recomendación en plataformas importantes de Google Play, como la página principal de Apps y Juegos.
Los lineamientos nuevos sobre los recursos que proporcionan los desarrolladores se centran en los siguientes principios:
Para garantizar que tus apps y juegos sean aptos para la recomendación en todas las plataformas de Google Play, consulta nuestros lineamientos nuevos relacionados con el directorio de la tienda. Comenzaremos a usar estos lineamientos a fin de informar nuestras recomendaciones a partir de la segunda mitad de 2021.
Esperamos que tanto el anuncio previo sobre la política como los lineamientos nuevos sobre los elementos de vista previa te sirvan a medida que planifiques este año y que compartas nuestro entusiasmo por hacer que Play Store sea un lugar más práctico y participativo.
La versión de Flutter 2.2 se centra en los detalles finales y la optimización, que incluye mejoras de rendimiento de iOS, componentes diferidos de Android, service worker actualizado para la Web de Flutter y mucho más.
Hoy es el día en el que Flutter 2.2 comienza a estar disponible. Si deseas obtener esta versión, cambia al canal estable y actualiza tu instalación actual de Flutter o visita flutter.dev/docs/get-started para iniciar una instalación nueva.
Si bien solo pasaron un par de meses desde el lanzamiento de Flutter 2, tenemos para compartir muchas mejoras en la versión 2.2. En esta versión, se fusionan 2,456 PR, y se cierran 3,105 problemas en todo el framework, el motor y los repositorios de complementos. Nos gustaría agradecer especialmente a toda la comunidad de Flutter que brindó una cantidad significativa de PR y revisiones de los PR, que incluye a Abhishek01039, quien contribuyó con la mayoría de los PR (17), y a xu-baolin, quien revisó la mayoría de los PR (9) con relación a Flutter 2.2. Les agradecemos a todos los colaboradores por su ayuda para publicar Flutter 2.2 en el canal estable. No podríamos hacerlo sin ustedes.
Con cada lanzamiento nuevo de Flutter en versión estable, se incluye un conjunto nuevo de actualizaciones, ya sean mejoras de rendimiento, características nuevas o correcciones de errores. Además, una versión comprende una cantidad de características que todavía no están listas para su uso en producción, pero que queremos que puedas verificar si funcionan como deseas. Por último, cada versión nueva incluye un conjunto de actualizaciones de las herramientas relacionadas y actualizaciones de la comunidad de Flutter a un nivel más general. Honestamente, en la actualidad, suceden tantos cambios con cada versión nueva de Flutter que no podemos abarcar todo en una sola entrada de blog, pero intentaremos señalar los aspectos más destacados.
Esta versión abarca una variedad amplia de mejoras de Flutter 2, que incluye actualizaciones en Android, iOS y la Web, íconos de Material nuevos, actualizaciones del manejo de texto, el comportamiento de la barra de desplazamiento y la compatibilidad con el cursor del mouse para el widget TextSpan, y lineamientos nuevos para admitir mejor varios tipos de plataformas desde una única base de código fuente. Todas estas características están disponibles ahora en versión estable y se pueden usar en apps de producción. Además, todas se compilan en una nueva versión de Dart.
Flutter 2.2 incluye la versión de Dart 2.13. Entre otros cambios, esta actualización de Dart incluye una función nueva de alias para tipos, que te permite crear alias para tipos y funciones:
Los alias para tipos permiten asignar nombres breves y agradables a tipos extensos y complicados, y también te permiten cambiar el nombre de tus clases de una manera no rotunda. También, se incluyen más novedades en Dart 2.13; consulta los detalles en el anuncio de lanzamiento de Dart 2.13.
En esta versión, se mejoró la última plataforma estable de Flutter: la Web.
Para empezar, optimizamos el comportamiento del almacenamiento en caché con un mecanismo nuevo de carga de service worker y corregimos la doble descarga de main.dart.js. En versiones anteriores de la Web de Flutter, service worker descargaba actualizaciones a tu app en segundo plano, a la vez que le brindaba acceso a tu usuario a la versión desactualizada de tu app. Una vez que se descargaba la actualización, el usuario no veía esos cambios hasta que actualizaba un par de veces la página del navegador. A partir de Flutter 2.2, cuando el service worker nuevo detecta un cambio, el usuario esperará hasta que se descarguen las actualizaciones para usar la app, pero luego verá las actualizaciones sin la necesidad de una segunda actualización manual de la página.
Para habilitar este cambio, es necesario que vuelvas a generar el archivo index.html de tu app de Flutter. Para ello, guarda tus modificaciones, elimina el archivo index.html y, luego, ejecuta flutter create. en el directorio de tu proyecto, de modo que puedas volver a crearlo.
También, mejoramos ambos procesadores web. Para HTML, agregamos compatibilidad con funciones de fuente a fin de habilitar la configuración de FontFeature, así como el uso de API de Canvas para renderizar texto, de manera que aparezca en el lugar correcto cuando se coloca el cursor. Para HTML y CanvasKit, agregamos compatibilidad con máscaras para sombreadores y computeLineMetrics, y se corrigieron las brechas de paridad entre la Web de Flutter y las apps para dispositivos móviles. Por ejemplo, los desarrolladores ahora pueden usar máscaras de opacidad a fin de realizar transiciones de fundido de salida con máscaras para sombreadores y usar computeLineMetrics de la misma manera que con las apps para dispositivos móviles.
Para la Web de Flutter, así como para Flutter en general, la accesibilidad es una de nuestras prioridades principales. Según su diseño, Flutter implementa la accesibilidad mediante la compilación de un árbol SemanticsNode. Una vez que el usuario de una aplicación web de Flutter habilita la accesibilidad, el framework genera un árbol del DOM paralelo al árbol del DOM RenderObject y traduce las propiedades semánticas a Aira. En esta versión, mejoramos la posición del nodo semántico a fin de cerrar la brecha entre las aplicaciones web para dispositivos móviles y computadoras de escritorio cuando se usan transformaciones, lo que implica que el cuadro de enfoque debe aparecer, de manera correcta, sobre los elementos cuando los widgets se diseñan con transformaciones. Si deseas ver el funcionamiento, mira este video de Victor Tsaran, quien lidera el programa de accesibilidad para Material Design, en el que usa VoiceOver con la app de Galería de Flutter:
También, expusimos el árbol de depuración de nodos semánticos con una marca de línea de comandos en los modos de perfil y de lanzamiento a fin de permitir que los desarrolladores depuren la accesibilidad mediante la visualización de los nodos semánticos que se crearon para su aplicación web.
Si deseas habilitar esta característica para tu propia aplicación web de Flutter, ejecuta lo siguiente:
$ flutter run -d chrome --profile \ --dart-define=FLUTTER_WEB_DEBUG_SHOW_SEMANTICS=true
Con esa marca activada, podrá ver tus nodos semánticos en la parte superior de los widgets, lo que te permite depurar y verificar si los elementos semánticos se colocan en un lugar que no deberían estar. Si encuentras ejemplos de este tipo, no dudes en enviar un informe de errores.
Si bien logramos un progreso significativo mediante la compatibilidad con un conjunto de funciones básicas de accesibilidad, continuaremos mejorando este tipo de compatibilidad. En las compilaciones disponibles en los canales principales y para desarrollares que sean superiores a la versión estable 2.2, agregamos una API con el objeto de permitir que los desarrolladores, de forma programática, habiliten automáticamente la accesibilidad para sus apps y estamos solucionando problemas mediante la tecla Tabulador con lectores de pantalla.
Por último, aunque no menos importante, la última versión de Flutter DevTools ahora es compatible con Layout Explorer para tus aplicaciones web de Flutter.
Esta actualización te brinda la misma herramienta de depuración de diseño en la Web a la que estás acostumbrado con tus apps para dispositivos móviles y computadoras de escritorio.
Para iOS, en esta versión, logramos que la transición de página sea más fluida en Cupertino mediante una reducción del 75% en el tiempo que se tarda para renderizar los fotogramas de la animación y, posiblemente, un porcentaje mayor en teléfonos de gama baja. No solo buscamos mejoras en el rendimiento del usuario final, sino que también maneras de mejorar el rendimiento del desarrollo.
En esta versión, implementamos instalaciones incrementales de iOS durante el proceso de desarrollo. Según nuestros puntos de referencia, observamos una disminución del 40% en la cantidad de tiempo para instalar una versión actualizada de tu app para iOS, lo que reduce el tiempo de respuesta cuando se prueban cambios en la app.
A medida que Flutter se expande para admitir más plataformas en versión estable, es útil tener en cuenta apps que sean compatibles no solo con diferentes factores de forma, como dispositivos móviles, tablets y computadoras de escritorio, sino que también con diferentes tipos de entradas (táctil frente al mouse y al teclado) y plataformas con diferentes idiomas, como paneles de navegación frente a menús del sistema para navegación. Denominamos apps "adaptables a las plataformas" a las que pueden ajustarse a los detalles de diferentes plataformas de destino.
Para obtener una introducción a las consideraciones que debes tener en cuenta cuando compilas apps adaptables a las plataformas, te recomendaremos la sesión Cómo compilar apps adaptables a las plataformas de Kevin Moore. Para obtener un panorama más detallado, consulta los lineamientos sobre apps adaptables a las plataformas en flutter.dev.
Por último, para las apps de ejemplo que se escribieron para varias plataformas según estos principios, recomendamos las apps Flokk y Flutter Folio de gSkinner. Puedes descargar el código para Flokk y Folio, así como descargar Flokk y Folio de las distintas tiendas de aplicaciones o puedes ejecutarlos directamente desde tu navegador. Otro gran ejemplo es la app que se utiliza para crear los mismos lineamientos:
Las secciones de la experiencia de usuario en los lineamientos sobre apps adaptables a las plataformas de Flutter se basan en los nuevos lineamientos de Material para pantallas grandes. En estos lineamientos nuevos del equipo de Material, se incluyen versiones renovadas de varios de los artículos principales sobre diseño, así como actualizaciones de varios componentes y un kit de diseño actualizado, en los que se tuvieron en cuenta las pantallas grandes.
El objetivo de Flutter siempre fue habilitar apps que hagan más que solo ejecutarse en varias plataformas; no terminamos nuestra tarea hasta que se ejecuten tus apps, de manera correcta, en todas las plataformas que establezcas como objetivo. Flutter cuenta con la compatibilidad que necesitas no solo para orientar tu app a varias plataformas, sino que también está diseñado para adaptar tus apps según el tamaño de la pantalla, los modos de introducción de texto, y los idiomas de cada una de estas plataformas.
Además, con respecto a los lineamientos de Material, en esta versión, no incluimos uno, sino dos PR separados que agregan íconos nuevos de Material a Flutter, incluido un ícono para la misma Dash.
Estas actualizaciones aumentan a más de 7,000 la cantidad total de íconos de Material para tus apps. Si tienes problemas para encontrar el ícono que buscas entre tantos (¿quién no?), puedes buscar por categoría y nombre en fonts.google.com/icons.
Una vez que encuentres el ícono perfecto, la pestaña nueva "Flutter" te muestra cómo usarlo, o puedes descargar solo ese ícono para usarlo como un elemento independiente en tu app. Agregar Dash a tu app de Flutter nunca fue tan fácil.
A medida que continuamos mejorando Flutter con el objeto de admitir las especificaciones en cada plataforma, seguimos avanzando hacia áreas nuevas que no eran tan importantes en los factores de forma para dispositivos móviles como lo son en los factores de forma para computadoras de escritorio. Una de esas áreas es el manejo de texto. En esta versión, comenzamos a refactorizar la manera en que controlamos la entrada de texto que habilita características, como cancelar una pulsación de tecla mientras fluye a través de la jerarquía de widgets, y mediante la introducción de la capacidad para personalizar, por completo, las pulsaciones de teclas que se relacionan con las acciones de texto.
Poder cancelar una pulsación de tecla permite que Flutter realice implementaciones, como usar la barra espaciadora y las teclas de flecha sin activar eventos de desplazamiento, lo que les brinda a los usuarios finales una experiencia más intuitiva. Puedes usar esta misma capacidad para controlar una pulsación de tecla antes de que llegue a los widgets superiores en tus propias apps. Otro ejemplo es que, en esta versión, puedes usar la tecla Tabulador entre un objeto TextField y un botón en tu app de Flutter, y simplemente funciona:
Las acciones de texto personalizadas te permiten realizar acciones, como el manejo especial de la tecla Intro en un objeto TextField; por ejemplo, puedes activar el envío de un mensaje en un cliente de chat y, al mismo tiempo, permitir que se inserte una línea nueva a través de Ctrl + Intro. Estas mismas acciones de texto permiten que Flutter brinde diferentes pulsaciones de teclas para hacer coincidir el comportamiento de la edición de texto con el mismo SO host, por ejemplo, Ctrl + C en Windows y Linux, pero Cmd + C en macOS.
Por ejemplo, la siguiente muestra anula la acción predeterminada de la flecha izquierda y brinda una acción nueva para las teclas de retroceso y suprimir:
Todavía tenemos mucho por hacer, pero estamos trabajando para brindarte acciones completas de edición de texto. Nuestro objetivo es que, para el momento en que la app de Flutter para computadoras de escritorio alcance la versión estable, los usuarios no puedan distinguir entre editar texto en las apps de Flutter y cualquier otra app en el SO host.
Como parte de nuestra búsqueda continua para lograr que las apps de Flutter se comporten como las mejores apps en cada plataforma, revisamos las barras de desplazamiento en esta versión. Cuando se trata de realmente mostrar una barra de desplazamiento, Android y iOS son iguales; no muestran una de forma predeterminada. Por otro lado, en una app de escritorio, por lo general, una barra de desplazamiento se muestra automáticamente cuando el contenido es más grande que el contenedor, lo que requiere que agregues un widget superior de barra de desplazamiento. Para obtener el comportamiento correcto en dispositivos móviles o computadoras de escritorio, en esta versión, se agrega automáticamente una barra de desplazamiento cuando es necesario.
Ten en cuenta el siguiente código sin barra de desplazamiento:
Cuando se ejecuta en una computadora de escritorio, aparece una barra de desplazamiento:
Si no te gusta el aspecto de la barra de desplazamiento o el hecho de que siempre se muestre, puedes configurar una propiedad ScrollBarTheme. Si no te gusta este comportamiento predeterminado, puedes configurar una clase ScrollBehavior para cambiarlo en toda la app o en una instancia en particular. Para obtener más detalles sobre el nuevo comportamiento predeterminado de la barra de desplazamiento y la manera de migrar tu código al conjunto nuevo de prácticas recomendadas, consulta los documentos en flutter.dev.
En versiones anteriores de Flutter, podías agregar un cursor del mouse (como una mano que indica que en un elemento se puede hacer clic) sobre cualquier widget. De hecho, en la mayoría de los casos, Flutter agrega esos cursores del mouse para ti, como, por ejemplo, un cursor de mano del mouse sobre todos los botones. Sin embargo, si querías una ejecución de texto enriquecido con diferentes intervalos de texto que tengan sus propios estilos y, posiblemente, la longitud necesaria para ajustarse, tenías mala suerte ya que TextSpan no es un widget y, por lo tanto, no se podía usar como un alcance visual para el cursor de un mouse… ¡Hasta ahora! A partir de esta versión, cuando tengas un objeto TextSpan con un reconocedor de gestos, aparecerá automáticamente el cursor del mouse correcto:
Ahora, puedes tener todos los intervalos de texto de ajuste que desees, y cualquiera de estos con reconocedores mostrará los cursores correctos del mouse.
En esta versión, el objeto TextSpan también admite onEnter y onExit junto con mouseCursor. Es posible que estos cambios parezcan pequeños, pero contribuyen, en gran medida, a que una app de Flutter se sienta como un usuario espera que se sienta.
Además de las nuevas características disponibles para su uso en producción, Flutter 2.2 incluye una serie de características en versión preliminar, que incluyen mejoras en el rendimiento del compilador de sombreadores de iOS, compatibilidad con componentes diferidos de Android, actualizaciones de las app de Flutter para computadoras de escritorio y compatibilidad con el host ARM64 de Linux de Sony. Pon a prueba estas características y avísanos si tienes algún problema.
En términos de renderización de gráficos, un "sombreador" es un programa que se compilará y se ejecutará en la GPU disponible en el dispositivo del usuario final. Desde el comienzo, Flutter utilizó sombreadores en la biblioteca de gráficos subyacente de Skia para ofrecer un rendimiento nativo en sus propios efectos gráficos de alta calidad con colores, sombras, animación y más. Debido a la flexibilidad de las API de Flutter, los sombreadores se generan y se compilan justo a tiempo, de manera síncrona con las cargas de trabajo de fotogramas que los necesitan. Cuando el tiempo para compilar sombreadores supera el presupuesto de fotogramas, los usuarios perciben el resultado como "bloqueo".
Para evitar el bloqueo, Flutter brinda la capacidad de almacenar los sombreadores en caché durante una ejecución de entrenamiento, que luego se empaquetan y se incluyen con una app, y se compilan antes del primer fotograma mientras se inicia el motor de Flutter. Es decir, no es necesario que los sombreadores que se compilan previamente se compilen durante una carga de trabajo de fotogramas, y tampoco generarán un bloqueo. Sin embargo, en un principio, Skia solo implementó esta característica para OpenGL.
Por lo tanto, cuando habilitamos el backend de Metal de forma predeterminada en iOS, dado que Apple dejó sin efecto OpenGL, aumentaron los peores tiempos entre fotogramas, según las mediciones que se realizaron con nuestros puntos de referencia, y aumentaron los informes de bloqueos por parte de los usuarios. Nuestras propias mediciones indicaron que, con frecuencia, estos informes se debían a un aumento en los tiempos de compilación de sombreadores, un aumento en la cantidad de sombreadores que Skia generó para el backend de Metal y la imposibilidad de que los sombreadores compilados se almacenen en caché durante las ejecuciones, de modo que el bloqueo duró más que la primera ejecución de una app.
Por lo tanto, hasta ahora, la única manera de evitar este bloqueo en iOS fue simplificar escenas y animaciones, lo que no fue ideal.
Sin embargo, ahora mismo, en el canal para desarrolladores, se incluye una versión preliminar de la compatibilidad nueva en Skia con la preparación de sombreadores para Metal. Mediante Skia, Flutter ahora compila los sombreadores incluidos antes de que comience la primera carga de trabajo de fotogramas.
Sin embargo, para esta solución, se deben tener en cuenta las siguientes advertencias:
Si deseas aprovechar esta compatibilidad nueva en tus apps, puedes seguir las instrucciones en flutter.dev.
De todas formas, aún no terminamos con este trabajo. En Android y iOS, esta implementación presenta algunos inconvenientes:
Consideramos que este último problema es el más importante para corregir. En particular, consideramos que el proceso de realizar ejecuciones de entrenamiento y razonar sobre las desventajas que impone el tamaño de la app y la latencia de inicio de la app es demasiado engorroso. Por lo tanto, continuamos investigando enfoques para eliminar el bloqueo de la compilación de sombreadores, y todos los bloqueos en general, que no dependen de esta implementación. En especial, estamos trabajando con el equipo de Skia para reducir la cantidad de sombreadores que genera en respuesta a las solicitudes de Flutter, así como estamos investigando cuánto Flutter podría implementarse con un conjunto pequeño de sombreadores definidos de manera estética que se incluyen con el motor de Flutter.
Puedes seguir este proyecto en el repositorio de Flutter para ver nuestro progreso.
Para Android, esta versión utiliza la característica de compilación AOT de divisiones de Dart con el fin de permitir que las apps de Flutter descarguen módulos que contienen código compilado con anticipación y elementos en tiempo de ejecución. Denominamos "componente diferido" a cada una de estas divisiones instalables. Si diferimos la descarga de código y elementos solo cuando sea necesario, el tamaño de la instalación inicial se puede reducir de manera significativa. Por ejemplo, implementamos una versión de la Galería de Flutter con todos los estudios y todas las demostraciones diferidas, y observamos una disminución del 46% en el tamaño de la instalación inicial.
Cuando se compila con componentes diferidos y habilitados, Dart compila el código importado, de manera exclusiva, con la palabra clave diferida en diferentes bibliotecas compartidas que se empaquetan en componentes diferidos junto con los elementos.
En la actualidad, los componentes diferidos solo están disponibles en Android, y esta característica se ofrece como una versión preliminar anticipada. Aprende cómo implementar componentes diferidos en la página nueva de Componentes diferidos en flutter.dev. Esta página también se enlaza con una página en el wiki de Flutter que contiene un análisis detallado de la manera en que funciona esta característica. Registra los problemas en la herramienta de seguimiento de errores de Flutter.
En esta versión, se incluye otra actualización de Flutter destinada a los amantes de las computadoras de escritorio; la compatibilidad con UWP de Windows ahora está en versión alfa, en el canal para desarrolladores (superior a la versión estable 2.2). UWP te permite llevar tus apps de Flutter a dispositivos en los que las apps estándar de Windows no se ejecutan, incluida la consola Xbox. Para probar esta actualización, primero debes configurar los requisitos previos de UWP. Luego, cambia al canal para desarrolladores y habilita la compatibilidad con UWP:
$ flutter channel dev$ flutter upgrade$ flutter config — enable-windows-uwp-desktop
Una vez que se habilite, crea una app de Flutter que incluya una nueva carpeta winuwp, lo que te permite compilar y ejecutar tu app en un contenedor de UWP:
$ flutter create uwp_fun$ cd uwp_fun$ flutter pub get$ flutter run -d winuwp
Como compilas una app para UWP de Windows, que se ejecuta en un entorno de zona de pruebas en Windows, deberás traspasar el firewall de la app en localhost durante el desarrollo a fin de habilitar acciones, como la recarga en caliente y los puntos de interrupción del depurador. Puedes hacerlo con un comando checknetisolation mediante las instrucciones en la página de documentos sobre computadoras de escritorio de Flutter. Una vez que termines, podrás ver tu app favorita de Flutter ejecutándose como una app de UWP en Windows.
Por supuesto, puedes ejecutar apps de UWP mucho más interesantes, como estas apps de Flutter que se ejecutan en una consola Xbox.
Nos gustaría agradecerle especialmente a clarkezone, que trabajó en esta compatibilidad desde hace tanto tiempo como yo soy estuve en el equipo de Flutter. Para obtener más detalles sobre la versión alfa de UWP de Windows, consulta flutter.dev/desktop/#windows-uwp.
Otro esfuerzo excelente por parte de un miembro de la comunidad de Flutter a nivel general es el de HidenoriMatsubayashi, un ingeniero de software de Sony, que contribuyó con la compatibilidad para orientarse al host ARM64 de Linux. Este PR te permite compilar y ejecutar apps de Flutter en máquinas con ARM64 de Linux.
Es emocionante ver que la comunidad de Flutter lleva a Flutter a lugares que el equipo de Google nunca podría haber imaginado. ¡Continúa trabajando así, HidenoriMatsubayashi!
El motor y el framework de Flutter forman solo una parte de la experiencia general. Las actualizaciones del ecosistema de paquetes y las herramientas tienen la misma importancia que la experiencia del desarrollador de Flutter. Además, tenemos para compartir algunas actualizaciones excelentes en estas áreas.
Con respecto al ecosistema, tenemos para anunciar una serie de nuevos paquetes de Flutter Favorite, así como varias actualizaciones de FlutterFire, la compatibilidad de Flutter con Firebase. Aún mejor, FlutterFire es compatible con la versión preliminar nueva de Verificación de aplicaciones de Firebase para que los desarrolladores de Flutter puedan aprovecharla desde el primer día.
En lo que respecta a las herramientas, se incluyeron actualizaciones nuevas de Flutter DevTools a fin de optimizar la huella de memoria de tu app y una pestaña nueva para el paquete provider. Hay actualizaciones notables de los complementos IDE para VS Code y Android Studio/IntelliJ y, si eres un autor de contenido que se orienta a Flutter, existe una forma completamente nueva de integrar DartPad en tu desarrollo.
Por último, aunque no menos importante, se incluye una herramienta nueva de diseño y compilación de apps de código de nivel inferior que se denomina FlutterFlow. Esta se orienta a Flutter y se ejecuta en la Web, ya que se compiló con Flutter.
Como parte de esta versión, el Comité del ecosistema de Flutter trabajó arduamente para certificar 24 paquetes nuevos de Flutter Favorite, nuestra expansión más grande hasta el momento. Los paquetes de Flutter Favorite que se etiquetaron recientemente incluyen lo siguiente:
Todos estos paquetes se migraron a la seguridad nula y son compatibles con Android, iOS y la Web, según corresponda. Por ejemplo, firebase_crashlytics no tiene un SDK subyacente en la Web, y android_alarm_manager_plus está diseñado específicamente para Android.
Los paquetes "plus" de la comunidad de Flutter brindan un superconjunto de los paquetes correspondientes del equipo de Flutter. Por ejemplo, el equipo de Flutter en Google brindó el paquete battery desde antes del lanzamiento inicial de Flutter, y este paquete se migró a la seguridad nula, pero solo es compatible con iOS y Android. Por otro lado, el paquete battery_plus de la comunidad de Flutter es compatible con las seis plataformas de Flutter, lo que incluye la Web, Windows, macOS y Linux. El hecho de que se hayan otorgado los premios de Flutter Favorite a 9 paquetes "plus" representa un gran avance en la madurez de la comunidad de Flutter en su conjunto. Flutter es mucho más grande de que lo que hace el equipo de ingenieros de Google. Te recomendamos que pronto migres tu código a los paquetes "plus" ya que, en las próximas semanas, se actualizarán los paquetes correspondientes de Google.
El complemento googleapis brinda contenedores Dart que se generan automáticamente alrededor de 185 API de Google para que se use en tus aplicaciones Dart del cliente o del servidor (lo que incluye tus apps de Flutter). Si deseas obtener más información sobre este paquete, el autor realizó una charla de I/O sobre cómo potenciar tus apps de Flutter con las API de Google.
El paquete win32 es una maravilla de la ingeniería, ya que incluye la mayoría de las llamadas a la API de Win32 de uso común mediante Dart FFI para hacerlas accesibles al código Dart sin necesidad de un compilador C o el SDK de Windows. A medida que Flutter gana popularidad en la plataforma de Windows, el paquete win32 se convirtió en una dependencia clave para muchos complementos populares, incluido path_provider, uno de los más conocidos. Además, como prueba de integridad, el autor timsneath hizo algunas locuras, como implementar notepad, snake y tetris, todo en Win32 sin procesar con Dart sin procesar.
Definitivamente, vale la pena echarle un vistazo al paquete win32 si usas Dart o Flutter en Windows.
FlutterFire, la compatibilidad de Flutter con Firebase, es una de las colecciones de complementos más populares que se usa con Flutter. Invertase realizó un trabajo enorme, ya que puso esta colección en producción para la versión Flutter 2 y continuó mejorándola desde entonces. De hecho, desde esa versión de producción inicial de FlutterFire, Invertase redujo en un 79% la cantidad de problemas abiertos y disminuyó en un 88% la cantidad de PR pendientes. Además, no solo hicieron un trabajo excelente con los complementos de calidad de producción, sino que también migraron los complementos de calidad beta a la seguridad nula, y los mantuvieron compilándose y ejecutándose en el mismo núcleo, para que puedas mezclarlos y combinarlos.
Además, Invertase continúa agregando características nuevas a los complementos de FlutterFire, incluida una serie de actualizaciones para la integración de Flutter con Cloud Firebase en esta versión de Flutter:
Por último, aunque no menos importante, FlutterFire brinda compatibilidad con la versión beta de un producto nuevo de Firebase: Verificación de aplicaciones de Firebase Verificación de aplicaciones de Firebase protege tus recursos de backend, como Cloud Storage, contra abusos, por ejemplo, fraude en la facturación o suplantación de identidad. Con Verificación de aplicaciones, los dispositivos que ejecutan tu app de Flutter utilizan un proveedor de certificación de identidad de la app para garantizar que, de hecho, es tu app auténtica, y también pueden verificar si se están ejecutando en un dispositivo auténtico sin alteraciones. Esta certificación se adjunta a todas las solicitudes que tu app realiza a tus recursos de backend de Firebase una vez que activas Verificación de aplicaciones. Para obtener más información, consulta la documentación sobre Verificación de aplicaciones de FlutterFire.
Flutter DevTools incluye una serie de actualizaciones notables con esta versión, incluidas dos mejoras de seguimiento de memoria y una pestaña completamente nueva solo para el complemento provider.
En esta versión de DevTools, la primera mejora de seguimiento de memoria ofrece la capacidad de realizar un seguimiento del lugar en el que se asignó un objeto. Es útil para encontrar la ubicación de una pérdida de memoria en tu código.
En segundo lugar, se incluye la capacidad de insertar mensajes personalizados en la línea de tiempo de la memoria. De esta manera, se te permite brindar marcadores específicos para tu app, como antes y después de haber realizado un trabajo intensivo en la memoria, de modo que puedas verificar que estás borrando de manera correcta.
A medida que las apps de Flutter crezcan cada vez más en situaciones reales, continuaremos asegurándonos de que los desarrolladores de Flutter cuenten con las herramientas necesarias para realizar un seguimiento de las pérdidas de memoria y los problemas de tiempo de ejecución de todo tipo, así como las herramientas para corregirlos.
No solo deseas rastrear los problemas de tiempo de ejecución en el uso del framework de Flutter; sino que también, con frecuencia, deseas realizar un seguimiento de los problemas relacionados con los paquetes. Con más de 15,000 paquetes y complementos compatibles con Flutter en pub.dev, esta situación se vuelve cada vez más probable, ya que tus apps usan más paquetes con el tiempo. Por lo tanto, con esto en mente, experimentamos y agregamos una pestaña nueva Provider a Flutter DevTools. De hecho, esta pestaña es creación de Remi Roussel, el mismo autor del paquete provider (entre muchas otras cosas maravillosas). Si ejecutas la última versión de Flutter DevTools y depuras una app de Flutter que usa el complemento provider, aparecerá automáticamente la pestaña nueva Provider.
La pestaña Provider te muestra los datos que se relacionan con cada uno de tus proveedores, lo que incluye los cambios en tiempo real a medida que ejecutas tu app. Además, como si eso no fuera lo suficientemente asombroso, te permite cambiar los datos, de manera directa, como una forma de probar los casos límite de tu app.
Gracias al trabajo con Remi en esta pestaña, aprendimos cómo apoyar mejor a otros autores de paquetes que les gustaría colaborar también. Puedes leer acerca de cómo Remi compiló la pestaña Provider y nuestro pensamiento actual sobre cómo habilitar más pestañas en la propuesta de complementos de Flutter DevTools. Envíanos tus comentarios y no dudes en comunicarte con nosotros, así nos cuentas tus planes para una pestaña nueva en Flutter DevTools.
Estas son solo algunas de las novedades interesantes de Flutter DevTools en esta versión. Para obtener la lista completa, consulta los anuncios individuales aquí:
En esta versión, también se actualizaron las extensiones IDE de Visual Studio Code y IntelliJ/Android Studio para Flutter. Por ejemplo, ahora, la extensión de Visual Studio Code admite dos reestructuraciones adicionales del código Dart: el método intercalado y la variable local intercalada.
En la extensión de Android Studio/IntelliJ, agregamos la capacidad para imprimir todos los seguimientos de pila en la consola con una opción.
Es útil en proyectos en los que la causa raíz podría estar en un paquete diferente, que anteriormente no se imprimía. Ya tenemos ideas sobre cómo lograr que sean más breves, así que espera más cambios en el futuro.
Si deseas obtener la lista completa de los cambios en las extensiones IDE para esta versión, consulta estos anuncios:
Para asegurarnos de tener la documentación lista en toda una comunidad de desarrolladores de Flutter que crece con rapidez, los equipos de Dart y Flutter siempre buscan maneras de mejorar y expandir las formas de crear contenido educativo. Con esta versión, agregamos una interfaz de usuario nueva paso a paso para DartPad que los desarrolladores pueden usar a fin de seguir los talleres dictados por instructores.
Si se agregan instrucciones directamente a DartPad, habilitamos una experiencia de taller guiada para I/O. Sin embargo, no solo lo compilamos para nuestros propios talleres; si deseas utilizarlo en tus talleres de Dart o Flutter, puedes hacerlo con los lineamientos para crear talleres de DartPad. Esta interfaz nueva se ofrece junto con las características para incorporar DartPad en tu propio sitio y compartir código con DartPad en Gist, que están disponibles desde hace tiempo.
Queremos que todos los que producen contenido de Dart y Flutter puedan brindarles experiencias interactivas y enriquecidas a sus usuarios. Prueba esta característica nueva y comparte tu opinión.
FlutterFlow es una herramienta de diseño y desarrollo de apps de "código de nivel inferior" para compilar apps dentro de tu navegador. Ofrece un entorno WYSIWYG para diseñar tu app en varias páginas mediante datos reales de Firebase. El objetivo de una herramienta de código de nivel inferior es realizar, con facilidad, la mayoría de las acciones habituales, lo que te permite escribir la menor cantidad posible de líneas de código personalizado. De hecho, como demostración, compilaron una app para dispositivos móviles de varias páginas para navegar por el Museo Metropolitano de Arte sin código en menos de una hora. Puedes ver todo el proceso en YouTube.
FlutterFlow genera código de Flutter, por lo que, si necesitas agregar código para personalizar aún más tu app, puedes hacerlo. Puede leer sobre el lanzamiento del producto FlutterFlow en flutterflow.io.
Como siempre, nos esforzamos por reducir la cantidad de cambios rotundos y, en esta versión, pudimos limitarlo a la eliminación de estas desactivaciones:
Puedes encontrar mitigaciones para estos cambios rotundos en flutter.dev.
Como siempre, de parte de todos los miembros del equipo de Flutter en Google, queremos agradecerles. Gracias por formar parte de la comunidad que permite que todo esto sea posible. Con más de una de cada ocho apps nuevas en Play Store que se compilan con Flutter y más de 200,000 apps de Flutter solo en Play Store, nuestro crecimiento continuo es extraordinario. Apps de todos los tamaños en el mundo confían su interfaz de usuario a Flutter para diseñar hermosas experiencias multiplataforma, de modo que puedan encontrar usuarios donde sea que estén.
Por último, en caso de que te lo hayas perdido, antes de que abandones I/O este año, no olvides echarle un vistazo a la aplicación web cabina de fotos de I/O que se compiló en Flutter y Firebase para tomar una selfie con Dash. Ahora, es una app de código abierto, de modo que puedes profundizar en las prácticas recomendadas para la Web de Flutter y la compatibilidad web con los complementos de cámara, y puedes aprender cómo usamos las características de la nube a fin de generar publicaciones personalizadas en redes sociales.
Te damos la bienvenida a Now in Android, una guía que actualizamos constantemente con las novedades más importantes sobre el desarrollo de Android.
MAD Skills es una nueva serie de contenido con la que los desarrolladores pueden aprender a usar las tecnologías de desarrollo moderno de Android para crear mejores aplicaciones con más facilidad. La serie acababa de lanzarse cuando publiqué la última edición de Now in Android. Pasaron algunas semanas y la primera miniserie sobre el componente Navigation ya está completa. Bueno… casi completa. Nos queda el último episodio de Navigation: una sesión de preguntas y respuestas en vivo.
Algo que queríamos hacer con MAD Skills era trascender el mero hecho de enseñar a usar varias características del desarrollo moderno de Android para escuchar también comentarios sobre problemas o preguntas que tengas con el objetivo de tratar de ayudarte. Al final de cada miniserie, realizaremos una sesión de preguntas y respuestas en vivo por YouTube precisamente con ese fin.
Antes, nos comunicaremos por Twitter para recibir algunas preguntas del público. También intentaremos presentar las preguntas en vivo, tanto en Twitter como en YouTube. Luego, tendremos una conversación con algunos de los expertos que trabajan en el producto y escucharemos sus recomendaciones.
En lo que respecta a Navigation, realizaré una sesión de preguntas y respuestas en vivo con Ian Lake este jueves a las 10 a.m. (hora del Pacífico). Envía las preguntas que tengas por esta conversación de Twitter (o publica tuits en #AskAndroid) y súmate a la sesión si puedes hacerlo. Cuando la sesión termine, publicaremos el video para que puedas verla incluso si no pudiste participar en vivo.
Si te perdiste los episodios de Navigation, puedes consultarlos en video o en formato de artículo:
Si deseas obtener contenido de forma constante, recuerda consultar la lista de reproducción de MAD Skills en YouTube, los artículos en Medium o esta práctica página de destino que contiene enlaces a todos ellos. Además, mantente al tanto para recibir más contenido de MAD; ¡la serie siguiente comienza la próxima semana!
Antes que nada, AndroidX ha puesto más bibliotecas a disposición con el fin de sumar contribuciones a través de GitHub.
Sabemos que muchos desarrolladores prefieren el flujo de contribuciones familiar de GitHub frente al sistema de AOSP+Gerrit que usa Android tradicionalmente y que les complacería vernos usar más GitHub.
¡Esa es una excelente idea! No obstante, es algo difícil de concretar (si consideramos la infraestructura con la que contamos). De todas maneras, te escuchamos y comenzamos a analizar esta opción. Por este motivo, desde hace unos meses, iniciamos el desarrollo activo de un pequeño grupo de bibliotecas en GitHub, con Paging, Room y WorkManager. Hace poco, también agregamos las bibliotecas de Activity, Fragment y Navigation. Consúltalas y, si deseas contribuir, obtén más información en el documento CONTRIBUTING.
Estaba la enorme cantidad habitual de versiones estables alfa, beta, RC y menores, incluida esta versión estable destacada:
MediaRouter 1.2.0: esta versión es interesante porque incorpora la funcionalidad de sincronización con algunas de las funcionalidades de medios nuevas de Android 11.
Android 11 agregó una cantidad de detalles de UI a los reproductores multimedia, con lo cual envió los controles multimedia a un nuevo espacio dedicado en el panel de notificaciones, a fin de facilitar el control multimedia desde un solo lugar para evitar intercalarlo con el resto de las notificaciones. Esto no tiene que ver con una nueva funcionalidad para desarrolladores, sino con una presentación diferente para las notificaciones que probablemente ya estés creando; puedes continuar usando las API de MediaSession y MediaStyle que están disponibles desde el lanzamiento de Lollipop.
No obstante, se agregaron algunas funcionalidades nuevas en Android 11 para la “transferencia multimedia sin dificultades” que permite que los usuarios cambien el dispositivo de reproducción a través del interruptor de salida (que se muestra a continuación). Esta edición nueva de MediaRouter te permite interactuar con esta nueva capacidad de la plataforma.
Si deseas ver los cambios multimedia en Android 11, consulta el video What’s New in media de Don Turner.
También quería informar sobre un par de versiones alfa interesantes. Por lo general, no explico en detalle las versiones alfa porque, bueno, son alfa y, en consecuencia, están sujetas tanto a cambios como a iteración a medida que el equipo continúa su trabajo en ellas. Pero hubo versiones nuevas de Paging y Navigation (¡justo hoy!) que son interesantes en términos de lo que implican con respecto al desarrollo futuro.
Una de las preguntas que recibimos bastante en el último tiempo, mientras Jetpack Compose realiza el recorrido por su versión alfa, es "¿Cuál es el futuro de [inserta tu biblioteca favorita de Jetpack aquí] en un mundo de Jetpack Compose"?
¡Y esa es una excelente pregunta! La respuesta es que muchos de los componentes de la arquitectura no tratan específicamente sobre las vistas o el kit de herramientas de la UI, por lo cual serán igualmente necesarios y útiles en el nuevo mundo de Jetpack Compose. Aparte de eso, compilamos integraciones para facilitar el trabajo conjunto de diferentes componentes. Compose ya ofrece integraciones con ViewModels y LiveData y, en la actualidad, marca la primera versión de compatibilidad de Paging y Navigation para Jetpack Compose.
Hace poco hubo tres publicaciones sobre las funciones del lenguaje de Kotlin que quizás desees consultar.
Florina Muntenescu publicó un artículo y un video nuevos sobre la función de desestructuración de Kotlin. La desestructuración ofrece una forma práctica de asignar variables múltiples a los valores de los diferentes campos de un objeto. Por ejemplo, podrías tener la siguiente clase de datos:
data class Donut( dough: String, topping: String)
y asignar variables con rapidez a los campos de la instancia Donut con:
val (dough, topping) = someDonut
La desestructuración funciona automáticamente en el caso de las clases de datos, pero puedes ofrecer funciones en otras clases a fin de otorgarles una capacidad de desestructuración de la misma forma.
Desglose de las declaraciones de desestructuración
Meghan Mehta presentó un artículo nuevo que habla acerca de la función de extensiones del lenguaje de Kotlin. Las extensiones te permiten agregar métodos o propiedades nuevos a clases existentes… o algo así. En realidad, las extensiones no se insertan en una clase existente, pero parecen hacerlo para los llamadores de esos métodos. (Spoiler: se implementan de manera interna como métodos estáticos que reciben una instancia de la clase).
Es probable que esta sea mi característica favorita de Kotlin: como desarrollador de API, me encanta la idea de ser capaz de mejorar las API en el futuro mediante la incorporación de API que puedan vivir fuera del núcleo de la plataforma o biblioteca, pero que funcionen sin problemas cuando las uses en tu código. Entonces, por ejemplo, podría crear un método de extensión en la clase String (tec.), String.isAGoodDonutName(). Luego, los llamadores que usan mi método de extensión llamarían ese método de manera directa en una String, por ejemplo "Sprinkle".isAGoodDonutName() en lugar del enfoque en otros lenguajes de llamarlo a través de algún otro paquete o alguna otra clase, por ejemplo Utils.StringMethods.isAGoodDonutName("Sprinkle"). Eso no es tan agradable, ni siquiera si en el ejemplo hablamos de donas.
Extensión de la legibilidad del código con las extensiones de Kotlin
Por último, Manuel Vivo publicó un video nuevo sobre "Los ABC de las corrutinas", en el cual explica temas como CoroutineScope, CoroutineContext, Dispatchers y Jobs. Bueno, quizás sea más parecido a CDJ que a ABC de las corrutinas.
Uno de los aspectos engañosos de la publicación de aplicaciones es garantizar que dichas aplicaciones cumplan con las pautas de la tienda, que están en vigencia a fin de generar un buen ecosistema de aplicaciones para los usuarios. Pero, a veces, puede ser difícil determinar con exactitud cómo se puede hacer eso de la forma correcta. Por lo tanto, Play Store publicó este artículo para ayudarte a comprender algunas de las infracciones comunes que pueden causar problemas y cómo puedes evitarlas.
Algunas de estas áreas incluyen UI de las aplicaciones con enlaces externos a Play Store, descripciones que están más centradas en términos de búsqueda que en un resumen claro de la aplicación y aplicaciones que simplemente actúan como wrapper de WebView alrededor del contenido del sitio web.
Consejos y pautas para desarrolladores: Infracciones frecuentes de las políticas y cómo evitarlas
Droidcon tomó un enfoque interesante durante esta temporada de conferencias exclusivamente en línea cuando combinó todos sus acontecimientos anuales en eventos más grandes, del tamaño de toda la zona horaria. La versión de EMEA correspondiente a esta conferencia se realizó en octubre y todos esos videos (realizados por algunos de los miembros de nuestro equipo, al igual que por muchos desarrolladores de la comunidad más amplia) ahora están disponibles en línea:
Videos
(Mantente al tanto a fin de informarte sobre las versiones para las Américas y APAC, que se realizarán en las próximas semanas).
La serie de capturas de pantalla de video MotionTags publicó dos episodios más desde la última vez.
En el episodio 7, se abarca <KeyAttribute>, que es la etiqueta que contiene propiedades sobre la visualización, como sus valores de transformación y alfa.
En el episodio 8, se abarca <KeyCycle>. Esta etiqueta posee muchos de los mismos atributos que KeyAttribute, pero también ofrece propiedades que definen la forma de onda que se usa para una animación, lo que puede provocar un comportamiento de movimiento complejo verdaderamente interesante. Ten en cuenta que existe una herramienta CycleEditor independiente que facilita la creación y edición de KeyCycles.
Puedes ver estos episodios, junto con el resto de la serie en la lista de reproducción MotionTags:
Hace poco, se lanzó el nuevo nanogrado de desarrollador de Kotlin para Android en Udacity. Esta edición del curso está destinada a personas que desean aprender a compilar apps para Android en Kotlin de la mano de las prácticas recomendadas. Para conocer los requisitos previos y obtener más detalles, consulta la descripción general del programa.
Ten en cuenta que el nanogrado es un programa pago que incluye proyectos con comentarios, asistencia con mentores técnicos y servicios profesionales de Udacity. Sin embargo, el contenido subyacente del curso que desarrolló Google con Udacity es gratuito, y todos pueden consultarlo. Puedes consultar ese contenido en Desarrollo de apps para Android con Kotlin y Android Avanzado con Kotlin.
Desde la última edición de Now in Android, ha habido otro episodio de Android Developers Backstage. Escúchalo en el siguiente vínculo o en tu cliente de podcast favorito:
Romain Guy y yo conversamos con Dustin Lam y Chris Craik del equipo Android Toolkit con respecto a la nueva versión 3.0 de la biblioteca de Paging ("Paging 3"). Esta versión (actualmente en alfa) es una reescritura completa en Kotlin, con corrutinas y Flow, por varios motivos que se incorporarán en el podcast. Consúltalo para obtener más información.
Episodio 151: Paging 3
eso es todo por hoy. Consulta la serie MAD Skills. Descarga las bibliotecas de AndroidX más recientes. Obtén más información acerca de las funciones de lenguaje de Kotlin. Consulta los últimos artículos y videos del desarrollador. ¡Obtén un nanogrado! Escucha el episodio más reciente del podcast de ADB. Te esperamos pronto para ofrecerte más novedades desde el universo de desarrolladores de Android.
Publicado por Greg Hartrell, director de Administración de Producto (juegos de Android y Google Play)
Con el surgimiento de más jugadores y el aumento en el tiempo de juego del año pasado, es más importante que nunca que los desarrolladores de juegos deleiten y atrapen a los jugadores. Para ayudarlos ante esta oportunidad, los equipos de juegos de Google volvieron para anunciar el regreso de la Google for Games Developer Summit 2021, el 12 y 13 de julio.
Descubre las nuevas soluciones para juegos que los expertos de Google están desarrollando a fin de facilitar la creación de juegos increíbles, la conexión con los jugadores y el escalamiento de las empresas. El registro es gratuito y está abierto para todos los desarrolladores.
Regístrate para el evento en línea gratuito en g.co/gamedevsummit y recibirás más detalles las próximas semanas. Estamos ansiosos por compartir nuestras más recientes innovaciones con la comunidad de desarrolladores.
Publicación del equipo de TensorFlow
Gracias a todos los que se unieron a nuestra transmisión virtual en vivo de I/O 2021. Si bien no pudimos vernos en persona, esperamos que el evento haya sido lo más cómodo posible. En este artículo, resumiremos algunas de las actualizaciones que compartimos durante el discurso de apertura. Puedes ver el discurso de apertura más abajo, así como las grabaciones de todas las charlas en el canal de YouTube de TensorFlow. Aquí hay un resumen de algunos anuncios realizados por el área de producto (y hay más en los videos, así que asegúrate de mirarlos también).
El entorno de ejecución de TensorFlow Lite se integrará con los Servicios de Google Play
Comencemos por el anuncio de que el entorno de ejecución de TensorFlow Lite se integrará con los Servicios de Google Play, lo que significa que no tendrás que distribuirlo con tu app. Esto puede reducir en gran medida el tamaño de su paquete. Ahora, puedes distribuir tu modelo sin necesidad de preocuparte por el entorno de ejecución. Ya puedes registrarte para obtener acceso anticipado al programa, y esperamos realizar un lanzamiento completo a finales de este año.
Ahora, puedes usar los modelos de TensorFlow Lite en la Web
Todos tus modelos de TensorFlow Lite ahora pueden ejecutarse directamente en la Web mediante un navegador con las nuevas API de TFLite Web que se unifican con TensorFlow.js. Esta API basada en tareas admite la ejecución de todos los modelos de la biblioteca de tareas de TFLite para la clasificación de imágenes, la detección de objetos, la segmentación de imágenes y muchos problemas de PLN. También admite la ejecución de modelos de TFLite personalizados y arbitrarios con API sencillas, intuitivas y compatibles con TensorFlow.js. Esta opción te permite unificar tu desarrollo web y para dispositivos móviles de AA con una única pila.
Un sitio nuevo de Aprendizaje automático en el dispositivo
Sabemos que el camino más efectivo para que los desarrolladores alcancen Android, iOS y la Web no siempre es el más obvio. Por eso, creamos un nuevo sitio de Aprendizaje automático en el dispositivo para mostrarte las opciones que tienes disponibles, como modelos listos y personalizados, o multiplataformas móviles e integradas en el navegador. Esto incluye rutas de aprendizaje para que transformes una simple idea en una aplicación implementada, con todos los pasos que debes seguir.
Perfil de rendimiento
En lo que respecta al rendimiento, también estamos trabajando en herramientas adicionales para los desarrolladores de Android. TensorFlow Lite incluye compatibilidad integrada para Systrace, lo que se integra de forma fluida con perfetto para Android 10.
Además, las mejoras perf no se limitan a Android. Para los desarrolladores de iOS, TensorFlow Lite incluye compatibilidad integrada para perfiles basados en referencias. Si compilas tu app con la opción de seguimiento habilitada, podrás ejecutar el generador de perfiles Xcode para ver los eventos de referencia, lo que te permitirá obtener más información y ver hasta las operaciones individuales durante la ejecución.
TFX 1.0: AA de producción a escala empresarial
Mover tus modelos de AA de prototipo a producción requiere mucha infraestructura. Google creó TFX porque necesitábamos un framework sólido para nuestros productos y servicios de AA. Luego, lo pasamos a la modalidad de código abierto para que otros también puedan usarlo. Esto incluye compatibilidad para entrenar modelos para aplicaciones web y dispositivos móviles, así como para aplicaciones basadas en servidores.
Después de una etapa beta exitosa con muchos socios, hoy anunciamos TFX 1.0, que ya está listo para la AA de producción a escala empresarial. TFX incluye todo lo que necesita un framework para empresas, como compatibilidad stencia de nivel empresarial, parches de seguridad, correcciones de errores y retrocompatibilidad garantizada para todo el ciclo de lanzamiento 1.X. También incluye compatibilidad sólida para ejecutarse en Google Cloud y en para aplicaciones web, PLN y para dispositivos móviles.
Si estás listo para el AA de producción, TFX está listo para ti. Visita el sitio de TFX para obtener más información.
También compartiremos varias herramientas nuevas para ayudarte a mantener una IA responsable prioritaria en todo lo que hagas cuando desarrolles con AA.
Know Your Data
Know Your Data (KYD) es una herramienta nueva para ayudar a los investigadores y equipos de producción de AA a entender grandes conjuntos de datos (imágenes y texto) con el objetivo de mejorar la calidad de los datos y el modelo, así como para presentar y mitigar problemas de equidad y sesgo. Prueba la demostración interactiva que se encuentra en el vínculo por encima de más información.
Personas + Guía de IA 2.0
A medida que creas soluciones de IA, compilar con un enfoque centrado en las personas es clave para hacerlo de manera responsable, y estamos encantados de anunciar la guía Personas + IA 2.0. Esta actualización está diseñada para ayudarte a implementar las prácticas recomendadas y pautas de IA centrada en las personas con muchos recursos nuevos que incluyen fragmentos de código, patrones de diseño y mucho más.
Además, mira nuestras Herramientas de IA responsable para ayudarte a incluir las prácticas de IA responsable en tu flujo de trabajo de AA por medio de TensorFlow.
Compatibilidad nueva para bosques aleatorios y árboles de potenciación del gradiente
El AA es mucho más que redes neuronales. A partir de TensorFlow 2.5, puedes entrenar con facilidad modelos de bosques de decisión poderosos (que incluyen los favoritos, como los bosques aleatorios y árboles de potenciación del gradiente) por medio de las API de Keras. Se admiten muchos algoritmos de vanguardia para entrenar, interpretar y entregar modelos para tareas de clasificación, regresión y jerarquización. Además, puedes enviar tus bosques de decisión por medio de TF Serving, como con cualquier otro modelo entrenado mediante TensorFlow. Mira los instructivos aquí y el video de esta sesión.
Una nueva pizarra preinstalada, experimentos y un desafío
TensorFlow Lite para microcontroladores te permite ejecutar modelos de AA en microcontroladores y otros dispositivos con unos pocos kilobytes de memoria. Ahora, puedes comprar pizarras Arduino preinstaladas que se conectarán mediante Bluetooth y tu navegador. Además, puedes usarlas para probar Experimentos con Google nuevos que te permitirán hacer gestos y crear tus propios clasificadores y ejecutar modelos personalizados de TensorFlow. Si te interesan los retos, también preparamos un nuevo desafío de TensorFlow Lite para microcontroladores. Puedes verlo aquí. Asegúrate de revisar el video del taller TinyML más abajo en los próximos pasos.
Vertex AI: Una nueva plataforma de AA administrada en Google Cloud
Un modelo de AA solo es valioso si puedes producirlo. Como ya sabes, producir de manera eficiente y a escala puede ser todo un desafío. Por eso, Google Cloud está lanzando Vertex AI, una nueva plataforma de aprendizaje automático administrada para ayudarte a acelerar la experimentación e implementación de los modelos de IA. Vertex AI incluye herramientas que abarcan cada etapa del flujo de trabajo del desarrollador, desde el etiquetado de datos y el trabajo con notebooks y modelos, hasta herramientas de predicción y la supervisión continua, todo unificado en una IU. Si bien muchas de estas ofertas pueden parecerte conocidas, lo que hace que Vertex AI se destaque es la introducción de funciones MLOps nuevas. Ahora, puedes administrar tus modelos con confianza mediante nuestras herramientas de MLOps, como Vertex Pipelines y Vertex Feature Store, para quitarle la complejidad al mantenimiento y la capacidad de repetición del modelo de autoservicio.
TensorFlow Cloud: La transición de la compilación local de modelos al entrenamiento distribuido en la nube
TensorFlow Cloud proporciona API que facilitan la transición de la compilación local de modelos y la depuración al entrenamiento distribuido y el ajuste de hiperparámetros en Google Cloud. Desde dentro de Colab o Kaggle Notebook o de un archivo de secuencia de comandos local, puedes enviar tu modelo para ajustarlo o entrenarlo directamente en la nube, sin la necesidad de usar Cloud Console. Hace poco agregamos un sitio nuevo y funciones nuevas. Míralos si te interesa aprender más.
Un nuevo foro de TensorFlow
Creamos un nuevo foro de TensorFlow para que hagas preguntas y te conectes con la comunidad. Es un lugar para que los desarrolladores, colaboradores y usuarios interactúen entre ellos y con el equipo de TensorFlow. Crea tu cuenta y únete a la conversación en discuss.tensorflow.org.
Esta es solo una pequeña parte de lo que se compartió en Google I/O 2021. Encontrarás todas las sesiones de TensorFlow en esta lista de reproducción y, para tu conveniencia, aquí también están los vínculos directos a cada una de las sesiones:
Para obtener más información sobre TensorFlow, visita tensorflow.org, lee otros artículos en el blog, síguenos en redes sociales y suscríbete a nuestro canal de YouTube, o bien únete a un grupo de usuarios de TensorFlow cercano.