常见问题解答

本页提供了一些常见问题解答 (FAQ)。

开放源代码

什么是 Android 开源项目?

Android 开源项目 (AOSP) 是指打造出 Android 的人员、流程和源代码。

人员负责监督项目并开发源代码。流程是指我们为了管理软件的开发而使用的工具和程序。最终得到是可让您用于手机和其他设备的源代码。

我们为什么开放了 Android 源代码?

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

Android 是哪种开源项目?

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

为什么由 Google 主管 Android 项目?

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

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

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

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

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

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

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

Android 软件是如何开发的?

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

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

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

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

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

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

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

何时发布源代码?

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

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

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

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

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

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

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

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

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

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

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

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

如何为 Android 做贡献?

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

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

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

如何成为 Android 代码提交者?

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

提交后,相应更改需要获得指定审批者的批准。审批者通常是 Google 员工,但这些审批者也负责审批所有提交内容(不论其来源为何)。

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

返回页首

兼容性

什么是 Android“兼容性”?

我们将“Android 兼容设备”定义为可运行由第三方开发者使用 Android SDK 和 NDK 编写的任何应用的设备。我们会将这项内容作为过滤条件来区分可以参与和无法参与 Android 应用生态系统的设备。对于与 Android 妥善兼容的设备,设备制造商可以申请使用 Android 商标。不兼容的设备则是 Android 源代码的衍生产品,不允许使用 Android 商标。

也就是说,兼容是参与 Android 应用生态系统的前提条件。我们欢迎任何人使用 Android 源代码。不过,如果设备与 Android 不兼容,则不会视为 Android 生态系统的一部分。

Google Play 在兼容性方面发挥什么作用?

Android 兼容设备的设备制造商可以申请 Google Play 客户端软件使用许可。获得该许可后,这些设备便可参与 Android 应用生态系统,从而让其用户能够从所有兼容设备所共享的目录中下载开发者的应用。许可不适用于不兼容的设备。

哪些类型的设备可与 Android 兼容?

Android 软件可以移植到许多不同的设备上,包括第三方应用无法在其中正常运行的某些设备。Android 兼容性定义文档 (CDD) 中详细说明了被视为与 Android 兼容的具体设备配置。

例如,虽然可以将 Android 源代码移植到没有摄像头的手机上,但兼容性定义文档要求所有手机都要有摄像头。该要求使得开发者在编写应用时可以采用一系列一致的功能。

兼容性定义文档将继续进行修订,以反映市场实际情况。例如,1.6 版兼容性定义文档仅支持手机。不过,2.1 版兼容性定义文档允许设备不含电话硬件,这使得平板电脑式音乐播放器等非手机设备也可以是兼容的设备。在修订兼容性定义文档的同时,我们还将改进 Google Play,以便开发者控制在哪些地方提供其应用。让我们继续以电话为例,某个用于管理短信的应用在媒体播放器上并没有什么用处,因此 Google Play 允许开发者将该应用限制为专用于手机设备。

如果我的设备与 Android 兼容,它是否会自动获得 Google Play 和品牌标识的使用权限?

不,不会自动获得。Google Play 是由 Google 运营的服务。实现兼容性是获得 Google Play 软件和品牌标识使用权限的前提条件。在设备确定为 Android 兼容设备后,设备制造商应填写申请 Google 移动服务许可中提供的联系表单,以获得 Google Play 使用权限。如果我们可以为您提供帮助,将会与您联系。

如果我不是制造商,如何获得 Google Play 使用权限?

我们只会向在设备中搭载 Android 的手机制造商授予 Google Play 使用许可。如有关于具体情况方面的问题,请发送电子邮件至 android-partnerships@google.com 与我们联系。

如何获得 Android 版 Google 应用(例如 Google 地图)的使用权限?

Android 版 Google 应用(例如 YouTube、Google 地图和 Gmail)属于 Google 的产品和服务,并不是 Android 的一部分,需要单独授予许可。如有关于这些应用方面的问题,请发送电子邮件至 android-partnerships@google.com 与我们联系。

兼容性是否为强制要求?

不是,您可以自行选择是否参与 Android 兼容性计划。由于 Android 源代码是开放的,因此任何人都可以使用它来打造任何类型的设备。不过,如果制造商希望在其产品中使用 Android 名称,或希望获得 Google Play 使用权限,则必须要先证明其设备与 Android 兼容

