十年看移动技术的发展

文/灵翼

Posted by Egbert on October 18, 2019


2008年前,移动端还是塞班系统横扫手机市场,诺基亚销售广告漫天飞,那时候移动端的产品还停留在QQ,飞信,以及一些第三方应用。移动市场还是大部分空白,大家更偏向使用PC接入互联网。
2008年,Google推出的Android 1.0 版本(2007年,IOS 雏形 第一代系统诞生)。
2010年,Google推出 Android 2.2 以及2.3版本。
2010年,Apple推出了 IOS4版本,同时,IPhone4问世。
2011年,Android手机已占据全球智能机市场48%的份额,并在亚太地区市场占据统治地位,同时Apple手机面向中国高消费群体,紧随其后。终结了Symbian(塞班系统)的霸主地位,跃居全球第一。
2011年至今,中国以及整个世界,开始陆续进入了移动互联网时代。
距今,移动互联网的发展已经有十年的时间。我从几个维度来看一下这十年来移动技术的发展。

1.移动操作系统的发展

要说互联网技术的发展,我认为有必要先说一下操作系统。操作系统的变革推动了移动市场的发展,让更多的开发者,更多的企业将目光集中于Android 及IOS,让APP 市场百花齐放。

Android技术演进方向

  • 从Android 1.0发展到Android 4.0,系统各项功能和特性迭代到一个较完善的阶段;
  • Android 4.1系统,Google开展了黄油计划(Project Butter),为了让Android系统摆脱UI交互上的严重滞后感,希望能像“黄油”一样顺滑。
  • Android 4.4系统,Google开展了瘦身计划(Project Svelte),力求降低安卓系统的内存使用,解决低端机型升级难的问题,让Android 4.4可正常运行在所有Android手机,从而减少安卓系统继续碎片化。UI设计上,支持新的“沉浸式模式”,用户界面由过去的黑色与蓝色为主的色调转向带有透明度的浅色系,视觉语言变得更加明亮与现代化。
  • Android 5.0系统,Google开展了伏特计划(Project Volta),力求提升续航能力,这方面Google落后于业界厂商。UI设计上,使用全新的扁平化Material Design设计风格,更加清新与质感的设计,统一Android设备的外观和使用体验。
  • Android 6.0系统,Google引入新的运行时权限,让用户能够更好地了解和控制权限;引入了Doze模式,进一步提升电池续航能力。UI设计上,新增夜间模式,大幅改进通知栏,让通知更简洁。
  • Android 7.0系统,引入新的JIT编译器,对AOT编译器的补充,可节省存储空间和加快更新速度;进一步优化Doze唤醒机制;UI设计上,支持分屏功能;
  • Android 8.0系统,Google开展了Treble计划(Project Treble),重新架构Android,将安卓系统框架与Vendor层解耦,力求彻底解决安卓碎片化这一老大难的问题,这是安卓系统架构最大的变化。系统层面加强对后台服务、广播、位置的管控限制。
  • Android 9.0系统,引入神经网络API,采用机器学习的思路来预测用户使用习惯来做省电优化,继续强化Treble计划;文件系统(sdcardf/F2FS)持续提升;私有API的限制进一步规范化Android生态,强化隐私和安全,硬件安全性模块以及统一生物识别身份验证界面。 UI设计上,新的手势导航,加强支持刘海屏,UI搜索界面使用到机器学习,AI正在逐步强化Android系统。
  • Android 10.0系统,Google开展了主线计划(Project Mainline),相关模块(Modules)不允许厂商直接修改,只能由Google应用商店来更新升级,强化用户隐私、系统安全与兼容性。支持脸部生物识别。

以上内容摘录自 原文 《Android技术架构演进与未来》

IOS技术演进方向

关于IOS发展发现可参考 百度百科 IOS

总结

总体来看,Android 和 IOS在发展方向上还是有一定的相似性。

在发展初期,它们着重致力系统的拓展性和视觉上的交互体验。开放更多的功能,让用户有更多的选择,无论是办公还是娱乐上。同时,改善视觉以及交互体验,增加用户粘度。

其后,两款操作系统更加注重用户的隐私安全,电池续航能力,同时增加硬件方面的性能支持,全面提系统优越性。另一方面改进两款系统在野蛮生长阶段留下的一些问题。

