Flutter 2.0来了!成为跨平台开发终极之选

下一代 Flutter 专为 Web、移动与台式机环境构建而成。

昨天,谷歌正式发布 Flutter 的 2.0 版本。

作为 Flutter 的一次重大版本升级,Flutter 2 将帮助开发人员立足任意平台创建起美观、快速且能够轻松移植的应用程序。在 Flutter2 的支持下,用户可以使用相同的代码库将原生应用程序发布至 iOS、Android、Windows、macOS 以及 Linux 五大系统阵营之上。此外,Flutter 2 还能够完美契合 Chrome、Firefox、Safari 以及 Edge 等网络浏览器,甚至可以被嵌入至汽车、电视与智能家居当中,借此带来最普遍、最具便携性的计算体验。

1专为 Web、移动与台式机环境构建

在移动互联网时代,Android 和 iOS 两大阵营长期共存,再加上体系成熟的 Web 前端技术,导致出现同一个应用需多端重复开发的人力成本问题。对于一个大型企业而言,要想让自己的服务覆盖所有客户,必须反复多次构建同一款应用程序。这种重复还缺乏良好的并行性——他们不会构建多种计费系统或者多种工资平台。整个过程涉及巨大的浪费,而且往往会导致各种二阶问题:如何将多个应用同时迁移至多个平台,要求各个开发团队只能以最慢的速度推进以实现彼此匹配等等。

针对跨平台开发问题,当下还没有比较完美的解决方案,这也导致框架层出不穷:小程序(WebView)、React Native 、Weex、Kotlin Native 等等。同时它们又都存在一定的缺陷,比如小程序(WebView)渲染耗时过长,白屏率会影响转化收益,能实现的功能非常受限;再比如 React Native 的性能不足、问题排除难、维护成本高等。

2018 年 12 月 5 日,谷歌公开发布 Flutter 1.0 版本。

Flutter 通过自底向上自研框架来尽可能减少平台差异,并且 “一出生”就以“UI 漂亮、像素级可控、性能流畅、可媲美原生性能”等特点吸引广大开发者的眼球,自渲染引擎甚至具备开发游戏的能力。

虽然目标是提供快速且统一的跨平台编码能,但 Flutter 1.0 发布的时候,仅支持 Android 与 iOS 应用。之后两年多,谷歌开始将 Flutter 的支持能力逐步扩展至 Web 应用程序、MacOS、Linux、Windows 乃至嵌入式设备当中。不过之前的支持仅处于早期开发阶段,并未向开发人员全面公开,自然也谈不到为生产级应用程序提供支持。但这一切正随着 2.0 版本的落地而有所变化。

Flutter 的 Web 开发工具包自 2019 年以来一直处于测试阶段,此番终于获得了 Android 及 iOS 等环境的同等地位。对于桌面开发人员,谷歌还着手将面向 Windows、MacOS 以及 Linux 的 Flutter 过渡至“稳定”版本。

Flutter 产品经理 Tim Sneath 在采访中表示,“对我们来说,这代表着一个巨大的里程碑。不仅代码本身能够满足严苛的生产质量标准,同时也将软件开发套件真正交付至每一位 Flutter 用户手中。”

在应用程序的设计环节,开发人员需要针对平台上的独特因素做出诸多考量——包括用户与设备之间的交互方式(例如在手机上进行触摸与滑动、在台式机上使用键盘加鼠标)、用户查看内容时匹配的屏幕尺寸、乃至不同平台惯常使用的编程语言等。正因为如此,谷歌需要投入不少精力逐步改进 Flutter 开发套件。

Sneath 表示,“为了达到这个阶段,我们已经付出了大量努力,包括添加国际化支持,例如在 IME 编辑器中支持中文;为桌面支持设计出 TreeView 与 DataTable 等新的功能部件;同时为采用苹果芯片的开发设备提供更好的支持。”

以 Linux 为例,Ubuntu 项目商业化公司 Canonical 透露,Flutter 目前已经成为其默认框架,用于为 Ubuntu 操作系统开发桌面与移动应用程序。去年 7 月,谷歌与 Canonical 已经共同发布公告,宣布 Flutter 将向 Linux 领域扩展,且 Canonical 工程师也将为 Flutter 项目贡献代码。

作为最新扩展的一部分,Canonical 还推出了基于 Flutter 的全新 Ubuntu 安装器应用的早期演示。

Flutter 上的 Ubuntu 安装器

