序言
Android 是如何成为这个星球上受欢迎的、分布最广的、用户最多的移动操作系统的?
2004 年,Android 还只是两个想要开发相机软件的人,他们甚至无法引起投资者的兴趣,如今,Android 已经是 Google 内容的一个庞大的团队,为全国 30 多亿台设备提供操作系统(包括相机软件)。是什么让一个小小的团队能够开发出像 Android 这样具有庞大规模和影响力的软件?在这本书中我们将得到答案,从而借鉴学习。
作者
切特·哈斯(Chet Haase),曾在几家硅谷科技公司工作,开发了许多从来没有听过的软件。2010 年,他加入 Google 的 Android 团队,负责动画系统、图形组件、底层性能优化等工作。见证了 Android 从智能手机行业的底层一路跃升到现在的地位的全过程,是实实在在的历史亲历者。作者花了 4 年时间采访 Android 团队成员,把这些宝贵的故事保留下来。
内容概述
本书按照时间线从 Android 的诞生开始说起,一直到标志性的 Android 1.0 发布,再到开启 Android 市场份额爆发式增长的 Droid 手机上市。全书共分 5 个部分:
第 1 部分讲述了 Android 被谷歌收购之前以及被收购之后组建初始团队的故事。可以说,Android 的前身其实是一个相机操作系统。在那个年代,大众对手机的需求胜过相机产品,好在创始人及时调整方向做了手机,否则可能就没有现在的 Android。
第 2 部分讲述了 Android 团队在谷歌构建 Android 操作系统和平台的故事。这一部分占全书最大篇幅,涉及手机操作系统组件的方方面面,也是与技术最为相关的部分。
第 3 部分讲述了团队中发生的趣事,包括团队文化、与谷歌的不同,以及团队的做事风格。
第 4 部分讲述了 Android 的发布过程,包括 SDK 的发布、操作系统的发布、系统的命名、硬件的发布,以及为 Android 市场份额增长做出巨大贡献的摩托罗拉 Droid 和三星系列手机的发布。
第 5 部分总结了 Android 取得成功的原因。
Android 团队的时代背景:
挑战
Android 背后有 Google 在提供资金支持,内部有一批擅长开发大规模软件的工程师和一个专门的产品团队,外部则是一个快速增长的智能手机市场,他们怎么可能会失败?事后看来,Android 的成功似乎是必然的。
但实际上 Android 团队只是 Google 投入的众多项目之一,他们只是想通过赞助的方式看看它是否可行(题外话:Google 也在 Web 技术领域进行了类似的战略投入,也就是 Chrome 浏览器);另一方面,同时期 Android 加入的赛道,已经有了非常成熟且根深蒂固的竞争对手,诺基亚手机遍布世界各地,Danger、黑莓和 Palm 都推出了智能手机产品。还有各种各样的微软手机。2007 年,苹果公司也进入了市场,本已拥挤不堪的领域又多了一个竞争者。在 Android 发布第一个版本之前,这些公司就已经站稳了脚跟。如果失败,Android 则会成为智能手机历史的一个脚注。
为了在这个残酷的市场中生存下来,早期的 Android 团队将精力放在了 1.0 版本上。每个人都专注于这个目标,大多数人在这个疯狂的时期马不停蹄地工作。
那么,在如此劣势的情况下,Android 是如何从早期的脆弱阶段取得了惊人的增长?
一、开端
Android 之父
Andy Rubin,Google 移动平台副总裁、Android 主管,Android 平台创始人。Andy Rubin 是 Google 的工程师副总裁。Essential 公司创办人。
2014年10月30日,Google 宣布,Andy Rubin 将从谷歌离职。Andy 成立了一家创业孵化器,面向对开发科技硬件产品感兴趣的创业公司。
相机操作系统
起初,Android 想要打造一个数码相机平台,但当时的人们和投资者,对相机并不感兴趣,而是热衷于手机。于是 Android 放弃了原先的想法,开始准备做一个手机操作系统。Android 虽然没有开发它的相机操作系统,但是现在看来,手机上的相机,已经算是最广泛的相机操作系统了,只是饶了个弯儿。
初创团队
早期 Android 团队的员工 70% 都来自于Be/PalmSource、WebTV/微软和 Danger。
Be(BeOS 操作系统,与微软和苹果公司进行桌面系统竞争,Be 差点被苹果公司收购,但最终选择了乔布斯的 NeXT 电脑公司,最终 Be 被 Palm 收购,随后 Palm 将部门剥离出来,成立了一家 PalmSource 公司,后被 ACCESS 收购,很多 Be 前工程师加入了 Google 的 Android 开发团队,占 Android 团队总人数的三分之一)
WebTV/微软(被微软收购,早期从微软加入 Android 的人都来自 WebTV 团队,这个团队构建了一个操作系统、一个 UI 工具包、一个用于开发应用程序的编程层,以及为互联网设备设计的应用程序)
Danger,Andy 和朋友于 1999 年 12 月创办的。发布过多款手机,取得了一些成就和追捧,但这些手机没能抓住消费者的心,也没能撬开消费者的钱包。
齐聚一堂
对于 Android 团队来说,最终在同一家公司共事不仅仅是一种巧合。早期的团队在很大程度上依赖于他们在过往公司积累的经验。他们带来了已有的合作关系,积累了开发 Android 所需的经验:操作系统、嵌入式设备和开发平台。人们了解彼此,他们知道彼此的哪些地方会让人感到不快,知道在哪些地方需要互相尊重,知道可以信任对方完成哪些工作,他们之间有着明确的所有权边界。人们的名字会在彼此之间脱口而出,即使他们才刚加入团队几个月。人们有一种强烈的意识,知道其他人在做什么,以及他们是怎么做的。所以能够更快地构建出这个新的操作系统。并非他们工作过的公司或开发过的产品都曾经大获成功,但在构建产品过程中获得的知识对 Android 团队后来的平台构建起到了重要作用。
发展壮大
初始重要员工
Brian Swetland(布莱恩·斯威特兰), Android的第一位工程师。在5岁时,Swetland 就是一名系统程序员,他先后加入过 Be 和 Danger。负责操作系统的开发。
Andy McFadden(安迪·麦克法登),Fadden 在13岁时就开始在一台 Apple II 电脑上用 BASIC 和汇编编程,Fadden 曾与 Andy Rubin 和 Chris White 在 WebTV 共事。负责底层代码的开发。
Ficus Kirkpatrick(榕属·柯克帕特里克),Android 的最后一名员工,在被谷歌收购之前,Ficus Kirkpatrick是最后一个加入 Android 团队的人。在 4 岁起就开始编程。15 岁辍学开始工作。先后加入过 Be 和 Danger。负责开发内核和驱动程序。
融资
2005 年年中,Android 被谷歌收购,前景一片光明,但六个月前的情况却并没有如此乐观。那年 1 月,这家初创公司急需资金,主要任务和大多数初创公司一样:融资。在将产品方向从相机操作系统转到开源手机平台之后,他们仍然面临着开发产品的艰巨挑战,需要更多的钱来组建一个足够大的团队,以此完成这项工作。
所以,公司专注于三件事。首先,他们需要一个演示版本来展示自己产品的可能性。接下来,他们需要清楚地表达自己的愿景,并通过推介会来解释这个愿景。最后,他们需要带着演示版本和幻灯片进行路演,向潜在的投资者推销自己的故事。
Android 团队制作了一个幻灯片:
这是第一张幻灯片。在之后的很多年里,这个采用定制字体的单词 ANDROID 一直是这个操作系统的标志。
它对 PC 和手机市场进行了对比。2004年,手机的销量已经远远超越了 PC,但手机处理器和内存的性能只与 1998 年的 PC 相当。
手机厂家在制作硬件的同时,还要制作对应的软件。但手机厂商不是软件平台方面的专家,也没有能力或兴趣为自己的手机提供日益强大的功能。市场为开放平台打开了一个缺口,这是一个巨大的机会。也就是说,Android 可以通过开源的方式将操作系统免费提供给手机厂商。手机厂商可以在他们的手机上使用这个操作系统,而不受软件厂商的约束,也不需要自己开发。这种开放方式在当时还不存在。
当时,大多数的手机厂商都使用自研开发的操作系统,而 Android 希望提供世界上第一个完整的开放手机平台解决方案。它将以 Linux 为基础,同时提供其他所有必要的组件,手机厂商只需要用这一个系统就可以推出自己的设备。Android 还将为应用开发者提供统一的编程模型,这样他们的应用程序就可以在所有的设备上运行。通过采用统一的平台来支持所有设备,Android 能简化手机厂商和开发者的工作。
那么,Android 平台将如何盈利呢?答案是运营商服务。运营商将为 Android 手机用户提供应用程序、联系人和其他基于云计算的数据服务。为了能够提供这些服务,运营商需要向 Android 支付费用。
Android 寻找了多家公司进行融资,包括三星、HTC 但结果都不太令人满意,直到遇到 Google。
收购
经过三次的会面,Google 决定收购 Android,他们将操作系统免费提供给运营商,没有来自风投公司的施压,也不必向客户和运营商收取专门的服务费。事实上,它甚至比免费更好:谷歌可以与运营商分享来自搜索服务的收入。这样,他们就可以与运营商建立合作伙伴关系,而不只是把东西卖给运营商。Nick说,这让运营商很难拒绝:“我们实际上是通过合作的方式帮他们赚钱。”
Android 团队敲定了这笔交易,并于2005年7月11日加入了谷歌。
在 Google 的日子
起初 Android 项目是一个秘密项目。即使在谷歌内部,大多数员工也不知道它的存在。Android 并没有固定的办公地点, 只能在走廊里办公,在会议室里搭帐篷...
二、构建平台
Android平台是按照自下而上的顺序构建的。
如果一幢摩天大楼没有结实的地基和底下的 50 层楼,就很难为其建造顶层公寓,同样的,如果没有底层的操作系统内核、图形系统、框架、UI 工具包、API 和其他应用程序所需的基础层,构建 Android 应用程序也很困难。
系统团队
系统团队负责软件栈的最底层,将手机硬件与运行在设备上的软件连接起来。在 Android 上运行的最底层的东西就是内核。内核是硬件和系统之间接口的组合,再加上操作系统用来使一切顺利运行的东西(比如启动系统、创建进程、管理内存和处理进程间通信)。如果把手机看成一栋房子,内核就是地基、线路和埋在墙壁里的管道,这些管道会发出“滴、滴、滴”的声音,让你在半夜里无法入睡。
内核中的设备驱动程序负责处理硬件通信,可以将其理解为负责处理硬件通信的软件模块。例如,为了能够在屏幕上显示像素,驱动程序需要在图形软件(可以计算出每个显示的像素应该呈现出什么颜色,比如图像、文本或按钮中的像素)和用来承载像素的屏幕物理硬件之间转换信息。类似地,当用户触摸屏幕时,触摸动作会被转换成表示被触摸位置的原始硬件信号。这些信号作为触摸事件被发送给系统,然后由系统和对这些事件感兴趣的应用程序负责处理。
系统团队的一个基本任务是在硬件(手机或带有芯片、电路和屏幕的手机原型机)上启动 Android 操作系统。
Brian Swetland 和内核 (Linux)
Ficus Kirkpatrick 和驱动程序 (摄像头驱动、音频驱动、多媒体框架)
Arve Hjønnevåg 和通信模块(Linux 内核中加入唤醒锁)
Iliyan Malchev 和蓝牙模块(8 岁编程)
Nick Pelly 和蓝牙模块(蓝牙驱动程序)
San Mehat 和 SD 卡机器人(逆向工程)
Rebecca Zavin 和失宠的设备(系统实现了零拷贝)
Mike Chan 和 B 团队 (安全性和电池续航)
B团队
系统团队被分成了 Passion(后来的 Nexus One)和 Droid 两部分。分到 Passion 小组的人大多是对这款设备比较熟悉的人。然而,最终 Verizon 为 Droid 所做的品牌推广和市场营销超过了谷歌为 Nexus One 所做的一切。
编程语言的选择
编程语言,当时在 Android 内部有 3 个选择: JavaScript(不适合开发大型系统) 、 C++(需要开发者自己管理分配内存、开发软件不免费) 、 Java。
运行时
我们使用编程语言编写代码,但是,计算机并不理解这些语言,它们只理解二进制代码。为了把编程语言转换成能够被计算机理解的二进制指令,程序员需要使用一种叫作编译器的工具。同样的编译代码不一定能在其他类型的计算机上运行,比如 Mac 或 Linux 服务器,因为它们的CPU可能不一样。所以,编译器生成的二进制指令对于其他系统来说可能没有意义。我们需要将源代码编译成不同的二进制版本,这样才能在不同类型的硬件上运行。