随着技术的不断发展,后来在移动系统上又增加了AR,VR等能力的支持,同时紧随市场的发展趋势和需要,增强用户体验。

不过,Android系统的占比一直遥遥领先于IOS,甚至最近占比的距离在进一步拉大。
图片为2018年Q4的在国内移动终端系统占比情况,数据来源于 国家计算机网络应急技术处理协调中心

2. 移动技术栈

  • 2009—2013,起始阶段。
  • 2013—2015,野蛮生长阶段。
  • 2015—2018,精细化运营阶段。
  • 2018—至今,多平台共存阶段。 互联网这十年发展至今,我大致将它们分了四个阶段。

第一阶段(2009 — 2013)

在这个阶段,是移动互联网的起始阶段,随着Android 和 IOS系统的普及,越来越的用户群体由PC端向Moblie端倾斜,那么在无线市场上,出现了很多机遇。

由此,越来越多的人意识到:移动互联网的春天,到来了。

无线技术体系不够成熟,加上无线开发成本过高,资源短缺。并且当时web技术盛行,所以APP市场选择 web技术为主先形成一套完整的用户体系,然后开始使用Native去填补Web技术的漏洞。

第二阶段(2013 — 2015)

随着移动技术体系开始逐渐成熟,并且体系化,同时在互联网领域内,迎来了一波无线开发的高潮,尤其是Android开发,凭借着Android的开源优势,越来越多的开发者开始转型到无线中。

在这个阶段,是移动互联的野蛮生长阶段。在这个阶段,由之前PC向无线的过渡阶段实现了成功转型。

由此,越来越多的人在移动互联网的春天中,改变着人们的生活方式。从出行、购物、点餐,到娱乐、社交等方方面面。

在技术层面上,由于越来越多的开发者紧跟潮流,加入无线开发中,填补了无线技术人才短缺的市场,在APP市场上,主要以Native技术为主,摒弃掉web技术的落后性,极大的增强了用户体验。同时,也积累了一大波移动互联网的用户。

第三阶段(2015 — 2018)

这个阶段中,无线端的人才较上个阶段,基本有饱和趋势。但不意味着移动互联网的发展进入了瓶颈期。 越来越来的人,从无线端开发,着手向AR,VR,深度学习,数据挖掘等多个方向进军或者转型。

根据用户偏好画像,提供适合用户的服务。移动互联网进入精细化运营阶段。

从技术层面来说,像HyBird,React Native,weex 这类跨平台技术盛极一时。各个大公司都有属于自己的一套技术框架存在。

同时,在Native原生框架中,各个公司由于业务前期扩张速度太大,同时又迫于业务发展,都在不断的重构自己的框架,但是这些重构都具有一定的相似性,于是插件化、模块化等动态化技术开始出现。

总结来看,这个阶段主要是以Native动态化技术为主,同时跨端技术辅助的一个技术解决方案。

第四阶段(2018 — ???)

我把这个阶段成为多端共存阶段。主要多了一个端,Miniapp 小程序端。

为什么把小程序这个单独要拆除来?
因为这个小程序影响还是很大的,并且也是在短期内不断发展的一个技术方向。

为什么小程序有市场

  • 轻量、方便、免安装。 就是因为现在APP 太重了,小程序太轻了,而且更方便,用户更容易触达,用户不需要安装超级APP ,便可以拥有良好的用户体验。
  • 门槛低,成本低。 对于小公司而言,相对app,可以轻易的开发一个小程序给用户,迅速占领小程序市场。
    而对于大公司而言,小程序是一个获取用户重要的平台,不可获取。

小程序会替换掉超级App吗?
我想应该不会,小程序和超级APP 就像是犀牛和犀牛鸟。一个是小,一个是大,相辅相成。
如果用户目的明确,那么不需要安装app,那么就可以达到目的,并且链路更简单。所以是有市场的。 如果用户想获取更好的体验,更全面的服务,更多内容,那么还是需要超级APP的。
以上,这是小程序。还有一个方面,我们还来说Native的发展。