Flutter 此次公布的其他重要更新,还包括 Google Mobile Ads SDK 的 beta 测试版。这套测试版之前一直处于早期试水阶段,新版本将为 AdMob 以及 AdManager 提供多种广告格式。谷歌还推出 Flutter 插件更新,全面涵盖 Authentication、Crashlytics、云消息收发以及云存储等多种 Firebase 服务。

2Dart: Flutter 背后的独门绝技

Flutter 2 拥有灵活的多平台与多设备可移植能力,而这种轻松过渡至 Web、桌面与嵌入式设备的优势,在很大程度上要归功于 Dart——针对多平台开发并进行优化的谷歌编程语言。

在构建应用方面,Dart 提供一套独特的功能组合:

  • 稳健的可移植表现,其编译器能够面向移动与台式机设备生成高性能的英特尔与 ARM 机器码,并为 Web 环境提供经过严格优化的 JavaScript 输出。所有目标皆可使用相同的 Flutter 框架源代码。
  • 支持有状态热重载的迭代开发,充分支持桌面与移动设备,同时提供现代 UI 编程中的异步、并发模式设计提供相应的语言构造。
  • 谷歌级性能水平,可跨越一切平台实现良好性能表现,提供 sound null safety 以保证运行时与开发过程中的 null 约束能力。

从目前来看,还没有哪种语言能够像 Dart 这样将所有功能优势融合起来。也正因为如此,Dart 成为 GitHub 上发展速度最快的语言之一。

Dart 2.12 现已正式发布,也是自 2.0 版本之后我们推出的最大规模发行版,可充分支持 sound null safety。Sound null safety 有望消除 null 引用引发的异常,为开发及运行时提供良好保障,允许开发人员明确指定哪些类型中可以包含 null 值。最重要的是,这项功能并非空降落地:用户可以按自己熟悉的方式将其逐步添加至代码内,而后配合迁移工具实现 null 值保护。

此次更新还包含 FFI 稳定实现,允许用户编写出能够与基于 C 语言的 API 进行互操作的高性能代码;由 Flutter 编写的全新集成化开发者与分析器工具;外加众多性能与体量方面的改进,能够在无需重新编译的前提下进一步实现代码升级。

3Flutter 生态现状

去年 4 月,谷歌表示 Fluuter 的月度开发者用户已经达到 50 万。近一年之后,谷歌只是提到“采用率仍在不断增长”,但并没有提供任何更新数字。在本次发布中,谷歌强调 Google Play 软件商店中已经存在 15 万种 Flutter 驱动型应用程序。但苹果 App Store 等外部商店拥有自己的统计系统,因此相关数据尚不明确。

Sneath 提到,“有趣的是,我们发现部分应用程序会面向特定移动平台添加 Flutter 应用,之后再将其回滚至其他平台。”

目前,世界各地的客户都在积极尝试使用 Flutter,包括微信、Grab、Yandex Go、Nubank、Sonos、Fastic、Betterment 以及 realtor.com 等高人气应用。在谷歌,同样有 1000 多名工程师正在使用 Dart 与 Flutter 构建应用产品,其中的代表包括 Stadia、Google One 以及 Google Nest Hub。

就在几个月前,Google Pay 刚刚转投 Flutter 的怀抱,借此在生产力与质量方面取得了重大进步。通过统一代码库,项目团队消除了不同平台之间的功能差异,并削减了超过 100 万行代码。Google Pay 还报告称,如今团队工程师们的效率大为提升、技术债务显著减少,发布流程也变得更为统一(例如 iOS 与 Android 上的安全审查与试验)。

另一方面,虽然 Flutter 希望提供快速且统一的跨平台编码能力,但对于体量更大、复杂度更高的企业及应用程序,对于 Flutter 这款相对年轻的框架而言,第三方软件库与软件包的匮乏限制了开发人员的手脚。因此对于大多数企业而言,原生软件开发方法仍然占据主流。

Sneath 提到,“生态系统不可能一夜之间构建完毕,从某些标准来看,Flutter 仍然是个年轻的平台。但我们认为,超过 15000 个软件包的涌现已经代表着 Nubank 与 Realtor.com 等厂商在填补这方面空白上做出的持续努力。我们为这种持续增长感到非常振奋。”

参考链接:

https://developers.googleblog.com/2021/03/announcing-flutter-2.html

https://venturebeat.com/2021/03/03/google-launches-flutter-2-0-to-target-developers-across-all-platforms/amp/


手机扫码阅读