Flutter Android破局之路

    不管你信不信,承不承认,Android在流畅度,粘指度等方面都远不及iOS,虽然近些年从软硬件方面不断提升,较早期版本已经有很大的改善了,与iOS的差距不断拉近,但是无论系统如何优化,硬件如何堆叠,始终与iOS的操作体验差了那么一丢丢.很多大拿都分析了原因,各种各样的说法,五花八门.其中比较有说服力的是优先级说法.大概的意思是当时谷歌在研发Android操作系统时,主要的竞争对手是黑莓,而黑莓手机的主要操作是靠键盘,所以Android在早期研发的时候并没有注重触摸这方面.当苹果手机横空出世时,谷歌为了抢占操作系统这个市场,匆忙将Android修改为触摸版本,并免费让大家使用,这就造成了Android系统对手指触摸屏幕的响应级别并没有那么高,不像苹果,只要手指一触碰到屏幕,就将后台所有的进程全部暂停,优先处理UI渲染的任务,所以感觉起来就非常流畅.当然这个说法也有很多人质疑.我们就算信与不信的人在五五开吧,能让一半左右搞技术的聪明人都相信的说法,至少不会是无风起浪,多多少少都有一点这个原因.至少可以证明Android系统先天不足,也就是长在基因DNA里的缺陷.估计很难修复.

    Android另一个令谷歌很头痛的事,那就是版本问题,谷歌当时很大方,全部开源,并免费让大家用,于是造就了一大批的智能手机厂商,大力推动了行业的发展,各手机厂商只要拿Android的源码进行深度定制,就能发布一套自己的操作系统.这导致了很多用户无法及时更新到最新的Android系统,因为购买品牌手机的用户只能等待手机厂商发布新的版本,由于厂商们进行了深度定制,所以无法兼容谷歌原厂发布的Android系统.慢慢的演变为Android版本的控制权落到了几大手机厂商的手里,比如三星.这显然不是谷歌想要的.苹果也常常拿Android系统的更新率开刷.

  最后还有一个另谷歌非常尴尬的问题,那就是Java语言,当时谷歌选定了Java作为Android应用的开发语言.但是Java的版权并不在谷歌手里,而是在Oracle公司那,最后由于Android的火爆带动了Java的流行(当然之前就很流行,现在更流行了),同时Oracle还通过版权问题讹诈了谷歌一把,典型的专利流氓,啥事不做还名利双收,谷歌自然咽不下这口气.不过也得咽啊!

  那么以上种种谷歌该如何破局呢?直接放弃Android操作系统显然不可行,那么大一个生态怎么可能说丢就丢呢.要知道有多少大公司都想推出自己的移动操作系统,但大家都知道很难达到Android那么大规模的用户群和应用数量,没有应用自然不会有用户,没有用户也不会有开发者帮你开发应用,除非你的系统非常牛逼,否则就老老实实用Android.既然不能直接放弃,又无法修复以身俱来的硬伤,那可怎么办?前面说了,直接放弃是不可能的,那么我们就间接放弃.做过项目实施的同学们应该都有经验,在新旧两套系统切换的时候,一般都不会一次性将系统直接迁移到新的版本上来,而是会让新旧两套系统并行一段时间.让用户逐渐适应,慢慢过渡到新系统上.而谷歌要促成这件事,有两个必要条件,一.你要有个新的操作系统,二.要让应用能够同时运行在两个操作系统上.新的操作系统其实已经有了,我就不卖关子,就直说了,叫Fushcia,大家直接看维基百科给出的介绍

Fuchsia是Google开发的操作系统[1]。和以前Google开发的操作系统,如基于Linux内核的Chrome OS和Android等不同,Fuchsia基于新的名为Zircon的微内核[2],受Little Kernel启发[3],用于嵌入式系统,主要使用C语言和C++编写[4]。Fuchsia的设计目标之一是可运行在众多的设备上,包括移动电话和个人电脑。

  好了,操作系统有,那么怎么让应用能够同时在两个系统上都能运行呢?这就要请出今天的主角了,那就是Flutter框架,同样我们先来看看维基百科是怎么说的

Flutter是一个由谷歌开发的开源移动应用软件开发工具包,用于为Android和iOS开发应用,同时也将是Google Fuchsia下开发应用的主要工具[2]。

