AOSP 常见问题解答 (FAQ)

本文档针对有关 Android 开源平台 (AOSP) 的一般问题做出了解答。

开源问题

Google 为什么开放 Android 的源代码?

根据我们自己在开发移动应用方面的经验,Google 启动了 AOSP。我们希望确保始终有开放的平台可供运营商、原始设备制造商 (OEM) 和开发者使用,以便他们将创新的想法变为现实。另外,我们也希望避免出现任何集中瓶颈,这样的话,就没有任何行业参与者可以一手限制或控制任何其他参与者开展创新。AOSP 有一个最重要的目标,那就是确保尽可能广泛地以兼容的方式实现开源 Android 软件,使每个人都能从中受益。

Android 是哪种开源项目?

Google 负责监督 AOSP 核心部分的开发工作,并致力于打造卓越的开发者和用户社区。在大多数情况下,Android 源代码都是根据宽松的 Apache License 2.0(而非 copyleft 许可)授权用户使用。我们之所以选择 Apache 2.0 许可,是因为相信它有助于推动 Android 软件的广泛应用。有关详情,请参阅许可

为什么由 Google 主管 Android 项目?

开发软件平台是一项非常复杂的工作。开放性对于平台发展的长远成功至关重要,因为开放性会吸引开发者投入其中,并确保公平的竞争环境。不过,平台本身也必须是对用户极具吸引力的产品。

Google 调配了必需的专业工程资源,确保 Android 是具备充分竞争力的软件平台。Google 将 Android 项目视为一个全方位的产品开发运营项目,并致力于达成必要的业务交易,以确保运行 Android 的卓越设备能够成功走向市场。

通过确保 Android 在用户那里获得成功,我们可以确保 Android 作为平台和开源项目的活力。毕竟,谁不希望 Android 源代码成为一款成功的产品呢?

我们的目标是确保围绕 Android 打造一个成功的生态系统。我们开放了 Android 源代码,以便任何人都可以修改和分发软件以满足自己的需求。

Google 在 Android 产品开发方面的总体策略是什么?

我们致力于向竞争激烈的市场推出卓越的设备。有鉴于此,我们会将开发的创新技术和增强功能纳入到下一版本的核心平台中。

在实践中,这意味着 Android 工程团队只侧重于少数“旗舰”设备,并负责开发下一版 Android 软件来为这些产品的发布提供支持。这些旗舰设备可以消化很多产品风险,并为广泛的 OEM 社区开辟新的道路,让他们接下来能够推出更多充分利用新功能的设备。通过这种方式,我们可以确保 Android 平台能够根据现实设备的需求不断发展完善。

Android 软件是如何开发的?

Android 的每个平台版本(例如 1.5 或 8.1)在开源树中都有对应的分支。最新的分支会被视为“当前稳定”分支版本。这个分支是制造商移植到其设备的分支。该分支会始终保持适合发布的状态。

同时,每个版本还有一个“当前实验性”分支,开发者可以在其中开发实验性贡献内容,例如大规模的下一代功能。在适当情况下,实验性分支中的 bug 修复和其他贡献内容可以纳入到当前稳定分支中。

最后,Google 会在开发旗舰设备的同时致力于开发下一版 Android 平台。在适当情况下,该分支将纳入实验性分支和稳定分支中的更改。

如需详细了解代码流水线、分支和版本,请参阅 Android 软件管理

为什么 Android 的部分代码是私下开发的?

将一款设备推向市场通常需要超过一年的时间。设备制造商无疑希望尽可能搭载最新的 Android 软件。与此同时,开发者也不希望在编写应用时还要不断追用该平台的新版本。制造商和开发者都会面临及时推出自家产品与追用最新版本难以两全的状况。

为了解决这个问题,下一版 Android 的部分内容(包括核心平台 API)会在私有分支中进行开发。这些 API 将纳入到下一版 Android 中。我们的目标是,在我们开发下一版平台的同时,让其他人将注意力放在当前稳定版 Android 源代码上。这样一来,开发者和原始设备制造商 (OEM) 便可以使用单个版本,而无需为了跟上 Android 开发步伐而追用尚不完善的未来版本。Android 系统中与应用兼容性无关的其他部分是在开放环境中开发的。我们打算逐渐将其中更多的部分转移到开放的开发环境中。

