前段时间体验了一把在浏览器中使用 Android Studio 开发 Android 应用,感觉到了前所未有的激动,我之所以激动并不是因为 IntelliJ 全家桶都可以在云端运行,而是这种架构模式可能就是整个移动互联网的未来。

智能手机

自 2007 年 Apple 公司的第一款 iPhone 问世,开启了移动互联网的时代,那时候,iPhone 离我们似乎还很遥远,毕竟那时候的 iPhone 对于学生时代的我来说,还是价值不菲,直到 2010 年,才攒钱买了人生中的第一台智能手机 —— HTC Magic ,不知不觉已经是 10 年前的事情了,在这 10 年间,移动互联网技术日新月异,移动端的技术更替也随之不断刷新大家的认知。

从纯 NativeHybrid 再到 React NativeWeex 再到 FlutterKotlin Multi-Platform ;从 MVCMVP 再到 MVVM ;从 JavaKotlin ;从 Objective-CSwift ;从插件化到热修复;从 Hard CodingAPTKSP ,从 OOPAOP ,从 XML LayoutDSL 再到 Jetpack Compose ,而 IDE 也从 Eclipse ADT 升级到了 Android StudioAndroid Gradle Plugin 也从 1.0 升级到了 7.0 ,App 包体积也从最早的几 MB 变成了上百 MB ……

技术趋同化

近几年来,跨平台技术层出不穷,一直是移动互联网技术的热点,像 React NativeWeexFlutterKotlin Multi-Platform 、小程序等等,无非就是为了追求:

Write once, run anywhere.

跨平台技术已经不是什么新东西了,为什么现在却如此火热了呢?个人觉得主要有以下几个因素:

用户量

移动 APP 的用户量比以往大了几个数量级,在 Qt 的时代,主要还是 PC 为主,每年的用户增长缓慢。在 2010 年,全球移动设备终端用户量还只有 16 亿,而在 2020 年,全球智能手机活跃用户就达到了 35 亿,这还只是手机的用户量,如果加上其它的移动设备,将在 40 亿以上,这 10 年间,整个移动设备的用户量平均以每年 10% 的速度在增长

软件迭代周期

在移动互联网时代之前,软件的迭代周期基本上都是以月为单位,而在移动互联网的时代,需求迭代都是以周为单位,各种 APP 工厂,每周都有新版本发布,再加上有热修复,客户端基本上可以做到每天发新版本,这对于频繁更新的移动 APP 来说,人力资源成了一个很重要的瓶颈。

高校招生人数

从国内历年的招生人数来看,2009 年,全国录取人数为 629 万人,而 2019 年全国录取人数为 820 万人,近 10 年几乎就没怎么增长,面对如此多的 APP 研发资源的需求,可想而知,人才是多么的紧缺,所以才导致了近 10 年来互联网行业平均以每年 10% 以上的速度涨薪,要是跳个槽,随随便便都是 30% 起。

正所谓「窥一斑而知全豹」,从国内的趋势也大致反映出了全球的互联网现状,毕竟全球的智能手机用户群体中,中国的用户就占了四分之一,常言道「穷则思变」,正是在这种巨大人才缺口的情况下,原来不温不火的跨平台开发模式成了移动互联网时代的宠儿,而且这对于管理者来说好处多多:

  1. 原来需要 3 个人才能完成的任务,如果采用跨平台技术,1 个人就能搞定了,人力资源就省了 2/3。人力成本可是一笔不小的开支,按人均 5 万来算,10 个人的团队一个月就是 50 万,一年按 15 薪算下来,1000 万都有点捉襟见肘;
  2. 同一套代码实现,不同平台的逻辑和体验都保持高度的一致性,再也不会出现 Android 上存在的 bug 在 iOS 上没有,在 iOS 上存在的 bug 在 Android 上没有的情况了;
  3. 团队变小了,管理成本也会相应变小了;

技术的困境

从近几年的全球智能手机出货量来看,整体处于下跌趋势,当没有足够多的新的设备来替换旧的设备时,存量旧设备会越来越多,像我还一直用着前几年出的机型,而软件技术的更新丝毫没有放缓的趋势,反而越来越多样化,原来不太被关注的性能优化方面的技术和工具也在最近几年不断推陈出新,工程的复杂度逐年提高,动轭上百个模块和依赖,构建耗时也是随之上升,从以前的秒级别到现在的几分钟,半个多小时不等,为了减小包体积,技术上也是无所不用其极,资源混淆、压缩,代码压缩、优化简直到了令人发指的地步,为了优化构建速度,各大公司也投入了不少人力优化 CI/CD,导致工程复杂度跟构建速度成为一个恶性循环,更有甚者去魔改构建工具,编译器等等。。。

一方面,各大公司都在研究插件化、动态加载、热修复、跨平台技术,另一方面,像 App StoreGoogle Play 又明令禁止动态加载技术,对于跨平台技术也一直语焉不详,而原生技术栈的开发模式已经无法满足快速发布和更新的需求,对于移动端 APP 来说,如何才能快速交付上线,成了一个重要的研究方向。

在现有的模式下,无论是在芯片的算力、电池续航能力还是应用分发等方面,智能手机都有着很大的局限性。对于用户来说,交互稍微复杂一点的 APP 在中低端上就不是那么顺畅,打开一个 APP 要等上好几秒,甚至半分钟,每次我一着急用的时候,它就偏偏半天打不开。对于开发者来说,一遇到线上事故就得发新版本,国内 APP 还能上个热修复,可是 Google PlayApp Store 就不能这么玩儿了。但用户数量在以每年 10% 的速度在增长,如何才能满足用户对于内容、质量和体验等日益增长的需求?

全新的架构

前面有提到 Cloud IDE,我想大家肯定已经猜到了我想说啥了,没错,这就是我想要说的,未来的移动设备,手机也好,手表也罢,在这上面运行的应用很有可能会是运行在云端的,而这些移动设备其实只需要一个基本的输入(键盘)输出(屏幕)系统就够了,就像现在很多的游戏应用一样,客户端只是绘制 UI 而已,不再需要强大的通用算力了,有一块差不多的 GPU 就够了,也就不存在操作系统碎片化导致机型适配困难的问题了,那到个时候,客户端只剩下一个屏幕画布,估计也就没有太多移动端开发工程师的岗位了。

对于用户而言,每打开一个 APP 就相当于连上一台远端的虚拟设备,不同的 APP 厂商提供各自的虚拟设备,貌似又回到了浏览器时代,只不过这个浏览器变成了一个视频播放器了。