Java编译器不是将源代码转换成机器可读的代码,而是转换成一种称为字节码的中间表示。字节码可以在任何装有运行时的计算机平台上运行。运行时负责解释字节码,并将其编译成计算机的二进制表示,这个编译过程基本上是在运行时进行的。“编写一次,到处运行”。代码将被编译成字节码,然后在任何装有Java运行时的计算机上运行。

因为Android团队想要使用Java,所以他们还需要一个运行时。
Dan Bornstein和Dalvik运行时
Dan在七岁就开始接触编程。一直在硅谷做关于 Java 运行时的工作,Dan 双管齐下,一边评估现成的运行时,一边从头开始开发新的运行时。

为Android编写的Java代码需要经过两个编译步骤:一步是编译成Java字节码,另一步是将字节码转换成Dalvik字节码,然后运行在Android的Dalvik运行时上。Dalvik虚拟机运行的不是Java字节码,而是从Java字节码编译而来的另一种形式的字节码。(为什么要这么做?)
Zygote
原先的每个应用程序在启动时都需要加载必要的代码,并进行初始化。Zygote 创建了一个包含大部分核心平台代码的进程,并几乎预加载和初始化了所有这些代码。每当有应用程序启动时,都会通过分叉(将其复制到一个新进程中)Zygote 进程,让应用程序立即进入即将就绪的状态。最后,Zygote 不仅共享代码,还共享图像等。随着平台的发展,Zygote 继续为 Android 提供内存使用效率和启动速度方面的优势。
核心库
Bob Lee和Java核心库
Jesse Wilson和糟糕的API
基础设施
对于任何一个软件项目来说,特别是一个由不止一两个人参与的项目,基础设施是构建产品不可或缺却不那么显而易见的部分。基础设施包含了很多东西,包括:
■ 构建:如何接收工程师不断提交的代码并构建项目?如果产品需要在各种不同的设备上运行,该怎么办?对于不同的场景,如测试、调试和发布,分别需要在哪里构建项目?
■ 测试:产品构建好以后如何进行测试?如何进行持续的测试,以便在隐藏的Bug造成严重的问题之前将其捕捉(或者追踪到问题代码提交的时间,进而把它们找出来并修复)?
■ 源代码控制:在哪里存储代码?如何让团队成员可以同时修改相同的源代码文件?
■ 发布:如何将产品发布到设备上?
Joe Onorato和构建系统
Ed Heyl和Android的基础设施
测试、测试
精益的基础设施
图形
Android图形系统的一个极简视图。应用程序通过调用Canvas API来绘制东西。Canvas API的底层使用了Skia渲染引擎,负责将形状和文本等内容转换成像素。SurfaceFlinger为像素绘制提供了一个缓冲区,或者说表面。SurfaceFlinger调用OpenGL ES,一个可以渲染三角形的底层图形API。OpenGL ES使用PixelFlinger来绘制缓冲区(在GPU成为智能手机的标配后,PixelFlinger被GPU取代)。最后,所有需要绘制到屏幕上的表面(包括前台应用、状态栏和导航栏)都在硬件编配器(Hardware Composer)中被组合在一起,显示在屏幕上,这样用户就可以看到它们。
Mathias Agopian和Android的图形
系统基础
PixelFlinger
SurfaceFlinger
硬件编配器
Mike Reed和Skia
多媒体
多媒体,也就是音频和视频,这些技术之间存在非常大的区别,都需要软件工程师具备深厚的领域专业知识。因此,工程师通常只研究其中一种,而不是两种都研究。然而,音频和视频工程师通常会在同一个“媒体”团队工作。也许是因为他们都需要设备提供的电池、内存和极度优化的软件,这样才能为用户提供可靠的视听享受。
Dave Sparks和铃声
Marco Nelissen和音频
AudioFlinger
遭人唾弃的代码
框架
框架,是指包含了操作系统底层功能(除内核以外的被系统其他部分依赖的底层功能)和应用程序用来访问这些功能的API的核心平台部分。以下是框架提供的一些功能:
■ 包管理器,负责安装和管理设备上的应用程序。
■ 电源管理,例如控制屏幕亮度设置(屏幕是设备上耗电最多的硬件)。
■ 窗口管理,在屏幕上显示应用程序,并在它们打开或关闭时使其动画化。
■ 输入,接收来自触摸屏的信息,转换成事件,再发送给应用程序。
■ 活动管理器,管理多任务,在设备内存过低时决定哪些应用程序应该被关闭。
Dianne Hackborn和Android框架
Activity
加入Android后,Dianne开始开发框架的一些基本组件。其中的一个组件是Activity。Activity这个概念是从团队早期的一个想法演化而来的,它是Android管理应用程序的一种方式。在传统的操作系统中,应用程序在启动时会调用main()方法,然后在一个循环中处理一些事情(绘图、轮询输入、执行一些必要的计算,等等)。在Android中,一个应用程序被分成一个或多个“Activity”,每个Activity都有自己的窗口。Activity(和应用程序)没有main()方法,操作系统会调用它们对事件做出响应,比如Activity的创建和销毁,以及用户输入。
Activity的另一个重要元素是它们定义了可以被其他应用程序调用的入口,比如系统UI中的通知或快捷方式,用户可以通过它们跳转到应用程序的某个位置。
Dianne说:“Palm非常了解移动设备。我们在那里学到了很重要的一点,即移动应用与桌面应用有本质上的不同——用户每次只能访问一个应用,而且它们往往很小,只专注于一个特定的任务。这催生了让应用协同工作的需求。Palm OS采用了一种叫作‘次级启动’(SubLaunching)的方式,允许一个应用通过调用另一个应用来达到一些目的,比如向用户显示添加联系人信息的UI。我们认为这是移动应用的一个重要功能,但需要把它变成一个正式的概念,这样它才会更加健壮,并能够在复杂的多进程保护内存(和应用沙盒)环境中正确运行。于是就有了Activity这个概念,它定义了一个应用向其他应用(和系统)暴露自身的方式,让它们可以在需要的时候启动它。”
资源
窗口管理器
软键盘
自下而上的 Jeff Hamilton
Binder
Binder是一种IPC机制,当操作系统发生涉及多个进程的活动时,IPC用于在这些不同的进程之间发送消息。
Android设备上始终运行着许多进程,负责处理系统的各种任务。系统进程负责进程的管理、应用的启动、窗口的管理和其他底层的操作系统功能。电话进程负责保持通话正常连接。运行中的前台应用进程为用户提供交互功能。系统UI进程负责处理导航按钮、状态栏和通知。
数据库
SQLite 是一种现成的开源数据库引擎
联系人及其他应用
框架工程
框架团队的项目不胜枚举,因为它确实是Android平台的心脏和灵魂。系统的大部分东西都依赖这个团队所搭建的基础。这一切都是从这些人在2005年年底加入团队后从无到有开发出来的。与此同时,平台的其他部分和应用程序都是基于这个框架而构建的。
UI 工具包
UI 工具包提供了屏幕上显示的大多数可视元素。按钮、文本、动画和用于绘制这些东西的图形都属于Android UI工具包。
一方面,Skia 团队已经有了一个系统,它用XML描述UI,用JavaScript代码编写逻辑。另一方面,框架团队更倾向于一种以代码为中心的方法。
Mike Cleron重写UI工具包
Mike编写或至少继承和增强了Android UI工具包的其他组件,如View(UI类的基本构建块)、ViewGroup(View的父容器)、ListView(用户可以滚动和拖动的数据列表)和各种Layout类(定义子元素大小和位置的ViewGroup)。
Eric Fischer和TextView
Romain Guy和UI工具包的性能
Launcher和应用程序
屏幕密度
工具包的性能
UI工具包由很多部分组成,它基本上就是整个框架的可视化部分。对于当时的团队来说,真正意义上的工作是开发工具包API和核心功能,然后就是优化性能、性能和性能Android的UI基本上就是用户能看到的东西,所以前端的性能对于这个平台来说更为重要,因为一旦出了问题会很容易被注意到。所以,团队一直在优化性能……从某种程度上说,现在还在优化。
系统UI和Launcher
Android的系统UI是指应用程序之外用户可与之发生交互的可视元素,包括导航栏、通知面板、状态栏、锁屏界面和Launcher。
Launcher
Launcher(用于查看和启动应用的主屏幕应用程序)
通知
从一开始,通知系统就是Android的一个独特而强大的功能,它会将应用程序的信息展示给用户。
动态壁纸
Android的脸
Android的系统UI为用户控制他们的设备提供了图形化功能。从登录到实时通知,到UI跳转,再到启动应用,系统UI是用户与设备发生交互的第一个看起来像应用程序的东西。用户可以获得他们需要的功能和信息,而这些就是智能手机能够带给他们的全部。
设计
设计就是一切。设计决定了人们如何看待产品和他们在使用产品时的感受。它也是导致某些东西成功或失败的部分原因。
Irina Blok 和 Android 吉祥物
Android操作系统最有识别度的一个东西是Irina Blok设计的绿色机器人吉祥物。