Flutter第一个版本支持Android操作系统,被称作“天空”。 它于2015年的Flutter开发者会议上被公布,宣称其目标为实现120FPS的渲染性能[3]。

  可以看到其实Flutter的前身就是SKY,根据命名规则,我们可以预测谷歌的下一个跨平台工具的名字,有首歌唱曰:”天空飘来五个字,那都不是事…..”,所以谷歌下一个跨端开发工具的名字一定叫”五个字”(five words).嘿嘿!

  不开玩笑了,文中说Flutter号称实现120FPS的渲染性能,那么在没有硬伤,脱胎换骨全新的操作系统下,流畅度远超苹果不敢说,但决不会差.这些年跨平台的开发框架我们见的多了,什么phoneGap,react Native,weex等等,多了去了,凭什么说Flutter性能就能远超他们.这里网络上有很多介绍,我就不多说了,简单的总结一下,其他的跨端解决方法分为几种,一种是根本就是web,比较低略;另一种是用Html+CSS+JavaScript的方式,做界面和功能,生成一个DOM树传递到Native端,Native端通过虚拟DOM树来渲染源生界面,通过JavaScript引擎来处理事件.目前比较主流的方式;还有一种通过响应式编程框架简化web视图的创建,最后也要有个桥接器来桥接native端源生控件.这些框架都有个硬伤,就是无论你用什么做界面,最终都要通过一个桥接器来转换为源生的控件,这就是性能损失的罪魁祸首.

  那么Fltter是怎么做的呢,Flutter采用了Dart预编译语言作为他的开发语言,也就是说在native端,只要有appEngine运行Dart就行了,大概和docker,Java虚拟机,以及iOS中的sandbox沙盒类似的技术.而真正革命性的东西是Flutter有自己一整套完整的UI库,在Flutter中统一称为widget(组件).这样就和源生的控件没有半毛钱关系了.所以也不存在什么转换.大家可以去网络上查看一下他的组件库,还是非常漂亮的.事实上,到目前为止Flutter是我知道的唯一一个提供视图,不需要桥接器的跨端SDK

image

注意:”Fuchsia的设计目标之一是可运行在众多的设备上,包括移动电话和个人电脑”,这里的众多设备非常值得回味,不禁联想到了iot和一劳永逸:),可以看到Flutter要解决的绝不仅仅是iOS和Android.而是站在了更高的高度上.

  好了,操作系统和新旧两个系统都能运行应用的解决方案都有了,还顺带把iOS也处理了.剩下的只是时间问题,慢慢的温水煮青蛙.

  最后我们还剩一个问题没解决,Java语言的版权问题,这个其实好办,换嘛,世界每天都在变化,有什么不能换的,是吧.前面说的Dart就是取代者之一.嗯??怎么有个之一?是的,Java语言经过多年的发展,在很多领域都占有很大的分量,比如服务器端,以及移动端,想通过一种语言直接取代它比较不可能,而且各个平台有各自的特色.靠一种语言来开发多端的应用并不是好的方法,所以谷歌打算用3个语言来取代Java,大家如果有注意谷歌近些年发布的各种语言及工具就能知道个大概了

  • 用go语言做服务器端(go语言函数式编程,在处理并发上有很大的优势)
  • 用Dart做前端语言
  • 用kotlin做移动端开发

  如果让我在dart和kotlin之间选择一个来学习的话,我会选择Dart,你们要问我为什么,原因很简单,和Java的问题一样,虽然kotlin最近很流行,但是版权同样不是谷歌的,而是那家做IDE的JetBrains公司开发.嘿嘿!只有Dart才是谷歌完完全全自主知识产权的.才是谷歌的亲儿子,亲小姨子,想怎么捏就怎么捏,想怎么调戏就怎么调戏.

  到了总结的时候了.

  苹果公司应该还没到强弩之末的地步,但是感觉后乔布斯时代很难看清他们的大方向,没有新产品线,都仅仅是一些小升级,HomeKit也没什么建树.

  反观谷歌,这些年看似东打一枪,西放一炮,飘忽不定,不知道想要干啥,其实是在布局,下一盘很大的棋.我看好你,手握长矛破局之时,指日可待.从牌面上看,这一局我暂时先押谷歌.

  飘飘无所似 长矛落指间

附:这些都是个人猜想,大家仅做参考,要知道谷歌砍起产品线来也是很狠的.

原创文章,转载请注明出处,谢谢!