Flutter内核源码剖析在线阅读

简介: Flutter内核源码深入剖析,从组件开发到技术综合应用,多角度介绍 Flutter项目开发的方方面面。

第1章

准备工作

本章首先回顾移动端跨平台技术的发展史,其次介绍Flutter的前世今生,最后分析Flutter的运行原理。虽然本书的主要内容是剖析Flutter的源码,但了解这些背景知识,有助于我们对Flutter的底层设计有一个更深刻的认识。

1.1

移动端跨平台简史

1.1.1

跨平台的起源

2007年,苹果公司推出了iPhone第一代,其搭载的iPhone OS 1.0即iOS系统的前身。2008年,谷歌公司也推出了其酝酿已久的智能手机操作系统And-roid 1.0。也就是在这一年的8月,PhoneGap诞生了。经过几年的发展,塞班逐渐退出了历史的舞台,iOS和Android瓜分了移动端的市场份额。至于跨平台技术的历史,则要从和iOS、Android一起诞生的PhoneGap说起。

PhoneGap诞生的原因是一名程序员认为Objective-C的语法过于生硬晦涩,而Web技术已经在PC端取得巨大成功,JavaScript也拥有更多的开发者和社区资源,PhoneGap就这样诞生了。虽然PhoneGap的初衷只是“为跨越Web技术和iPhone之间的鸿沟牵线搭桥”,但是,正如Web浏览器实现了PC端的跨平台一样,可以说PhoneGap为日后的跨平台技术开了先河。

1.1.2

跨平台的价值

从2010年至今,智能手机替代PC成为主要的互联网服务提供平台,移动端跨平台技术的价值也日渐凸显。在传统的开发模式中,一个产品需求的上线需要Android和iOS双端都进行人力投入,但是开发的却是同样的功能。而且即使是同样的功能,也存在着以下问题。

Android和iOS在技术栈上存在客观差异,导致代码实现上不一致。

开发人员水平参差不齐,导致交付的代码在质量上良莠不齐。

多轮迭代之后,双端的代码差异会被放大,形成蝴蝶效应,导致后续的维护更加乏力。

由此可见,Android和iOS的共同存在让技术团队需要双倍甚至更高的投入,才能覆盖到所有用户。但是平台多样化是市场自由竞争的结果,也是开发人员无法改变而只能主动适应的局面。跨平台技术正是适应这一局面的理想切入点。从技术上来说,跨平台技术在理想状态下可以一次开发、多端运行,有助于产品需求的快速上线,降低了开发人员的人力投入和后续维护成本。从用户体验上来说,跨平台技术可以保证用户在任一平台都获得一致的视觉和交互体验,降低了迁移的成本。从商业价值上来说,跨平台技术就是构筑在操作系统上的二级生态,例如Java借助JVM(Java Virtual Machine,Java虚拟机)的跨平台能力,建立了庞大的技术生态,而微信小程序则借助WebView的跨平台能力,建立了自己的产品生态。

某种意义上,跨平台有着超越其自身技术价值的更大价值:创建生态、引领趋势。因此,脸书公司和谷歌公司先后发力,试图占领这块高地。

1.1.3

跨平台的演进

移动端是互联网最重要的服务入口,而跨平台技术无论是从提高开发效率还是扩展商业版图上来说,都蕴含着无限的机会,因此也成为科技巨头的必争之地。本节将按照时间顺序,梳理跨平台技术发展的3个阶段。从技术上来说,跨平台技术要解决的问题有两个。

如何通过一份与平台无关的代码,在不同操作系统上渲染出预期的UI。

如何通过一份与平台无关的代码,在不同操作系统调用预期的底层能力(如相机、蓝牙、传感器等)。

下面将按照时间顺序回顾跨平台演进的3个阶段,以及每个阶段对于以上两个问题的解决方式。

1. Hybrid阶段

在移动端跨平台技术中,Hybrid指的是同时使用Web和Native(Native指代Android或者iOS平台)技术栈进行混合开发的模式。在Hybrid阶段,比较有代表性的方案是Cordova,PhoneGap由于其商业产品的属性,无法直接为开源社区所用,Cordova可以认为是PhoneGap的开源版本。

版权:人民邮电出版社