翻译:Ross.Zeng 校对:
开发模式¶
当你考虑是否使用安卓时,了解它的发展过程对修改源码或面对内部依赖时就显得相当重要了。
不同于“传统的”开源项目¶
开源是安卓最为人知的特点。事实上,正如我们所看见,许多开源的软件工程项目被使用在安卓系统中。
尽管有许可证,但安卓却不像多数开源项目那样,它的开发基本上处于非公开状态。比如,大多数的开源项目有公共邮件列表及论坛,可以与主要开发人员交流,且公共的仓库能够提供主开发分支的最新提交。安卓并没有这些。 最好的总结或许来自Andy Rubin,“开源项目与社区驱动型项目不同。相比于社区驱动,安卓更加重视的是开放源代码。”
无论我们喜欢与否,安卓主要还是由谷歌的安卓研发团队开发,公众们既无法参与内部讨论,也无法获取最新的开发分支。不过,谷歌仍然会在新机器适配系统后释放一次代码,这个周期一般是六个月。比如在2010年12月,三星代工的Nexus S面市之后的几天,代号姜饼的安卓2.3系统代码已经可以在android.git.kernel上拉取了。
很显然,开源社区中弥漫着一种不适感。安卓作为一个极其流行的项目,在继续标榜自己开源的同时,其开发模式却又与标准的开源项目背道而驰。在历史上,采用类似这种开发模式的项目从来没有为社区良好地服务过。
撇开这些问题不谈,安卓的研发也是有限的。事实上,除非成为谷歌安卓团队的一员,否则你无法为安卓的开发分支做出贡献。另外,除极少数个例外,你也无法与核心团队成员一对一地讨论所做的改进。不过,你仍然可以在http://android.git.kernel.org/上把修改和改进提交到AOSP。
谷歌这种做法带来最糟糕的副作用就是——你完全没有办法知道安卓研发团队对平台决策的内部消息。如果新的特性被加进了AOSP,例如核心组件被修改时,你只能通过分析之后释放的代码才能了解这些修改是如何完成的,会对你做的改动产生何种影响。此外,你也不可能知道带来这些新增和改动的需求、标准以及问题究竟是什么。如果这是一个原汁原味的开源项目,那么必然会有一个公共邮件列表归档了项目所有相关的信息和观点,这是非常有用的。
尽管如此,谷歌在开源协议下发布安卓操作系统的贡献是那么重要,虽然以开源社区角度来看,它的开发模式十分尴尬。谷歌在安卓上的付出确确实实帮了众多开发者们的大忙。此外,安卓项目还完成了一项创举:创造了一个大规模成功的Linux发行版。因此,安卓团队的努力确实可以称得上无可挑剔。
此外,以业务与市场的立场也能够容易地去反驳那些观点。一个社区驱动的过程势必会削弱谷歌刻意释放的产品宣传。因为每一个新功能的增加都是公开的,所以不可能在如新闻发布等方面去制造什么噱头。并且不确定性也正是社区驱动过程的性质,正如我们所见,一大群人仅仅基于记录的形式,花费了数年时间来商讨实现某些特定功能的最佳方式。安卓的成功无疑归功于谷歌迅速地推进能力,以及发布新型牛逼产品的兴趣。
特征、蓝图和新版本¶
简而言之,并不存在公开的安卓功能及特征的产品蓝图。谷歌最多只会提前公布下一个版本的代号和大致的发布日期。一般在每年五月召开的谷歌IO大会上发布新系统,年底再推送一次更新。版本更新的内容大家只能猜测。
通常,谷歌会选择一家制造商合作完成新的系统。在此期间,谷歌会与这家制造商的工程师密切合作,为新系统打造一款旗舰机。工作期间,合作制造商的团队将获得开发分支顶端的访问权。一旦设备面市,相应的源码就合并到公开的仓库。接着,谷歌再挑选另一个制造商合作研发下一个版本的系统。
在这个周而复始的过程中有一个例外:安卓3.x/蜂巢。谷歌并没有为该系统的旗舰产品——摩托罗拉Xoom释放对应的源代码。种种迹象表明,代码可能永远不会被公开。原因似乎是为了抢占平板电脑的市场先机(iPad 2),安卓开发团队直接从原分支fork了一份代码来开发适用于平板的系统,导致这个版本对手机相关的体验与向后兼容性方面考虑的并不周全。谷歌并不希望安卓3.x的代码开源导致其平台碎片化难以维护,所以在本书编写时,将要推出的安卓4.0/冰激凌三明治系统中,计划同时兼容支持手机和平板设备。