Google 要用 Flutter 一统移动、桌面开发江湖?

640?wx_fmt=gif

“Flutter 的核心是一个独立的可执行二进制文件,因此它不只能改变移动开发的世界,也能改变桌面开发的世界。你只需编写一次代码,就能够在 Android、iOS、Windows、Mac 和 Linux 上以原生方式发布,还能经过 AngularDart 与 Web 共享业务逻辑——这一点意义重大。"ios

640?wx_fmt=png

Google 官方今日宣布,Flutter 的 1.0 版本正式发布了!程序员

在去年的 Google I/O 大会上,Flutter 首次出如今公众面前,彼时的 Google 表示,这是“一款新的用于建立移动应用的开源库”,而且“Flutter 将会帮你更容易,更快速地开发出界面美观的移动应用。”可是在此以后,业界一直持观望态度,Google 也彷佛偃旗息鼓,再也不折腾。算法

直到今年 2 月,Flutter 推出第一个 Beta 版本,很快便凭借强大的跨平台 UI 框架获得了开发者们的热烈响应,成百上千款基于 Flutter 开发的应用在 Apple Store 和 Google Play 上涌现。在今年 9 月的 Google 开发者大会上,Flutter Release Preview 2 正式公测,并宣布“这是正式版以前的最后一个预览版”。而如今,Flutter 1.0 版本终于正式发布了。api


640?wx_fmt=png

“全新的 UI 设计方式”Flutter微信


通常而言,移动开发者们在同时兼容 iOS 和 Android 时会选择走原生开发路线,把界面和逻辑在不一样平台分别实现,但这每每面临着复杂庞大的工做量、难觉得继的运营维护。所以,也有不少开发者选择用同一套代码兼容多个平台,但这样每每会致使运行速度和产品保真度的损失。架构

正是在这种状况下,Google 向外推出了 Flutter “这一全新的 UI 设计方式”,还表示可以为开发者提供了一箭双鵰的解决方案——既能用原生 ARM 代码直接调用的方式来加速图形渲染和 UI 绘制,又能同时运行在 Android 和 iOS 两大主流移动操做系统上。app

根据 Google 的官方博客介绍,Flutter 是应用内置的一个引擎,具备快速、高效、开放等特色。框架

640?wx_fmt=png

一、Flutter 能够构建界面精美的应用electron

Flutter 具备强大的图像组合能力,开发者能够不受限制地堆叠任何图形、视频、文本和控件。Flutter 内置了一系列的 widgets,这些 widgets 能够帮助实如今 iOS 和 Android 上的良好视觉体验。Flutter 集成并有最大程度地实现了 Material Design——这是 Google 的开放设计系统。工具

二、Flutter 的速度快

Flutter 基于 Skia 2D 硬件加速图形引擎,有媲美原生应用的速度。Flutter 的代码基于 Dart 平台,能够被编译成 iOS 和 Android 平台上 32 位和 64 位的 ARM 代码。

三、Flutter 很是高效

Flutter 引入了 Stateful Hot Reload(保持应用状态的热重载),这个新特性可让移动开发者和设计师们实时迭代应用程序。经过 Stateful Hot Reload,无需从新启动应用就能够在程序运行的时候直接看到代码修改以后的效果,Stateful Hot Reload 改变了开发者们编写应用的方式。据 Google 用户反馈,开发者们表示该特性使得开发效率提高了三倍。

四、Flutter 是开放的

Flutter 是一个开源项目,全球数百位开发者在为其贡献代码。Flutter 的插件生态系统平台也充满活力,有数千款插件已经发布,避免了重复造轮子。因为 Flutter 应用程序使用标准的 Android 和 iOS 的编译打包工具 (build tools),所以它的开放还体如今您可使用原生开发资源。