兼容性认证的费用是多少?

设备的 Android 兼容性认证无需任何费用。兼容性测试套件为开放源代码,可供任何人用于设备测试。

兼容性认证需要多长时间?

该过程是自动进行的。兼容性测试套件会生成一份报告,您可以将该报告提供给 Google 来证明兼容性。我们计划将来提供一些用于将这些报告上传到公共数据库的自助服务工具。

兼容性定义由谁制定?

由于 Google 负责把握 Android 作为平台和产品的总体发展方向,因此 Google 会为每个版本维护兼容性定义文档 (CDD)。在为 Android 新版本起草兼容性定义文档时,我们会咨询各个 OEM,请他们提供相关建议。

各 Android 版本可用于开发新设备的时间有多长?

由于 Android 的代码是开放源代码,因此我们无法阻止任何人使用旧版本推出设备。不过,Google 将会选择不授予在已过时版本上使用 Google Play 客户端软件的许可。这样一来,虽然任何人都可以继续搭载旧版 Android,但这些设备将不能使用 Android 名称,并会被排除在 Android 应用生态系统之外,这种情况类似于设备和 Android 不兼容的情况。

设备是否可以采用不同的界面但仍保持与 Android 兼容?

Android 兼容性计划旨在决定设备是否可以运行第三方应用。设备附带的界面组件(例如主屏幕、拨号器、配色方案等)一般对第三方应用的影响不大。因此,设备制造商可以根据自己的喜好随意定制界面。兼容性定义文档规定了 OEM 可在多大程度上更改系统界面中会影响第三方应用的区域。

何时发布 Android 新版本的兼容性定义?

我们的目标是,当相应的 Android 平台版本已足够成型,允许发布新版 Android 兼容性定义文档 (CDD) 时,我们就会予以发布。虽然我们无法在植入相应 Android 软件的首款旗舰设备之前发布该软件版本的 CDD 终稿,但我们一定会在这一首款设备之后发布 CDD 终稿。不过,只要实际可行,我们就会发布 CDD 的草稿版。

如何验证设备制造商的兼容性声明?

我们并没有针对 Android 设备兼容性的验证流程。不过,如果设备要添加 Google Play,Google 通常会先验证设备的兼容性,设备通过验证后,我们才会同意为其授予 Google Play 客户端软件使用许可。

如果之后发现声称兼容的设备存在兼容性问题,会怎样?

通常情况下,Google 与 Google Play 被许可人之间会保持着良好的关系,这使得我们可以要求设备制造商发布经过更新的系统映像,以解决相关问题。

返回页首

兼容性测试套件

兼容性测试套件的用途是什么?

兼容性测试套件是一种工具,设备制造商可以借助该工具来帮助确保其设备与 Android 兼容,以及报告测试结果供验证。OEM 应在整个工程流程中频繁运行兼容性测试套件,以便尽早发现兼容性问题。

兼容性测试套件会测试哪些类型的项目?

目前,兼容性测试套件会测试所有受支持的 Android 强类型 API 是否存在以及行为是否正常。此外,它还会测试其他非 API 系统行为,例如应用生命周期和性能。我们计划在未来的兼容性测试套件版本中扩大支持范围,以便测试 Intent 等“软”API。

兼容性测试套件报告会公开吗?

会。虽然目前尚未实现,但 Google 打算为 OEM 提供基于网络的自助服务工具来发布兼容性测试套件报告,以供任何人查看。制造商可以根据自己的喜好与众多受众群体分享兼容性测试套件报告。

兼容性测试套件采用哪种许可方式?

兼容性测试套件是根据大部分 Android 代码使用的 Apache Software License 2.0 授权使用。

兼容性测试套件接受贡献内容吗?

接受,而且非常欢迎!Android 开源项目接受贡献内容,以便采用与任何其他组件相同的方式来改进兼容性测试套件。事实上,提高兼容性测试套件测试案例的覆盖范围和质量是协助 Android 的最佳方式之一。

任何人都可以在现有设备上使用兼容性测试套件吗?

兼容性定义文档要求与 Android 兼容的设备实现 adb 调试实用程序。这意味着,任何与 Android 兼容的设备(包括零售的设备)都必须能够运行“兼容性测试套件”测试。

编解码器需要通过兼容性测试套件验证吗?

会。所有必需的编解码器都要通过兼容性测试套件验证。

返回页首