这个Logo已经为全世界所熟知,但它最初只是为开发者设计的。Irina说:“我们当初的目的是点燃开发者社区的热情,做一个类似Linux企鹅那样的东西。
在设计方面并没有太多限制。Android团队来到Irina所在的内部品牌团队,向她提了一个请求。他们说产品的名字是Android,他们想要有一个引人入胜的起源故事。他们建议让它看起来像人类,并能够让开发者看到之后热情澎湃。
在提交终稿之前,Irina花了大约一周时间尝试各种各样的设计。

开绿灯
早期编程是一些黑色终端,代码最初的颜色就是绿色。
Jeff Yaksick和UI设计
Android公仔
Android浏览器
谷歌一直非常关注Web技术。从一开始,谷歌的主要业务就是为用户提供搜索服务。所以,在浏览器等Web技术上进行广泛投入对它来说很有意义。技术发展得越好,谷歌就越能提供更好的搜索体验。这对于21世纪初的谷歌来说尤为重要,因为当时的Web浏览器主要由开发浏览器的公司所驱动。
浏览器战争
第一次浏览器战争:网景浏览器和 IE 浏览器 第二次浏览器战争:FireFox 浏览器、Chrome 浏览器、Safari 浏览器
Android需要一个浏览器
WebView 是一种网页查看器,可以被嵌入 Android 应用程序中。它是与 Android 浏览器一起开发的,因为浏览器本质上就是一个包装了控件和 UI 的 WebView。
黄威和Android浏览器
选择开源的 WebKit 引擎开发浏览器。
Rich Miner组建团队
葛华、WebView和Android浏览器
Cary Clark和浏览器图形
伦敦团队的使命
Dave Burke和伦敦的移动团队
Andrei Popescu和伦敦的浏览器团队
Nicolas Roard和前期工作
Android和Web应用
Android的浏览器和Web技术在不断完善,团队也不断投入更多的精力和人力。2013年,Android浏览器(和WebView)被Chrome取代,当时的谷歌认为,将多个团队和项目资源耗在相似的技术上可能是没有意义的。但是,WebView和浏览器仍然是移动技术栈的重要组成部分,它们让用户能够浏览丰富的网站内容,让开发者能够使用Web技术开发应用程序。
应用程序
移动应用生态系统
一个新的设备或者一个新的平台,必须要有一个相关的应用商店,需要提供一些核心应用。
在Android刚出现时,外界还没有应用生态系统。因此,Android团队开发了一系列核心应用,这些应用将随设备一起发布,为用户提供非常有吸引力的功能。
Cédric Beust和Gmail
Android服务
对于大多数应用程序来说,它们需要处理应用程序之外的信息或保存在设备之外的数据,那么就需要与后端系统发生交互。地图、搜索、Gmail、日历、联系人、Talk、YouTube,所有这些应用程序都依赖谷歌服务器提供的数据和功能。
谷歌希望通过Android操作系统为移动用户提供服务。因此,弄清楚如何将Android设备连接到谷歌的后端服务也是至关重要的。
Debajit Ghosh 和日历
Michael Morrissey和服务团队
火警
Dan Egnor 和无线(OTA)更新系统
如何保证修改的内容一定是正确的,以及即使在更新期间手机重启或在快没电的情况下也能继续更新?
解决的办法是进行增量更新。所以,更新系统不是将整个Android系统视为一个整体,而是将它拆分成独立的部分,并单独处理它们。例如,一次更新可能包含框架、媒体和SMS驱动的更新。然后,这些更新可能属于不同的模块,每个模块都可以单独处理。更新系统将每个模块单独打包,并在更新之前下载所有的更新包。更新系统会逐个检查这些模块,安装每个模块,验证结果是否如预期的那样,并替换旧模块,然后继续下一个。如果手机在更新过程中死机或重启,它可以从停止的地方继续,不会让系统处于未完成的、未知的状态。
更新系统如何保证设备有足够的可用空间?
内存不足的策略是使用缓存。“我们设置了一个共享缓存空间。应用程序可以将临时数据放在这里,但它的主要目的是用于放置O TA系统下载的更新文件。”虽然缓存也可以用来放置应用程序的临时文件,但它的真正目的是为了保证更新系统总是有足够的空间来下载和安装更新。
如何保证安全性。更新系统可以修改只读的部分,因为它需要更新设备上的核心操作系统。那么,怎样才能防止一些恶意软件把自己伪装成更新软件对系统进行篡改呢?
只允许受信任的文件替换系统文件。每个更新模块都需要进行密钥签名,系统将会验证它们是否被Android信任。安全团队还增加了一层保护,除了每个单独的模块有密钥加密,整个更新也有一个额外的密钥加密层。只有有了这些层,系统才是安全的,才能被发布(和更新)。
陈钊琪和CheckIn服务
卓越的服务
服务团队为Android提供的底层功能不容小觑,它们为Android平台的强大功能奠定了坚实的基础。虽说平台的内核和框架是启动和运行设备所必需的,但如果没有为用户提供获取即时消息和电子邮件、同步日历或联系人信息、获取系统版本更新的服务,Android就不会成为引人注目的智能手机平台。
位置、位置、位置
Charles Mendis和Bounce
地图
导航
Android Market(于 2012 年更名为 Play Store)
今天,我们可以非常容易地在某个地方买到我们需要的应用,并认为这是理所当然的事。只要有一部手机,就可以去应用商店购买你需要的应用,就这么简单。
但在Android和iPhone出现之前,这种生态系统并不存在。
Market是Android最吸引人的一个方面。将应用上传到应用商店,并让越来越多的Android用户使用它们。Market不仅为开发者和用户提供了便利,也创造出了一个应用世界,让Android成为一个强大的生态系统,远远超越了手机和操作系统。用户不仅可以享受手机内置的各种功能,还能从他们可以安装的几乎无穷无尽的应用中受益。Android Market为整个Android平台带来了一股强大的力量。
通信
Mike Fleming和电话功能
logcat
黄威和消息通信,推送
SMS
开发者工具
开发者生态系统是推动Android增长的动力之一,它创建了数千个(现在是数百万)应用供人们下载和使用。 但这种生态系统不会自动形成,尤其是对于一个没有市场份额的新平台来说。为了降低应用开发者的准入门槛,让他们能够更容易地开发和发布应用,Android需要为他们提供工具。
Xavier Ducrohet(泽维尔·杜克罗赫特)和 SDK
Xavier 将 DDMS 工具拆分并与 Eclipse 集成在一起。2 个月后,他向 Android 团队演示了整个开发工作流程:在 IDE 中打开一个项目、编译它、将它部署到模拟器、让它在模拟器上运行、在某个代码断点处停住,然后一步步跟踪代码的执行。
这些工具随着SDK向外部开发者发布,成为Android开发者工具链的基础。他从刚加入团队时对Android一无所知,到为所有的Android开发者(包括平台和应用的开发者、内部和外部的开发者)提供基础开发工具,仅用了短短几个月时间。
在完成IDE项目的开发工作后,Xav开始为Android创建SDK。SDK是一个可安装的工具包,包含了Eclipse插件(以及所有的子工具,如DDMS、ADB和Traceview)和Android本身。Android部分包括开发者在写代码时会用到的代码库、在模拟器中运行的Android系统镜像,以及方便开发者查看的文档。Xav认为开发者需要这些东西,所以将它们整合在一起。这些工作大概是在2007年8月完成的,因为Android SDK将于11月发布,所以到时候最好能有一些其他东西一起发布。
David Turner 和模拟器
Dirk Dougherty 的文档:RTFM
精益的代码
开源
开源对很多人来说意义重大。
开源可以是一种“众包”工作的方式,就是让社区一起完成工作。Linux就是一个很好的例子,虽然系统最初是由Linus Torvalds一个人创建的,但一个由众多个人和公司组成的大型社区在此后的几十年为这个系统贡献了所有东西,从问题修复到驱动程序,再到核心系统功能。
开源可以是一种宣传和分享工作成果的方式。GitHub托管了很多活跃的项目,人们花了大量时间和精力创建并维护这些项目。他们把代码上传到GitHub,而不是让它们烂在自己的电脑里。开源你的个人项目,让别人认识你,让他们知道有人在做这些工作,也是在向潜在的雇主展示你的能力。
开源可以成为公司的招聘工具。就像个人可以通过开源展示他们的能力一样,公司经常开源项目(为开发者提供的应用程序或库)也是在向开发者宣传自己。Square本质上是一家信用卡公司,如果仅凭他们的业务模型是很难说服开发者加入他们的。他们为开发者社区提供了有趣且功能强大的开源库,并因此而闻名。那些对金融交易软件不感兴趣的开发者之所以会加入这家公司,是因为他们想要帮助开源社区,并在这些项目中亮出自己作为开发者的身份。
开源可以让大公司平静而温柔地对产品实施安乐死。有时候,公司不得不关掉一些项目,把工程师资源转移到更有前途的项目上。公司可以(而且经常是)直接终止项目,也可以将旧代码开源,作为送给开发者社区的礼物。公司开源项目似乎得不到直接的好处(实际上他们还要花时间和精力迁移项目),但可以获得开发者的赞誉,并为使用或依赖了这些项目的开发者减轻痛苦。
开源还可以让其他人自由获取和使用你的软件。而这就是Android的开源模式。
自2008年11月以来,所有的Android平台软件都作为Android开源项目(Android Open Source Project, AOSP)在其官网上对外公开。每个版本的代码在对设备可用的同时,也对外开源。每当一个版本对用户可用(在新设备上发布或作为已有设备的更新),开发者也能看到这个版本的源代码。
Android接受来自外部的贡献,开发者可以在其官网上创建账号并提交补丁。Android团队会对这些补丁进行评审,将它们提交到Android源码库中,并在未来的版本中使用它们。
实际上,来自外部的贡献并不多,Android对此也并没有寄予太多的期望。Android确实会收到一些来自合作伙伴公司的贡献。例如,合作伙伴公司往往会为了让系统更契合他们的设备而提供一些补丁。他们可能发现了一些可以改进的地方,或者发现了一些Android还没有考虑到的外形因素,或者发现了Bug。对他们来说,直接将这些补丁整合到Android中是合理的,因为在发布新版本时他们就不需要重新应用这些补丁了。Android偶尔也会有一些个人贡献者参与修复问题,但来自外部的贡献很少,大部分的工作都来自内部团队。
造成这种局面有几方面的原因。首先,Android的源代码库非常庞大,即使是一个简单的修复,也需要付出巨大的努力,因为你需要理解原始代码的背景,以及当前的这个修复将会带来哪些影响。但更重要的原因是Android的“最终开源”模式。当外部开发者发现并修复了一个Bug,他们没有办法知道修复代码是否会出现在未来的版本中,甚至不知道他们花了很长时间写的代码是否还存在。当有新的需求出现或需求发生了变化时,代码有可能被修改或重写。
尽管来自外部的贡献不会给Android带来巨大的价值,但Android的开源模式仍然具有显著的优势。首先,应用开发者喜欢这种模式。一般来说,具有Android如此规模和复杂性的平台不太可能提供如此详尽的文档,让程序员能够理解它的每一个细节和所有的内部交互原理。开发者可以通过阅读源代码来了解内部原理,这对开发者来说是无价的。因为如果开发者可以阅读源代码,他们就不用费尽心思地猜来猜去。这种透明度有助于Android开发者更好地开发应用程序,也是Android和其他操作系统平台之间的根本区别。
Android开源模式的第二个特点,也可以说是更重要的一点是,Android的合作伙伴可以自由免费地访问Android所有的东西。这实际上也是Android最初开放平台的原因,这种机制让潜在的设备厂商都能够使用Android,并获得他们需要的一切。无须授权,也没有烦琐冗长的合同谈判,合作伙伴可以直接从网站上获取交付Android设备所需的一切。这种模式有助于形成一种兼容Android实现的一致性生态系统,因为大家都是以相同的通用实现为基础的。如果他们想要使用谷歌服务,比如Play Store、地图和Gmail,就会获得更多好处。对于构建手机平台的核心代码,任何人都可以下载和使用。Romain Guy解释说:“我们认为这就是Android的‘开源’。合伙伙伴不一定要参与贡献,但他们需要的东西都会有。”
Android开源模式的这个特点为设备厂商打开了一扇大门,这让Android有别于其他平台。他们不仅可以使用平台,也可以访问和使用平台的源代码。另外,这个开源平台本身就是一个完整的、生产就绪的实现,并已经在真实的硬件设备上经过了验证,厂商也可以直接使用它。
相比之下,如果当时你想推出Windows手机,必须从微软获得授权(并支付许可费用)。
开源的风气也与用户产生了共振。Android不再要求用户只能有一个主屏幕应用、一个软键盘、一套快速设置等,他们可以自行定制。手机是一种非常个性化的设备,这些深层次的定制(不仅仅是外壳)让用户有了更强的连接感和归属感。
管理上的那些事
Andy Rubin和Android的管理
Tracey Cole和Android的行政
Hiroshi Lockheimer与合作伙伴
Steve Horowitz和工程团队
世界移动通信大会
管理冲突
离开Android
Ryan PC Gibson和他的甜点
甜点时间
吴佩纯和项目管理
商业交易
合作伙伴对Android来说至关重要,一直以来都是如此。不仅谷歌在推出Android手机,大家都在这么做,这也是推动Android增长的一个关键因素。
Android早期有几个人分别负责合作伙伴和商业交易方面的工作。Andy Rubin很清楚应该与谁合作,并很擅长促成合作。毕竟,他是移动设备公司Danger的创始人之一。Android联合创始人Nick Sears来自T-Mobile,谷歌后来与T-Mobile成功签约合作推出G1,他在其中起到了重要作用。Hiroshi Lockheimer在Android合作设备的项目管理方面发挥了关键作用。Android的另一位联合创始人Rich Miner来自Orange Telecom,他曾与运营商合作,并管理过一支以移动和平台公司(包括Danger)为投资对象的风险基金。Rich除了管理Android浏览器和语音识别团队,还和Hiroshi、Tom Moss组成业务团队促成了摩托罗拉Droid的交易。
Tom Moss和商业交易
随遇而安
发布合作设备
产品与平台之争
在早期(以及之后的数年),团队中一直存在一个争论:他们是在构建一个产品还是一个平台?也就是说,他们是在开发一款或多款手机(产品),还是一个现在和将来可以在不同厂商制造的设备上运行的操作系统(平台)?
三、Android 团队
从Android进入谷歌的那一刻起,他们就有了自己的做事方式。领导团队也一直努力保持这种状态。
Android != 谷歌
Android从一开始就有一种与谷歌其他团队截然不同的文化。尽管这个小小的Android初创公司被并入了大公司,但Andy还是努力让团队保持独立。
Android的自我孤立体现在很多方面,比如在公司内部对项目秘而不宣,不参与公司会议和大型的讨论,因为团队认为这会让事情陷入困境。
所有这些都有助于让团队专注于发布每一个版本,Android形成了一种不同于谷歌的莽性文化。
Web与移动
Android做的产品与谷歌其他团队完全不一样,这也是Android在谷歌保持独立的原因之一。当时,谷歌主要开发Web应用,这导致他们对Android的态度是:Android不是基于Web的,所以他们感到不自在,他们也无法理解移动软件的发布节奏。
首先,谷歌所做的基本上都与Web相关,对Android存在严重的不信任。当时有很多东西都可以用Web实现,为什么就Android不是基于Web的呢?要知道,当时的其他移动平台(包括Palm的WebOS,甚至是iPhone——苹果公司最初的外部开发者计划其实是Web应用)都在使用Web技术。然而,Android却顽固地拒绝向这个方向发展。它提供了在原生应用中集成Web内容的能力(使用WebView,并提供了一个完整的浏览器),但应用是用原生(而不是Web)技术开发的,可以使用不同的编程语言、API,以及与Web应用完全不同的开发方式。
其次,Android尝试推出与传统的谷歌Web应用完全不同的产品。如果你想发布新版的谷歌搜索页面,花一个下午就可以搞定。如果它有Bug,你可以马上修复,并在晚上发布更新。Web产品的发布周期一般是几周,而且团队会一直不断地发布和迭代。但Android的情况不一样,这种方法和思维模式对Android来说行不通。
Android有硬件的部分,有厂商的部分,有运营商的部分,还有合作伙伴。你可以迭代搜索算法,但你不能迭代硬件。所以,你必须先设定一个截止日期,然后往回推。
这种以日期为驱动的心态最终形成了Android早期的那种努力赶工、以截止日期为导向的文化。
狂野的西部
Android形成了自己的工程文化,不仅与谷歌的其他部门保持独立,开发的产品也与其他部门不同。当时的Android给人的感觉就像是狂野的西部。没有太多的规则,没有太多的工具,没有太多的最佳实践、指南或任何能告诉你如何做事情的东西。你可以做任何你想做的事情,尝试任何你想尝试的东西。这是一种开放创新和鼓励尝试的文化。
Android和谷歌的文化差异也表现在其他一些细微的方面。谷歌一直以来就有“20%时间”这一说法,即允许员工将20%的时间用在能够让谷歌受益的个人项目上。这是一个伟大的传统,它促成了一些很棒的产品的诞生,比如Gmail。Android的工程师经常忙于自己的主线工作,无暇顾及其他事情,所以在Android团队中,20%时间并不常有。
Android与谷歌
在Android被收购后的头几年,谷歌有很多人实际上根本不知道Android的存在,因为它是个保密项目。即使后来人们知道它的存在,它也并没有被视为一个成功的项目。
2007年8月,也就是SDK发布之前的两个月,一些员工从 Google 转到了 Android 团队。这些员工不知道 Android 要做什么,认为 Android 是一个边缘项目,因为 iPhone 已经在市场上占据了主导地位。他们不认为 Android 可能影响到整个电信行业。Android 就像是一家开在公司里的公司。
有趣的硬件(一些趣事)
防干扰机枪
神秘的端口
网络开关
有趣的机器人
更努力,而不是更精明
不管是在 Android 内部,还是在谷歌,Android 团队都以努力工作而闻名。Ficus Kirkpatrick 称为“Android 的硬通货”。
“我不认为我是一个聪明的工程师,但我很努力。我会通过努力工作和投入大量的时间来弥补受教育的不足。在最初的四五年里,有好几回,只要我是醒着的,就都在做事情。我睡眠不足,但我知道不只我一个人这样。”
“在很大程度上,过度工作是我们自己的选择。我们真的想尽我们所能。我总是把它比作一种耐力运动项目,那一刻很苦,但结束后你会很开心。它就像是某种精神瘾头,让你一次又一次地重蹈覆辙。”
Rebecca Zavin也表示赞同:“与伙伴们一起努力完成某件事真的是一种令人心满意足的回报。‘我们要待到很晚把事情做完,我们一起努力!’这是一种创业精神。”
吴佩纯说这种高强度的工作节奏是自发的,没有人要他们待到很晚,也没有人会因为他们在正常时间回家而惩罚他们。“我们都待在公司,因为我们想要看到一些实际的工作成果。”
Jason Parks说:“我们的工作时间很长。有好几个星期,我与妻子唯一的见面机会是她来和我一起吃晚餐。我会很晚回家,睡上几小时,然后又回到办公室。她只有在来找我吃晚饭的时候才能见到我。”
在回忆起Brian Swetland的努力和专注时,Fadden说:“有一天,Andy Rubin突然走进来说:‘Swetland,最近怎么样?’Swetland头也不抬地嘟囔了几句,意思是如果他不被打扰,手头上的事情会进展得更顺利。Andy就站在那里。最后,Swetland抬起头,发现Larry Page也站在那里。”
“这很伟大,我很喜欢这样,我们都很喜欢这样。我们感觉自己就像是海军陆战队的特种兵在开发这个惊人的项目。我们与这个世界对抗,我们咬紧牙关,团结友爱。我们曾经感到很沮丧,过度工作,睡眠不足。但员工流动少得令人难以置信,尽管我们不断抱怨,尽管我们‘士气低落’。”
San Mehat回忆起团队努力工作的程度:“我喜欢这个团队。他们真的很棒。但我觉得我不能再来一次了,它会要了我的命。”
最后,1.0版本完成了,一阵可怕的寂静袭来。
Romain Guy还记得1.0版本发布之前的那段时间。在人们可以购买这款设备之前的三周,他们就停止了开发工作。“我们没有事情做了。我们不知道团队是否还在营业。我记得当时下午5点就回家了,但以前从未这么早回过家。我不知道该做点什么。人们平常在家都做些什么呢?”
然后1.0版本发布了,设备在商店里上架了。机器又开动起来了,团队又开始努力工作,推出了更多的版本。首先,他们需要持续地为合作硬件及时交付每一个版本。此外,整个团队都渴望让Android取得成功。虽然你可以眯着眼睛隐隐约约看到未来的影子,但第一款产品还无法改变游戏规则。它是一款不错的智能手机,但还不足以吸引全世界的注意。所以,团队一直在努力,因为要让Android真正释放潜力,他们还有很长的路要走。
培根星期天
来自巴塞罗那的明信片
四、发布
从 iPhone 发布的那一刻起,到 Android 1.0 发布后的第一年,所有的事情都与发布有关。不管是发布不同版本的 SDK、在 1.0 版本平台上迭代,还是发布各种各样的设备,团队都努力赶在每一个截止日期前将平台推给越来越多的用户。
竞争
IPhone于2007年1月发布,6月份正式发售。这款设备通过 触摸屏 实现用户交互,为消费者和整个行业带来了巨大影响,改变了人们对智能手机的看法,也改变了Android要在这个不断变化的智能手机市场中生存下来而需要做的事情。
iPhone逼着Android要改变一切,并重启它的开发计划。
Android的计划确实发生了变化,但团队并不需要重新开始,他们只需要重新安排优先级和产品时间表。iPhone发布时,Android团队还在埋头开发。他们正在开发的设备没有触摸屏,但有实体键盘。于是这个设备被放弃了。团队在1.0版本中实现了触摸屏功能。
Android开始受关注
iPhone的发布影响了所有的手机厂商,波及了整个手机行业,引发了恐慌。然后,相当讽刺的是,这也是Android能够在市场上站稳脚跟的主要原因。
在iPhone发布时,用户看到了智能手机最新的表现形式,它拥有更多的功能和触摸屏驱动的用户交互体验。但运营商和厂商看到了一种潜在的垄断,这种垄断将会让他们出局。
突然之间,以前害怕或忽视谷歌的公司不仅在回谷歌的电话,甚至主动来找谷歌。他们需要一款类似iPhone的智能手机产品,而Android为他们提供了一种可以快速达成目标的方式。
Android团队继续开发操作系统,与越来越多的合作伙伴合作,并最终为他们提供了一个平台,让他们可以基于这个平台为不断变化的智能手机市场推出自己的产品。
在库比蒂诺那边
当时,苹果内部一直有传言说谷歌正在做一件大事。“有传言说谷歌将在移动操作系统方面做一件大事。不是‘将会有一款令人惊艳的硬件’,而是‘他们将构建一个其他人可以使用的平台。’”
谷歌的最大威胁是它了解软件和服务。事实上,谷歌可能比苹果更了解它们。所以,苹果最根本的担忧是,谷歌这家之前就大规模开发软件和服务的公司,可能也将理所当然地对iOS这样的新平台构成重大威胁。
苹果非常想知道第一款Android设备G1发布之后将会有怎样的结果。在看到这款设备后,苹果不再那么担心Android,或者至少不再担心G1了,因为他们认为竞争是在产品层面上,而不是在平台层面上。
Android在应用市场方面击败了苹果。Android 1.0发布了Android Market,允许开发者发布自己的应用。iPhone在最初发布时没有App Store,也没有打算提供。
消费者和开发者都向苹果施压,要求为iPhone提供高质量的原生应用。于是,App Store发布了,它采取了比Android更严格的审核模式,与苹果一向以来严控整体用户体验的做法保持一致。
发布SDK
Android早在发布1.0版本、源代码或物理硬件之前就发布了一个早期版本的SDK。尽早发布SDK可以让开发者有足够的时间了解、构建和测试他们的Android应用,团队也有机会从开发者那里获得反馈,从而知道需要在1.0版本之前修复哪些问题。
2007年11月5日:开放手机联盟
11月5日,谷歌宣布成立开放手机联盟 OHA,承诺提供一个所有公司都可以使用的开源平台。
这一声明承诺了很多东西,但它只是一个新闻发布会——大量的漂亮话,描绘了光明的未来,但还没有实际的产品。
11月7日至8日:行业接待
搜索和手机平台是两个完全不同的东西。 他们现在只是纸上谈兵。
11月11日:SDK发布
11月11日,也就是在OHA宣布6天之后,Android SDK发布了。
在OHA宣布时,SDK就已经准备就绪了。但他们决定先开新闻发布会,等上几天再发布代码。这为行业普遍的不信任情绪提供了缓冲期。6天后,团队发布了SDK,这让之前的声明变得非常真实。
SDK已经放出来了,应用开发者可以下载它,并开始用它开发应用程序。