上个阶段,我们已经说了跨端技术,各个技术方案百家齐放,各有千秋。但是仍然没有一个统一的解决方式。
但是这个阶段,仍然没有,至少照目前来说,还是没有的。
但是,Google 站了出来,发布了Flutter,想要一统Android 还有 IOS 市场, 由于目前Android 市场在全球的占有率高达85% ,那么依照现在来看,Google的Flutter还是有一定的市场的。
同时,Apache站了出来,推出了weex,但是一直没敢发布1.0,最新版的现在还是0.24。
阿里也站了出来,搞了一套Rax,基于weex引擎,只是换了一套DSL, weex都没发布1.0,那么rax也不敢发布吧?
这是跨端技术,至于Native本身工程框架上,依然保持动态化的发展。

之前的插件化技术,由于各个插件在消息交互工程中性能不理想,开始着手模块化。
同时Google 也提出了 APP Bundle的技术化方案,按需加载。但是必须要在Google Play上发布,这样的话,国内的引用基本上全部抹杀掉,但是思想被复用。

3. 移动原生技术栈

上面我们说了移动端整体技术栈的发展,对于原生的Native 技术栈,还是有必要单独拎出来说一下。
为什么会有bundle化?
业务发展的不断扩大,package模式已经不能够满足发展需求。需要进一步独立。

为什么会出现Hybird app ?
主要问题是Android虚拟机机制的设计缺陷,导致2.3版本下方法数的超标。同时使用web节约人力。

为什么出现MVP,MVVM框架 ?
前期的开发都是web模式,MVC框架思想深入人心,后来为了进一步解耦,盛行MVP,MVVM等框架。

为什么出现插件化?
插件话有多种技术方案,分为本地插件化和服务插件化。
本地插件话主要还是为了进一步解决各个业务之间的耦合性,提搞开发效率,增加编译速度。
服务插件化实现按需安装,进一步减少了包的大小。

为什么要跨端 ?
主要为了节省人力,统一技术栈。
为什么要有能力层沉淀?
主要是为了一份业务技术能力,提供多个平台使用。

为什么要进行动态化部署?
减少前端的业务逻辑,更多的业务在后端部署,及时更改,及时发版。

4. 编程语言的发展

实际上这个图划分的不是特别精确,对于上层的DSL来说,只是一个实现手段。
起,Android端开发使用Java来实现,C++作为NDK的开发,后来出现了RxJava,RxAndroid 这种响应式框架,其实也是一种DSL的实现手段,最后都会编译来.class文件。

同理,IOS也是一样,Swift的出现,让编程变得更简单。

Kotlin是 Google 推出的替换掉Java的一个编程语言,同时最了一个APPCan的Plugin支持IOS开发。这样就变成了跨平台。
Google 推出Flutter后,Dart语言变成了跨平台语言。
总之,跨平台DSL的出现一定是在某种场景下有一定的收益。

5. 无线研发成本

技术趋势驱动

随着无线端技术的发展,尤其是到了第三第四阶段。我发现了一个普遍的现象。

无线前端的这一层越做越薄,同时,业务服务层越做越厚。越来越多的无线Native开发的工程师转做Web开发或者后端开发。

这是有据可寻的。无线端接入了动态化部署的能力后,更多业务逻辑放在后端,那么前端教稳定,不需要投入太多的人力资源维护,当然,业务服务端会越做越厚。

而另一原因是,小程序平台进入市场后,由于小程序多采用web技术,所以一部分无线Native工程师转型做web开发。

从以上结论可以得出,app无线研发技术到了后期,前端的投入成本会越来越低。从一部分上也相对提高了效率。

技术体系成熟

无线技术发展的积累已经近10年。很多优秀的开源框架的推动,同时面对各种场景,在市场上有很多的成熟解决方案,Huawei,Ali,Tencent 等诸多公司以及很多中小公司为客户提供一站式成熟解决方案,推动移动潮流的发展。现在构建App的人力成本越来越少。

6. 后续

移动互联网这十年的时间,通过技术,创造了很多奇迹。

技术改变了人们的生活,但是在我看来,在历史的长河中,这还只是一个小心的阶段。
我相信,在未来,会有很多的奇迹,更多的精彩。我们的生活,会因为技术的创新而实现一点点的进步。