目前在 Google 内部,Flutter 已经被普遍用于多个产品,好比 Google Ads 已经将其产品的 iOS 版本和 Android 版本转向使用 Flutter。并且据 Google 官方透露,在正式版本以前全世界已经有多个公司开始使用 Flutter 来开发应用,包括 Abbey Road Studios、阿里巴巴、Capital One、Groupon、Hamilton、京东、Philips Hue、Reflectly 以及腾讯等。


640?wx_fmt=png

Flutter 1.0 新特性


这次发布的Flutter 1.0 版本中,Flutter 正式开始使用 Dart 平台新的 2.1 版本,并修复了 Bug 和提升了稳定性。根据 Google 介绍,1.0 版本中将有两个新功能随正式版的预览模式提供给广大开发者,包括引入 Flutter 到现有工程(Add to App)和平台级视图(Platform Views)。

一、引入 Flutter 到现有工程 (Add to App)

起初在构思 Flutter 的时候,Google 主要关注于从零开始构建应用的场景。但事实上受制于不少因素,并非全部开发者都能从零构建。显然,他们更须要可以在现有的应用中用 Flutter 添加新的功能,或者分步骤、分阶段将现有的应用程序迁移到 Flutter。

如今,Flutter 的架构则很是适合于这样的场景,每一个 Flutter 应用都包含了一个用于托管 Flutter 的 Android 或 iOS 容器。此外,Google 还在不断改善渐进式接入 Flutter 的体验,包括更新模板、优化工具、完善指南等等,还能在不使用调试器启动应用的状况下介入和监测现有 Flutter 进程。

二、平台级视图(Platform Views)

此外,为了知足开发者将 Android 或 iPhone 平台的控件嵌入到 Flutter 应用当中的需求,Flutter 中还引入了 AndroidView 和 UiKitView 这两个平台级视图的 widget 到 Flutter,能够将它们分别嵌入到指定的平台中。

Google表示其已经在 Android 平台上预览这一功能数月了,如今是时候将这一特性推广到 iOS 平台了。此外,像 Google Maps 和 WebView 这样的插件也已经能够享受到这一特性带来的种种便利了。

640?wx_fmt=png

据了解,这些功能将于明年二月的季度更新中正式推出。


640?wx_fmt=png

Flutter 项目应用端的拓展和实践


此外,Google 方面也透露,虽然 Flutter 的首要目标平台是 iOS 和 Android,但他们也在不断探索将 Flutter 拓展到手机端之外的更多平台上,Flutter Desktop Embedding 就是其中的一个。

Flutter Desktop Embedding 是一个使 Flutter 运行于 macOS、Linux 和 Windows 等桌面操做系统的项目。这是 Google 以探索的形式向用户展现 Flutter 是有可能运行在一些没有完整桌面环境的小型设备中的。

显然,有这一想法的不仅是Google。在 Android 开发者 Norbert Kozsir 的博客中,就介绍了一个由他和 Simon Lightfoot 创立的 Flutter 桌面应用项目,其不只能够开发真正的应用程序,也能用于快速移动开发。

如下是其博客内容全文:

Flutter 的核心是一个独立的可执行二进制文件,因此它不只能改变移动开发的世界,也能改变桌面开发的世界。你只需编写一次代码,就能够在 Android、iOS、Windows、Mac 和 Linux 上以原生方式发布,还能经过 AngularDart 与 Web 共享业务逻辑——这一点意义重大。

咱们先来看看它的基本思想。

原生桌面客户端,加速移动开发

但在讨论实际的原生桌面应用以前,咱们先来看看Flutter桌面版能为移动开发者带来什么。

启动时间

640?wx_fmt=png

在讨论任何生产力话题以前,有两件不可忽略的事情:一是 Android 模拟器的启动时间,二是 Gradle 的运行时间。

下面的 Gif 中我录制了我本身启动模拟器和运行默认的 Flutter 应用花费的时间,总共花了我 2 分 40 秒(想像一下这段时间能作多少事情)。

640?wx_fmt=gif

Android启动时间和运行Gradle的时间(10倍速)

