Flutter从0基础到App上线
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 移动App开发的前世今生

2007年1月9日,第一代iPhone正式发布。在硬件上,它具有3.5英寸的触摸显示屏、金属材质的机身和仅提供拍照功能的相机,支持多点触控;在软件上,用户需要付费才能使用完整版的iPhone OS(后来改名为iOS),甚至连壁纸都无法实现自定义更换。这些配置在现在看来也许非常落后,但在当时iPhone的出现着实让人眼前一亮。它让人们意识到,原来手机并不只是能打电话、发短信,还可以用来浏览网页、拍摄照片,而且运行在手机上的程序那么实用且美观。

2008年6月,随着iPhone 3G的发布,iPhone OS 2.0.1版本随之发布,App Store也随之诞生。从此,用户不仅可以使用设备出厂自带的几款应用程序,还可以从App Store中浏览和下载自己需要的应用程序;同时,那些为iPhone OS(iOS)开发App的第三方开发者也可以从付费应用中获利,移动App的开发正式兴起。

另外,2003年10月,Andy Rubin等4人在加利福尼亚州创建了Android Inc.,并开发了Android操作系统。令人没有想到的是,起初这一仅面向数码相机的操作系统,由于智能手机的快速成长,已经逐渐成为面向智能手机的操作系统。2005年在被Google收购后,经过不断改良、创新并开源,最终Android操作系统遍布在不同厂商、不同价位的设备上。截止到2010年,市场占有率遥遥领先。当然,Android操作系统达到如此普及的地步和丰富多彩的App是分不开的。

根据Net Market Share机构的统计,截止到2018年12月,在全球的移动操作系统市场占有率中,Android以68.93%的占比遥遥领先于第二名iOS的29.29%,成为市场占有率最高的移动操作系统。

开始,在人们开发这些用于不同操作系统平台的App时,都是使用平台各自的编程语言和特性分别进行开发。其中,Android平台大多使用Java(近些年诞生了Kotlin),iOS平台大多使用Objective-C(近些年诞生了Swift)。这也就意味着,对于同样一款程序,人们往往要经历两次完整的软件开发过程,而这一过程有时是很消耗时间成本的,少则几个月多则一年。而在互联网行业竞争异常激烈的今天,如何减少成本、缩短开发周期已成为需要解决的重要问题。

后来,人们渐渐地意识到,如果能有一种开发语言或者开发工具,只需要编码一次就能开发出既适用于iOS平台,又适用于Android平台的App,那么将会使开发效率翻倍。于是,跨平台的思维就诞生了。

经过开发者对跨平台的不懈努力,到今天为止,实现跨平台的技术路线概括起来有Web App,Hybrid混合开发和跨平台框架三条。

Web App可谓是其他两条路线的前辈了。因为早在智能机尚未普及的时候,适用于移动端的网页就已经出现了,如Wap腾讯新闻、Wap QQ等,其中通过Wap QQ可以和QQ好友聊天、去QQ空间偷菜等。这类App无须用户安装,只需要访问指定的地址就可以运行。与上述这些传统的Wap网站相比,Google推出的PWA(渐进式网络应用)更像一个原生应用。它可以在主屏幕上创建快捷方式,以完全独立的方式运行,甚至在断网状态下依然可用,其体验和原生应用很相近。但是,PWA依然有局限性,考虑到受网络环境的影响较大,因此在我国的使用率并不高。

Hybrid混合开发是指App的一部分采用原生技术开发,另一部分使用Web网页开发,二者之间依靠WebView交互。为了更好地处理这种交互,诞生了很多用于混合开发的框架,如PhoneGap(后来的Cordova),还有国产的DCloud。它们都是通过JavaScript去访问设备的硬件,以实现和原生App同样的能力。但是它们仍然有局限性,即当WebView性能降低时,App的反应随之变慢,用户体验极差。

在跨平台框架中,我们比较熟悉的是React Native。React Native的渲染在UI层,使用的仍然是平台各自的控件,因此,在性能上要优于Web App和Hybrid模式,而且支持热修复,这为App的更新提供了方便。但是,它在动画性能上仍略显不足,而且并不能完全摆脱原生代码,再加上调试困难使得一部分人不得不放弃React Native,甚至连Airbnb的技术团队也宣布弃用React Native。

Flutter最早出现在2015年,属于跨平台框架,其前身为Sky,并使用Dart编程语言作为开发语言,提供了最为接近原生的体验。

为什么选择Flutter?它到底有哪些地方吸引我们?和其他框架相比,它又有哪些优势?带着这些疑问,我们进入下一节的学习。