源代码何时发布?

我们会在源代码准备就绪时发布。发布源代码是一个相当复杂的过程。Android 的某些部分是在开放环境中开发的,因此相应的源代码始终可用。还有一些部分最初是在私有树中开发的,并且相应的源代码会在下一个平台版本准备就绪时发布。

对于某些版本,核心平台 API 会提前足够长的时间准备就绪。这种情况下,我们就可以在设备发布之前推出源代码,以便提前了解反馈情况。对于另外一些版本,我们无法做到这一点。在任何情况下,只要我们认为相应版本属于稳定版本且开发流程允许,我们就会发布平台源代码。

发布新版 Android 的源代码涉及哪些流程?

发布新版 Android 平台的源代码是一个非常重要的过程。首先,该软件要移植到设备的系统映像中,并通过各种形式的认证,包括手机销售区域的政府监管机构认证。另外,该代码还需要通过运营商测试。这是发布过程的一个重要阶段,因为这项测试有助于检测到软件 bug。

在发布事宜得到监管机构和运营商的批准后,制造商将开始大批量生产设备,并且我们将着手发布源代码。

在制造商大批量生产设备的同时,Google 团队将开始为发布开放源代码做一些准备工作。这些准备工作包括进行最终的 API 更改、更新文档(例如,反映在合格性测试期间进行的任何修改)、为新版本准备 SDK,以及发布平台兼容性信息。

我们的法律团队会进行最终的法定签核,以同意将代码发布到开放源代码中。正如开放源代码贡献者需要签署《贡献者许可协议》来证明其拥有所贡献内容的知识产权一样,Google 也必须证明开放源代码没有知识产权方面的纠纷才能进行贡献。

从制造商开始大批量生产设备算起,软件发布过程通常需要大约一个月的时间。这样一来,源代码的发布时间与设备到达用户手中的时间通常差不多。

AOSP 与 Android 兼容性计划有何关联?

AOSP 旨在维护 Android 软件以及开发新版本。由于它的源代码是开放的,因此该软件可用于任何用途,包括以相同的源代码为基础开发与其他设备不兼容的设备。

Android 兼容性计划旨在为 Android 制定与开发者编写的第三方应用兼容的基准实现方式。与 Android 兼容的设备有资格参与 Android 生态系统,其中包括 Google Play;不符合兼容性要求的设备会被排除在该生态系统之外。

也就是说,Android 兼容性计划说明了我们要如何区分“与 Android 兼容的设备”和“只运行 Android 源代码衍生品的设备”。我们欢迎开发者以各种方式使用 Android 源代码,但只有已根据该计划的说明确定为与 Android 兼容的设备才可以参与 Android 生态系统。

如何为 Android 做贡献?

您可以报告 bug、编写适用于 Android 平台的应用,或者为 AOSP 贡献源代码。

关于我们会接受哪些类型的代码贡献内容,我们制定了一些限制条件。例如,有人可能想要贡献备选应用 API,比如完全基于 C++ 的环境。我们会拒绝这种贡献内容,因为 Android 鼓励开发在 ART 运行时中运行的应用。同样,我们也不会接受与我们的许可目标不符的贡献内容(例如 GPL 或 LGPL 库)。

如果您有意贡献源代码,我们建议您在开始任何相关工作前先通过 Android 社区中列出的方式与我们联系。有关详情,请参阅做出贡献

如何成为 Android 代码提交者?

AOSP 其实并没有提交者的概念。所有贡献内容(包括由 Google 员工创作的内容)都是通过一个名为“Gerrit”的基于网页的系统(该系统是 Android 工程流程的一部分)提交的。该系统与 Git 源代码管理系统协同工作,以便明晰地管理源代码贡献内容。

指定的审批人需要接受提交的所有更改。 审批人通常是 Google 员工,但这些审批人也负责审批所有提交内容(不论其来源为何)。

有关详情,请参阅提交补丁