命名这回事
Android开发者挑战赛
发布一个新平台的难点之一是如何让所有人都能使用它。在SDK发布时,除了Android团队,它在全世界范围内的用户数为零,而这个数字可能要过好几个月才会发生变化,因为Android设备要到1.0版本发布后才可能上市。团队必须想办法让开发者对这个没有用户的新平台产生兴趣,并为它投入时间和精力。
于是,团队想出了举办Android开发者挑战赛这个主意。2007年11月12日,第一篇关于Android的博文在结尾处放了一个诱人的钩子:“我们很期待看到开发者在一个开放的手机平台上开发出令人惊叹的应用程序。你可以带着你的应用加入Android开发者挑战赛——谷歌赞助了1000万美元,旨在支持和表彰那些为Android平台开发优秀应用的开发者。”
2008年1月3日,挑战赛正式开始。在4月14日之前,团队都在接受参赛作品,然后发送给世界各地的评委,选出排名前50的应用。这50名开发者每人都获得了2.5万美元的奖励,并进入第二轮。在第二轮中,对于排名前10的应用,每个开发者都获得了27.5万美元的奖励,后面10名开发者每人都获得了10万美元的奖励。如果你算一下,谷歌在这场比赛中就给出了500万美元的奖励。
很难说团队花出去的钱是否物有所值,因为这些应用在当时还不能提供给用户使用。在当时,除了Android团队,还没有人能买到可以运行这些应用的设备。最终名单于2008年8月公布,比第一款G1上市整整早了两个月。但挑战赛确实激发了开发者的兴趣,总共有1788款应用参加了挑战赛,尽管没有用户,发布日期也未知。
挑战赛结束后,团队继续开发产品,并于2008年10月发布了1.0版本。2009年5月,他们举办了第二次竞赛,又给出了500万美元的奖励。这一次,Android吸引到了真正的用户,Android Market也正式开放了。现在,Android拥有了真正的用户和开发者,而不只是预发布平台的参赛者。
1.0 冲刺
兼容性的代价
性能
Bug、Bug、Bug
复活节彩蛋
应用程序
1.0 发布
2008年秋天,Android 1.0的发布经历了四个阶段。
9月23日:SDK发布
9月23日:T-Mobile G1 发布 - 第一款Android手机
G1配备了一个触摸屏、一个可以滑动打开的QWERTY键盘和一个轨迹球。它将预装谷歌地图和搜索,并可以安装来自Android Market的应用。它还配备了一个300万像素的摄像头,并支持T-Mobile新推出的3G网络。它的合约价为179美元,无锁版为399美元,它先在美国上市,并在接下来的几周扩大到其他国家。
10月21日:开源
Android在诞生之前就计划将平台开源。它向投资者、谷歌、团队成员、运营商和厂商合作伙伴,以及全世界的开发者表达了这个想法。现在,在第一个SDK发布11个月、1.0版本发布1个月后,它兑现了承诺,公开了所有源代码,供所有人查看和使用。
10月22日:T-Mobile G1 上市
G1的反响
G1的销量没能超过iPhone,也没有成为全球畅销、人人必备的手机。人们对它的评价是……它很有趣。虽然屏幕很小,但配置不算太糟糕。它不支持视频录制。除了预装的谷歌应用,没有多少非装不可的应用。
G1并没有在一夜之间取得成功,但还是有希望的。G1也为人们提供了足够好的体验,他们因此认可了Android平台。Android终于向全世界发布了。人们可以用这款手机和平台做他们需要做的事情,这就足够了。消费者可以把Android当成一部手机,潜在的合作伙伴可以把Android当成一个平台。它让厂商看到Android是真实存在的。
这些人真的可以做出东西来。这是真的,不是幻影。
都是甜点
R2:2008年11月
这是第一个Bug修复版本
1.1 Petit Four:2009年2月
1.5 Cupcake:2009年4月
1.6 Donut:2009年9月
2.0 Eclair:2009年10月
早期的设备
如今,种类几乎无限的设备成为定义Android生态系统的元素之一。除了由众多厂商推出的不同型号的手机,还有平板电脑、相机、电视、汽车、手表、物联网设备和飞机上的嵌入式娱乐显示屏。
1.0之前:Sooner、Dream(HTC G1)等
Sapphire(HTC MAGIC)
Android的第二款旗舰设备,搭载Android 1.5,有更大的内存,但其他硬件的规格与最初的G1差不多。最大的变化是键盘:Android终于采用了全触屏,放弃了早期G1设备上的实体键盘。
摩托罗拉 Droid
Droid手机对早期的Android来说非常重要。

