前言 本来这一篇应该介绍如何搭建Flutter开发环境的,但我想在了解Flutter前,不妨了解一下跨平台技术的演进,这样更有助于学习Flutter,也能认清Flutter的优势和本质。这篇文章还有一个目的,就是希望大家是玩技术的人,而不是被技术玩的人,对于不同的技术要有自己的判断。 1. 跨平台技术的诞生我是2010年开始从事的Android开发,当时会Android和iOS开发的很少,也不火,所有人都在“摸着河底过河”,项目更没有第三方框架一说,大都是自己写的,不像现在各种的框架满天飞。随着移动开发的发展,互联网公司也是层出不穷,有些公司迫于竞争,想要更迅速的更省成本的进行开发,就不再满足Android端一套代码,iOS端一套代码。与此同时,其他技术领域和各大公司也都觊觎着这份大蛋糕,纷纷推出相关的技术,这样跨平台技术应运而生,并且开始在公司中生根发芽。 2. Web AppWeb App是指基于Web的应用,运行于网络和标准浏览器上,相当于一个网页然后加一个App的壳。2014年HTML5的标准规范制定完成,在网络舆论上Web App大有取代Native App的气势,但Web App有以下缺点,使得它始终是“主角的心,配角的命” :
在Web App的基础上,又出现了几个进化者,这里主要介绍PWA。 2.1 PWAPWA(Progressive Web App)意为渐进式增强Web应用,它不是一门技术,而是一个概念,使用多种技术来增强 Web App的功能:
总结起来,PWA的主要的能力就是离线、推送、桌面访问,可以说PWA赋予Web App原生的体验,但是PWA一直不温不火的原因主要有以下几点:
3. Hybrid App除了采用原生和Web开发App,还可以采用HTML5+原生来进行混合开发,这就是Hybrid。 通过原生SDK提供的API,App可以与系统底层通信,以创建 UI
组件或访问系统服务。这些组件被渲染到手机屏幕,屏幕产生的相应的事件会被传回给组件。因为每个平台的系统组件是不同的,你需要为每个平台开发单独的
App,而Hybrid App不必这样,Hybrid App的原生UI组件用来展示交互复杂和渲染要求高的界面,其他的可以交给HTML5来展示。 Hybrid相关的技术有很多,比如PhoneGap、Cordova、Ionic、VasSonic等等,我们大概来了解一下。 3.1 Cordova说到Cordova,不得不提到他的前身PhoneGap,PhoneGap面向Web开发人员,通过使用HTML、CSS和Javascript构建跨平台App。2011年,Apache收购了Nitobi
Software和它的PhoneGap产品,并对PhoneGap进行开源,PhoneGap 2.0版本时,产品更名为Apache
Cordova。目前Cordova支持的平台有Android、iOS、Windows、Mac OS X、Electron。 Cordova同样使用WebView来展示界面,插件是Cordova中不可或缺的一部分,Apache Cordova维护了名为Core Plugins的插件,这些核心插件为App提供访问设备功能,如电池,相机,联系人等。除了核心插件之外,还有一些第三方插件可以使用,你也可以开发一个自己的插件。 3.2 IonicIonic
Framework是一个开源UI工具包,最早的目标是使用HTML,CSS和JavaScript等Web技术开发移动应用程序。由于Web技术的这一基础,Ionic可以在网络运行的任何地方运行,比如
iOS,Android,浏览器,Electron,PWA等等。 3.3 VasSonicVasSonic是由腾讯VAS团队开发的轻量级高性能混合框架,旨在加速在Android和iOS平台上运行的H5首屏。VasSonic不仅支持服务器呈现的静态或动态网站,而且还完美兼容Web离线资源。VasSonic使用自定义的url连接而不是原始网络连接来请求索引html,因此它可以提前或并行请求资源以避免等待视图初始化。在这种并行的情况下,VasSonic可以通过WebKit或Blink内核读取和呈现部分数据,而无需花费太多时间等待数据流的结束。 3.4 微信小程序微信小程序的主要开发语言是 JavaScript ,小程序的开发同普通的网页开发相比有很大的相似性。 其中 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层。 微信小程序本身和App就不是竞争关系,更多的是一个推广渠道,它更像是一张海报,用于快速推广倒流,而App则是要推广的对象。微信小程序的缺点很明显,体验上无法跟App相提并论,功能依托并受限于微信,无法进行拓展。可以说微信小程序就是建立了次级生态,这个生态中微信说的算,其他对手的发展会受到限制。 4. 语言编译转换语言编译转换指的是直接将某个语言编译为一个平台下的二进制文件。比较有名的是Xamarin框架,虽然它在 Android平台是内嵌了Mono虚拟机来实现的,但在 iOS平台下是以AOT 的方式编译为二进制文件的,所以把它归到语言编译转换类型。 4.1 XamarinXamarin始创于2011年,2016年被微软正式收购。Xamarin是Mono项目的一个分支,基于.NET的跨平台实现的一个开源项目。 5. 原生渲染原生渲染在本篇文章中指的是由JavaScript开发并且由原生控件渲染,代表有React Native、Weex、快应用。 5.1 React NativeFacebook曾在移动端步履维艰,他们认为可以不借助任何原生开发手段来实现Facebook的移动应用,因此在早期选择了HTML5,后来发现HTML5的效率始终无法和原生相比,因此在2015年发布了React Native。 5.2 WeexWeex 是阿里开源的一款跨平台移动开发工具,它能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出原生级别的性能体验,并支持iOS、Android、YunOS及Web等多端部署。目前 Vue.js 和 Rax 这两个前端框架被广泛应用于 Weex 页面开发,因此Weex支持Vue语法和Rax语法,而React Native只支持JSX语法。
5.3 快应用2018年3月份,由小米,OPPO,VIVO,华为等10家国内主流厂商成立了快应用联盟。快应用介于移动网页和原生应用之间,第三方应用以移动网页的形式进行开发,最终得到原生渲染的效果体验。快应用框架深度集成进各手机厂商的手机操作系统中,可以在操作系统层面形成用户需求与应用服务的无缝连接,很多只用在原生应用中才能使用的功能,在快应用中可以很方便的实现,享受原生应用体验,同时不用担心分发留存等问题,资源消耗也比较少。对于每台手机设备,应用可以从多个系统入口,引用用户体验产品。
和微信小程序很像,快应用本质上也是要建立次级生态,快应用的架构如下图所示。 快应用实现划分为编译时、运行时两个方面,UX页面源码经过编译时得到JS,然后经过运行时得到界面UI。每一个页面由HTML+CSS+JS组成,编译运行后得到内存中的DOM树。多个页面组成一个项目,编译后得到rpk文件,最终运行时以应用形态呈现。 快应用推出1年后仍然不温不火,面对微信小程序,快应用在流量和入口等关键数据都无法与小程序匹敌,未来发展堪忧。 6. 自绘UI自绘UI指的是通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统平台的原生控件,这样做可以保证不同平台UI的一致性。不用像React Native一样,随着不同平台系统版本的变化,开发者还需要处理不同平台的差异,甚至有些特性只能在单个平台上实现,这样无法保证不同平台UI的一致性。自绘UI框架的代表有Qt和Flutter。 6.1 QtQt产生的时间很早,Qt 第一版于 1991 年由 Trolltech 发布。后来在 2008 年,Nokia 斥资 1.5 亿美元收购 TrollTech,将 Qt 应用于 Symbian 程序开发。2012 年 8 月 9 日,Nokia 将 Qt 以 400 万欧元的价格出售给 Digia。2016年Qt Group Plc从Digia分拆出来,2014年Qt开始支持移动端的Android、iOS、Wp平台。虽然Qt在PC领域发展良好,但在移动端表现不佳,很少有人提及或者用Qt去开发移动端。 6.2 FlutterFlutter是谷歌的移动UI框架,可以快速在Android和iOS上构建高质量的原生用户界面, 它的前身是谷歌试验项目Sky。 Flutter框架采用了分层设计,此设计的目标是帮助开发者使用更少的代码完成更多工作。例如,Material层是由widgets层的普通widget组成的,而widgets层本身是通过来自rendering层的低级对象构建的。 总结跨平台技术的分类没有标准的答案,这里也只是粗略的进行分类,并对每个分类的主流框架进行介绍,实际上还有很多框架没有提到,它们不是没落了,就是缺点明显难以使用,再就是大公司的KPI产物。跨平台技术的演进好比百家争鸣,极大的促进了跨平台技术的发展。在我看来,这些技术让不同技术分支的程序员都可以参与到移动开发中,享受移动开发的乐趣,从这个角度来看这些跨平台技术的优劣之分是很难去评判的。我更希望有一个框架能统一整个跨平台技术,这个框架会是Flutter吗?还是下一个未知的框架?你更看好哪个跨平台技术呢? |
|
来自: hewii > 《App Frameworks》