ARTICLE · 1148799
安卓演化史 · 03|从分裂到统一,再到流畅
2011–2013:只给平板的 Honeycomb、合二为一的 Ice Cream Sandwich、专治卡顿的 Jelly Bean、为低端机瘦身的 KitKat

2011 到 2013 年,安卓先是分成了手机和平板两条线,又在 4.0 合回一套系统;之后两年,重点从加功能转向了流畅和省资源。这一篇讲这四个版本各自解决了什么问题,以及卡顿、内存和安全这几件事背后的原理。

图1|三年:从分裂到统一,再到流畅
2011 年初:一个只给平板的版本
2010 年 4 月,iPad 上市,平板电脑成了一个新品类。安卓当时的 2.x 是为手机设计的,屏幕一大,界面就只是把手机界面拉宽,空空荡荡。
2011 年 2 月 22 日,安卓 3.0 发布,代号 Honeycomb,首发机型是摩托罗拉的 Xoom 平板。这是安卓历史上唯一一个只给平板用的大版本。
3.0 的界面完全重做,换上了一套叫作「全息」的深色主题。屏幕底部多了一条系统栏,返回、主页、最近任务三个按钮第一次以屏幕虚拟按键的形式出现,而不是机身上的实体键。应用顶部有了统一的操作栏,放标题和常用操作。最近任务列表可以直接看到每个应用的缩略图。系统的二维绘图开始可以交给图形芯片加速。之后的 3.1 支持了 USB 外接设备和可调整大小的桌面小部件,3.2 适配了更多尺寸的平板。
但 3.0 有一件事和以往不同:Google 没有在发布时公开它的源代码,理由是这一版专为平板赶工,还不适合直接用在手机上,不希望被厂商随意移植。这引发了不少关于安卓是否真的开放的讨论。3.x 的代码直到当年 11 月才随 4.0 一起公开。
结果是,2011 年的安卓分成了两条线:手机上是 2.3,平板上是 3.x,两边的界面、接口都不完全一样。

图2|两条线,合成一套系统
Fragment:让一个应用同时适配手机和平板
两条线终究要合并,问题是应用怎么办:同一个应用,在手机上和平板上该怎么显示?
3.0 给出的答案是 Fragment。在此之前,安卓应用的界面以 Activity 为单位,一个 Activity 基本就是一整屏。Fragment 是比它更小的单元,可以理解为一块可以复用的界面片段,有自己的布局和生命周期,放在 Activity 里面。
以邮件应用为例,可以做两个 Fragment:一个是邮件列表,一个是邮件正文。在平板上,一个 Activity 里左右并排放这两块;在手机上,屏幕放不下,就先显示列表,点开后再显示正文。代码是同一套,只是组合方式不同。

图3|Fragment:同一套代码,两种布局
为了让旧版本手机上的应用也能用上这套写法,Google 还推出了支持库,把 Fragment 等新接口打包进应用里,在 2.x 上也能运行。这种「新接口通过库下放到旧系统」的做法,后来成了安卓应对碎片化的常规手段。
4.0 Ice Cream Sandwich:手机和平板重新合到一起
2011 年 10 月 19 日,安卓 4.0 发布,代号 Ice Cream Sandwich,首发机型是 Galaxy Nexus。它把 2.3 和 3.x 合并成了一套同时支持手机和平板的系统。
4.0 带来的变化很多,最直观的是外观。系统采用了一套叫作 Holo 的设计语言,比 3.0 的全息主题更简洁;换上了专门为高分辨率屏幕设计的 Roboto 字体。2012 年初,Google 又发布了面向开发者的官方设计规范,安卓应用第一次有了统一的设计参照。
手机上也开始使用屏幕虚拟按键。Galaxy Nexus 正面没有任何实体按键,返回、主页、最近任务都在屏幕上,可以根据场景隐藏或变化。功能方面,4.0 加入了人脸解锁,可以按应用查看和限制流量,电源键加音量减可以截屏,两台手机背靠背就能通过 NFC 传内容。
技术上,从 4.0 开始,面向新版本开发的应用默认开启图形硬件加速,界面绘制主要由图形芯片完成。
4.1 Jelly Bean:专门治卡顿
到 2012 年,安卓在功能上已经不输对手,但有一个问题一直被诟病:用起来不够流畅,滑动列表时会一顿一顿的。2012 年 6 月底发布的 4.1 Jelly Bean,用一个专门的项目来解决它,叫 Project Butter。
要理解卡顿,先要知道屏幕是怎么刷新的。手机屏幕一般每秒刷新 60 次,也就是每 16.7 毫秒要准备好一帧新画面。如果某一帧没有按时画完,屏幕只能把上一帧再显示一次,用户就会感到一下停顿,这叫掉帧。
4.1 之前,安卓的绘制和屏幕刷新并不同步:系统什么时候开始画下一帧,和屏幕什么时候要用这一帧,没有严格对齐。有时候一帧开始得晚了,明明来得及画完也会错过。Project Butter 做了三件事:
一是 垂直同步,让每一帧的绘制都在屏幕刷新信号到来时开始,节奏和屏幕完全对齐;
二是 三重缓冲,多准备一块画面缓冲区,当某一帧画得慢了,后面的帧不必干等,可以提前开始;
三是 触摸加速,手指一碰到屏幕,就把处理器频率临时调高,保证滑动刚开始的那几帧不掉。