Passion和Nexus
Brian Jones和设备分发
Droid成功了
摩托罗拉Droid的成功说明Android可能走对了路。Android慢慢地被接受和采用,而Droid是第一款大获成功的Android设备,尤其是在美国。Droid与之前的Android设备的一个区别在于,它是第一款真正进行了营销活动的设备。Verizon在市场营销上花费了1亿美元,并在电视上播放了“Droid Does”的广告。
Droid于2009年10月17日发布,11月初上市,随着消费者越来越重视Android手机,Droid在商业上取得了成功。与此同时,合作伙伴也越来越重视Android,并推出了一些其他产品,进一步提升了Android设备的销量。

在美国,人们购买Droid的数量远远超过之前购买其他Android手机的数量。随着Android市场份额的持续增长,Android的销量在2010年年底完全超过iPhone,Android被竞争对手碾压的日子一去不复返了。
三星及其他
到了2010年,其他厂商也都推出了自己的Android手机。全世界的人都在购买各种不同的Android手机。
三星对Android的积极影响是不言而喻的,他们是最大的Android设备厂商,他们的Galaxy系列在Android手机界响当当。即使是Note 7的电池“爆炸门”事件,这个有可能让小公司关门的问题,也没能浇灭人们争相购买的热情。
曲棍球棒
随着三星和其他厂商开始在全球销售自己的Android设备,Droid带头的销量曲线开始持续大幅提升。
在2009年年末发布Droid时,Android设备的销量在智能手机平台中处于底层。到2010年年底,也就是一年之后,Android设备的销量已经超过了其他手机(诺基亚的塞班手机除外),并在第二年超过塞班。
与此同时,越来越多的人开始选择智能手机,而不是传统的功能机,并且有很多人选择了Android智能手机。