若是我告诉你,这一切只需不到10秒,你会怎么想?原生方式运行应用,能够跳过在系统上运行Android和运行Gradle的全部额外开销。

再看看这个:

640?wx_fmt=gif

Flutter模拟器启动,原速

注意你都不须要离开IntelliJ,咱们把全部运行Flutter所需的工具都作成了原生应用,能在全部支持Flutter的IDE中使用。

运行时可改变大小

不管是什么应用,你都想测试它在不一样屏幕大小下的表现。该怎么作呢?

一种方式是跟朋友借一大堆不一样尺寸的手机,或者建一大堆各类尺寸的模拟器,以确保应用布局在任何设备上都正常显示。但这看起来太麻烦了。

还有更好的办法吗?有!

640?wx_fmt=gif

这张图应该能说明一切问题

访问电脑上的资源

在开发和测试应用时,若是应用须要访问手机上的资源,那就须要先把全部测试用的文件都传送到模拟器上或设备上,这一步很是麻烦。若是能直接用操做系统的原生文件选择对话框来选择文件该有多好。

没错,这个也能作到!

640?wx_fmt=gif

桌面版支持文件选择对话框

这个功能最大的好处在于桌面版的实现使用了与移动版的实现相同的通道,所以不须要改变任何代码。

热重载和调试

这个功能看上去像是锦上添花,但对于每一个高效的工程师来讲,热重载和调试功能都是必不可少的。因此桌面版中也支持了这一功能!

640?wx_fmt=gif

原生应用中的热重载和调试功能

内存

最后很重要的一项就是内存,对于在笔记本电脑上或开发机器配置不高的人来讲这一点很重要。

Android模拟器会吃掉大约1GB内存,想像一下若是运行两个模拟器(好比测试聊天应用等),再加上IntelliJ和很是吃内存的Chrome,能够想像电脑会有多慢。

640?wx_fmt=png

Android模拟器占用了1GB内存

因为Flutter的嵌入器是原生的,所以不须要Android。这样一来它就很是小了。

640?wx_fmt=png

原生应用只须要100MB内存

原生桌面应用

只是在桌面上运行Flutter应用还不能算是完整的、能用于产品的桌面应用。若是只是这样,那感受像是在桌面上运行移动应用。那么还差什么?鼠标悬停,光标改变,滚轮交互等等,因此项目中也加入了对这些功能的支持。

项目成功地实现了这些功能,而没有改动任何平台代码。因此,它是彻底独立的包,能够包含在任何普通的 Flutter 应用中。可是,跟桌面嵌入器一块儿使用,就会出现奇迹。

640?wx_fmt=gif

用Flutter实现的通用聊天应用,桌面版

这跟在Android模拟器上运行的代码是彻底同样的:

640?wx_fmt=png

640?wx_fmt=gif

同时开发Android和桌面应用

注意它在模拟器上表现得与普通应用同样,但在桌面上就会改变光标,并添加鼠标悬停效果。

桌面小窗体的展现

悬停:

640?wx_fmt=gif

光标:

640?wx_fmt=gif

目前这个项目依然在 alpha 阶段,相关代码很快就发布了(感兴趣的能够在 Twitter 上关注 Simon Lightfoot 以得到最新的消息)。总而言之,这个项目的目标是在不远的将来发布一种易于安装、易于设置、易于使用的东西。

参考连接:

  • https://mp.weixin.qq.com/s/hCIN42OMmmc6HkOveegwWQ

  • https://medium.com/flutter-community/flutter-on-desktop-a-real-competitor-to-electron-4f049ea6b061,译者弯月。

【End】


微信改版了,

想快速看到CSDN的热乎文章,

赶快把CSDN公众号设为星标吧,

打开公众号,点击“设为星标”就能够啦!

640?wx_fmt=gif

征稿啦

CSDN 公众号秉持着「与千万技术人共成长」理念,不只以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让全部的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。

若是你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新看法,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。


推荐阅读:

640?wx_fmt=gif

640?wx_fmt=gif