图4|一帧 16.7 毫秒:卡顿与 Project Butter
同时,Google 还给开发者提供了分析每一帧耗时的工具,方便找到自己应用里的卡顿来源。在硬件够用的前提下,4.1 的界面基本能稳定在每秒 60 帧,流畅度的口碑从这一版开始明显好转。
4.1 还带来了 Google Now 智能助理,以及可以展开、带操作按钮的通知,比如在未接来电通知里直接回拨。同时首发的 Nexus 7 是一台价格亲民的 7 英寸平板,安卓平板从这时起开始有了起色。
4.2 和 4.3:小版本里的大改动
Jelly Bean 前后有三个小版本。2012 年 11 月的 4.2 让平板支持多个用户,各自有独立的应用和数据;锁屏可以放小部件;通知栏里有了快捷设置开关。2013 年 7 月的 4.3 支持了低功耗蓝牙,这为后来的手环、手表等可穿戴设备打下了基础;还支持了新一代图形接口 OpenGL ES 3.0。
4.3 里还有一个普通用户感觉不到、但对安全很重要的改动:开始引入 SELinux。
第一篇讲过,安卓的沙箱是让每个应用使用独立的 Linux 用户,靠文件权限把应用彼此隔开。这种方式叫自主访问控制,规则由文件的所有者决定。它的弱点是:一旦某个进程拿到了最高权限,比如被漏洞攻破的系统服务,这套隔离就挡不住它。
SELinux 是强制访问控制,在用户权限之外再加一层由系统统一制定的策略:每个进程只能访问策略明确允许的资源,即使它拥有最高权限也不例外。4.3 先以只记录、不拦截的宽松模式引入,4.4 对部分关键进程开始强制执行,到 5.0 覆盖全部进程。

图5|两层隔离:用户沙箱与 SELinux
4.4 KitKat:为低端机瘦身
2013 年 10 月 31 日,安卓 4.4 发布,代号 KitKat,首发机型是 Nexus 5。
这一版的核心目标被称为 Project Svelte,意思是让系统变得苗条。当时安卓手机已经卖到了全世界,大量入门机型只有 512MB 内存,跑不动新版本,只能停留在 2.3。版本碎片化很大一部分就来自这里。
Google 的工程师把测试机的配置刻意降到入门水平:只开一个处理器核心并降低频率,内存限制在 512MB,屏幕分辨率设为 960×540,然后逐项削减系统自身的内存占用,包括系统服务、预装应用和后台进程。系统还新增了低内存设备的标识,应用可以据此关掉一些耗资源的效果。结果是 4.4 可以在 512MB 内存的手机上流畅运行,新系统终于能装到入门机上。
4.4 的其他改动包括:沉浸模式,让视频、游戏、阅读应用可以隐藏状态栏和导航栏全屏显示;系统级打印;基于主机的卡模拟,让手机 NFC 支付不再依赖 SIM 卡里的安全芯片;统一的文件选择器;以及基于 Chromium 的新版网页组件。
另外,4.4 在开发者选项里悄悄放了一个新的运行时 ART,可以替代 Dalvik。它的思路是在安装应用时就把字节码编译成机器码,而不是运行时再编译。这在当时还只是预览,到下一个大版本才正式转正,那是下一篇的内容。

图6|3.0 到 4.4 版本对照
这三年:安卓变成了什么
这三年里,安卓在市场上的位置也发生了变化。2012 年 3 月,Android Market 改名为 Google Play,把应用、音乐、图书、影视放进了同一个商店。同一年,Google 完成了对摩托罗拉移动的收购,自己也有了手机硬件部门。到 2013 年,据市场研究机构 IDC 统计,全球每卖出的十部智能手机里约有八部是安卓。
回头看:从分裂到统一,再到流畅
把 2011 到 2013 年连起来看,安卓走了三步。
先分裂:为了尽快进入平板市场,3.x 单独成线,手机和平板一度是两套系统。
再统一:4.0 把两条线合并,Fragment 和支持库让一个应用可以同时适配手机和平板,Holo 设计规范让应用有了统一的样子。
然后打磨:4.1 解决流畅度,4.3 和 4.4 补强安全,4.4 让新系统能跑在入门机上。
这一阶段之后,安卓在功能、流畅度和覆盖面上都已经站稳。接下来要解决的,是设计语言的彻底更新、运行时的性能,以及越来越受关注的权限和续航问题。
写在最后
如果说 2.x 让安卓从小众变成主流,那么 3.x 到 4.4 这三年,就是安卓把自己整理成一个完整平台的过程:一套系统覆盖手机和平板,一套设计规范约束应用的样子,一套工程方法保证流畅和安全。
下一篇讲 2014 到 2016 年:5.0 Lollipop 的 Material Design 和 ART 运行时,6.0 Marshmallow 的运行时权限和 Doze 省电,以及 7.0 Nougat 的分屏多任务。
· · ·
免责声明
本文为公开资料的科普梳理,事实与时间主要来自公开的百科资料、官方发布信息与行业公开报道。市场份额相关表述引自公开发布的第三方研究机构统计,不同机构的口径和结论存在差异;性能相关描述为原理说明,实际效果因机型和应用而异。具体以官方最新披露为准。
本文涉及的公司名称、产品名称仅用于说明历史事实,不代表对任何公司或产品的评价,也不构成任何购买或投资建议。