如果你把范围扩大到所有的计算设备,包括PC,那么这些数字就会变得更有趣。从2011年开始,Android设备的销量已经超过PC,从2015年开始更是超过了PC的4倍,这很好地印证了早期Android创业团队在宣讲中提到的一个观点。
这个比较乍一看似乎令人费解,PC(各种型号的台式机和笔记本电脑)几十年来一直是现代生活的必需品。但世界上有很多人认为电脑是奢侈品,而不是必需品,他们购买的第一台计算设备其实是智能手机。与PC不同,智能手机已经变得不可或缺,它们既满足了人们的使用需求(通信、导航、娱乐、商务或其他),又足够便宜,让那些之前无法购买电脑的人也可以买得起。在某种程度上,智能手机具备“PC”所不具备的私有属性,PC往往会在家庭内部共享,而大多数智能手机都是人手一部,这使得手机的潜在市场比PC要大得多。
从此以后,这些趋势一直持续。截至2021年5月,全球活跃的Android设备超过30亿部!
五、为什么 Android 会成功
Android 是如何取得成功的?考虑到所有可能导致失败的因素,以及在同一时期有很多试图在智能手机领域分一杯羹的公司和平台都以失败告终,为什么偏偏 Android 成功了?与任何一个成功的项目一样,取得成功通常有很多促成因素,但一切都是从团队开始的。
团队
Android 团队从一开始就是由具备合适的技能和驱动力的人组成的。创建一个完整的平台,包括应用、服务和基础设施,是一项巨大的工程,需要能够快速投入工作的人付出巨大的努力。
它算不上是一个大团队……但绝对是一个天造地设的团队。
合适的经验
团队的大多数人都拥有合适的经验,这让他们能够快速上手。他们曾在 Be、Danger、PalmSource、WebTV 和微软等公司参与过相关的平台和移动项目,这些经历为他们奠定了相关领域的技术基础,让他们知道如何解决 Android 所面临的问题。
正确的态度
Android团队在开发1.0版本过程中不断发展壮大,但在发布第一个版本时也只有100人左右。也就是说,为了能够发布产品,每个人都有很多工作要做。大家做了所有需要他们做的事情来推动项目向前发展,包括完成自己负责的功能领域,以及跨多个领域与其他人合作,无论哪里需要帮助,他们都迎难而上。再加上初创公司的氛围让每个人在最初的几年疯狂地工作,才得以从零开始开发出Android,及时交付了一个强大的平台和设备,在新兴的智能手机行业中占据了一席之地。
合适的规模
团队规模小意味着每个人都必须非常努力,但这也说明他们的工作效率非常高。在早期,达成共识靠的是沟通和协调……但随着团队规模变大,你会把所有时间都花在争论上。
正确的领导
好团队从好领导那里收益,好领导会把每一个人都凝聚起来,推动团队向前进。领导的职责之一是保护 Android,让它像一个初创公司一样在谷歌内部生存下去,另一个职责是为艰难的决定拍板,因为有些决定必须由某一个人来推动,而不是一群人。
决策、决策
好的团队会做出好的决策。坚实的技术基础和商业决策推动了Android的成功发布,并随着逐步释放厂商、开发者和用户的潜力,开启了持续增长的势头。
功能:吸引用户的杀手锏
Android的大部分技术都是其他智能手机也都具备的基础技术:一款提供了数据和无线功能的设备,加上浏览器、电子邮件、地图和消息等标准应用。这些并不是推动Android增长的因素,它们更像是一种复选框清单,是一个平台最基本的组成部分。
但有一些技术是Android独有的,并因此形成了一个由开发者和用户组成的忠实粉丝群体。平台从一开始就内置了这些功能,让Android变得与其他智能手机平台不同。
■ 通知:Android的通知服务让整个系统变成一个整体,因为应用程序可以与底层的系统合作,向用户告知他们想知道的信息。
■ 多任务:用户可以通过“返回”和“最近访问”按钮来轻松快速地切换应用,这预示了移动计算最新的发展趋势,即人们经常会同时运行多个应用来完成任务。
■ 安全性:从一开始,团队就意识到移动应用与桌面应用有本质上的不同,并构建了一个将应用彼此隔离的安全机制。安全性从几年前开始变得越来越重要,而Android从一开始就提供了安全性基础,并根植于内核和硬件的底层。
■ 显示尺寸和密度:团队让应用程序能够在保持正常运行的情况下缩放成不同的显示尺寸和密度,这是支持各种设备和屏幕的关键。
工具:形成应用生态系统
在iPhone和Android出现之前,为移动设备开发的第三方应用确实存在。但人们并不是为了这些应用而购买手机,第三方应用对用户使用设备的时间并没有起到主导作用。相反,手机内置的应用可以帮他们处理大部分任务:接打电话、查阅电子邮件、发信息或浏览网页(以一种有限的方式)。
但是,随着人们开始使用智能手机,他们可以做的事情更多了,他们想要的也超出了设备公司提供的应用。因此,虽然早期Android系统提供的Gmail、地图、浏览器和消息应用都很重要,但对Android来说,向外部开发者敞开大门更为重要。Android允许开发者开发和发布他们自己的应用,并形成一个丰富而庞大的生态系统,让用户可以做更多的事情。
形成应用生态系统对平台来说至关重要,如果不能提供丰富的应用,任何试图进入这个市场的平台都将没有机会。团队为开发者提供了丰富的工具箱,让这些应用和整个生态系统得以生存和发展。
■ 编程语言:选择Java作为开发语言让新的Android开发者能够将已经掌握的技能引入到这个新平台。
■ API:Android从一开始就是一个为所有开发者而开发的平台,而不仅仅是为Android团队。为开发者提供访问系统核心功能的API对于开发出强大的应用程序来说至关重要。
■ SDK:有了API就可以开发应用程序……但很难。随着文档、IDE和无数开发工具的出现,Android应用开发对于大量渴望开发自己的应用程序的开发者来说变得唾手可得。
■ Android Market:一方面为开发者提供了一个可以售卖应用的地方,另一方面让用户可以找到数量巨大并且一直在持续增长的应用,逐渐形成了一个庞大的应用生态系统。
商业:形成设备生态系统
从一开始,Android就打算成为一个开放的平台,让其他公司可以基于这个平台推出自己的产品,而不仅仅是一个用于开发谷歌手机的系统。一些关键的决策和举措让Android被行业广泛采用。
■ 开源:在Android出现之前,设备厂商要么自己构建一个平台,要么花大价钱获取某个平台的授权,要么把不完整的现有解决方案拼凑起来。Android为有迫切需求的厂商提供了一个强大、免费、开放的解决方案。
■ 开放手机联盟:联合合作伙伴公司成立开放手机联盟,形成Android生态系统的共同愿景。在刚开始时甚至没有Android用户,更不用说Android设备了。因此,把这些利益相关者聚集在一起,为共同的愿景提供支持,这对于实现他们所憧憬的未来至关重要。
■ 兼容性:兼容性是Android能够在多样化的生态系统中保持正常运行的关键因素之一,它确保开发者可以开发出适用于任意设备的应用,而不需要为各种设备重写应用。为了解决这个问题,Android团队为厂商提供了兼容性测试套件,确保他们的每一款设备都具备兼容性。
■ 合作伙伴关系:与各种各样的合作伙伴建立关系,并将他们带入Android社区,这一点也至关重要。一方面要提供平台,另一方面也要为厂商提供帮助,让平台运行在他们的设备上,并形成Android取得成功所需的势头。Android团队与合作伙伴密切合作,让平台运行在新设备上,为市场建立起一个设备管道,形成了一个巨大的、囊括了世界各地厂商的Android手机市场。
收购:根牢蒂固
当Android还是一家羽翼未丰的初创公司时,他们面临一个选择:要么拿着风投继续保持独立,要么加入谷歌。他们选择加入谷歌,并认为在这家更大的公司里,比单干更有机会实现自己对Android的愿景。
Android是在谷歌内部开发出来的,这无疑是促成它自身发展的一个重要因素。首先,谷歌资金雄厚,所以获得资金资助会更容易,包括在必要时直接对外采购技术。但是,Android的成功不仅仅是因为它能够拿到谷歌的资金和资源。毕竟,在同一时期,有很多大公司在移动领域的表现并不好。
在谷歌,Android的一个优势是自主权,即可以将自己与其他部门隔离开来,并让团队保持初创公司的活力。他们认为这种活力是Android在早期发布第一款产品时所必需的。另外,相比作为一家独立的初创公司,加入谷歌让Android在与合作伙伴合作时更具优势。
谷歌拥有Android发展过程中所需的技术基础设施。服务团队有将谷歌应用连接到后端服务的经验,他们还能够依赖这些可扩展的基础设施。一家能够处理YouTube这种有极端下载需求的公司,也一定能够为规模较小但不断增长的Android用户提供OTA更新所需的支持。
时机
时机就是一切。对于喜剧来说是如此,对于生活来说也是如此,对于Android的成功来说更是如此。对于Android来说,就是选择成为一个移动平台(当时还有其他几个平台)和成为一个在全球30多亿台设备上运行的操作系统的区别。
Android的时机有多方面的因素:团队能够多快发布1.0版本和更新,什么时候硬件可用并运行得足够快,等等。但最重要的因素可以概括为一个词:竞争。
竞争与合作
在iPhone发布后,厂商迫切需要推出自己的触摸屏产品,以便在不断发展的智能手机市场中参与竞争。因为iPhone的生态系统是封闭的,所以其他厂商只能自己去打造一个引人注目的系统,但当时没有一家公司有这样的条件。而Android一直在开发一个可以支持不同类型设备和需求(比如触摸屏)的平台。
当时,正是这些公司与Android合作并利用这个开源平台推出智能手机设备的好时机。
移动硬件
当时,时机对硬件性能也有积极的影响。CPU、GPU、内存和显示技术的发展让智能手机的功能变得更加强大。硬件性能的提升不仅使推出新机型成为可能,还使计算硬件成为一个全新的利基市场,摆脱了来自旧PC世界平台玩家的束缚。
招聘
时机也影响了初始团队的组建。当时的Android团队由来自PalmSource、Danger和微软等公司的操作系统核心人员组成,他们正准备一起开发这个新项目。这些人都是在同一时间加入的,这意味着Android是由一群人共同启动的,他们不仅具备相关的经验,而且曾经一起工作过,所以他们不需要在团队磨合方面浪费时间,可以直接撸起袖子干。
执行
最后一个与时机有关的因素是团队能够快速行动,充分利用他们所获得的机会。首先,在iPhone发布时,团队已经将核心Android平台开发到了一定程度,几乎已经为急需解决方案的厂商准备好了。此外,团队及时调整方向,抓住了触摸屏的机会,赶在其他可行的解决方案之前将1.0版本和G1推向市场。
如果没有新硬件的出现和iPhone倒逼整个行业寻求可与之竞争的解决方案,Android或许还没有找到立足点,而且还可能成为移动设备历史上众多失败案例中的一个。相反,Android在正确的时间成为世界各地厂商推出智能手机的可行替代方案,从而形成了我们今天所知道的Android生态系统。
成功了?我们还在这里!
“成功”这个词并不恰当,甚至连概念都不对。在任何一个项目中,成功都无法得到保证,无论在任何时刻事情进展得有多顺利。在科技领域更是如此,硬件、软件、时尚、消费者兴趣或任何其他因素的变化都可能在一夜之间让看似成功的产品掉入过时的深渊。这个领域的变化如此之快,以至于我们永远不会有“我们成功了!”的感觉,取而代之的是紧张——“我们还在这里!”甚至是怀疑——“我们还在这里?”你还要回头看看你身后还有谁,看看他们追赶得有多快。
对于Android来说,平台得到了厂商、运营商、开发者和用户的关注,这让它在过去几年中继续存在和改进。在高科技领域,这种情况已经算很好的了。
“我们已经有20亿名用户,我想我们可以说‘我们做到了’。但是,竞争永远不会结束。这很残酷。我们每天都在竞争。”
“我感觉永远不会结束,所以我还在这里。”
——Hiroshi Lockheimer




结束语
任何一个伟大的事业,都是从一个小想法、一个小团队、一些小事情,慢慢启动并逐渐发展起来的。
在历史的浪潮中,一群真正热爱与充满激情的人组成的团队,在不断的更新学习、不安于现状的创造和正确的决策决定下,也终会成功!
