要查看关于其他常见问题的解答,请参阅 developer.android.com 上的 Android 常见问题解答。
开放源代码
Android 开放源代码项目是什么?
我们使用“Android 开放源代码项目”或“AOSP”来表示 Android 涉及的人员、流程和源代码。
人员负责监督该项目并开发实际的源代码。流程指我们为了管理该软件的开发而使用的工具和程序。该项目的最终结果是您可以用来打造手机和其他设备的源代码。
我们为什么开放了 Android 源代码?
根据我们自己在开发移动应用方面的经验,Google 启动了 Android 项目。我们希望确保始终有开放的平台可供运营商、原始设备制造商 (OEM) 和开发者使用,以便他们将创新的想法变为现实。我们还希望确保不存在任何集中瓶颈,这样的话,就没有任何行业参与者可以一手限制或控制任何其他参与者开展创新。Android 开放源代码项目 (AOSP) 有一个最重要的目标,就是确保尽可能广泛、尽可能兼容地实施 Android 开放源代码软件,使每个人都能从中受益。
Android 是哪种开放源代码项目?
Google 负责监督 Android 开放源代码平台核心部分的开发工作,并致力于打造卓越的开发者和用户社区。在大多数情况下,Android 源代码都是根据宽松的 Apache Software License 2.0(而非“Copyleft”许可)授权用户使用。这主要是因为我们最重要的目标是让用户广泛采用该软件,而我们认为 ASL2.0 许可有助于最好地实现这一目标。
您可以在我们的许可页面中找到关于此主题的更多信息。
为什么由 Google 主管 Android 项目?
开发软件平台是一项非常复杂的工作。开放性对于平台的长远成功至关重要,这是因为要吸引开发者投入到其中并确保公平的竞争环境,开放性必不可少。不过,平台本身也必须是对用户极具吸引力的产品。
正是因为这个原因,Google 调配了必需的专业工程资源,以确保 Android 是具备充分竞争力的软件平台。Google 将 Android 项目视为一个全方位的产品开发运营项目,并致力于达成必要的业务交易,以确保运行 Android 的卓越设备能够确确实实地将其推向市场。
通过确保 Android 在用户那里获得成功,我们可以帮助确保 Android 作为平台和开放源代码项目的活力。毕竟,谁不希望 Android 源代码成为一款成功的产品呢?
Google 的目标是确保围绕 Android 打造一个成功的生态系统。当然,没有哪个人必须参与其中。我们开放了 Android 源代码,以便任何人都可以修改和分发该软件来满足自己的需求。
Google 在 Android 产品开发方面的总体策略是什么?
我们致力于向竞争激烈的市场推出卓越的设备。有鉴于此,我们会将开发的创新技术和增强功能纳入到下一版本的核心平台中。
在实践中,这意味着 Android 工程团队通常只侧重于少数“旗舰”设备,并负责开发下一版 Android 软件来为这些产品的发布提供支持。这些旗舰设备可以消化很多产品风险,并为广泛的原始设备制造商 (OEM) 社区开辟新的道路,让他们接下来能够推出更多充分利用新功能的设备。通过这种方式,我们可以确保 Android 平台能够根据现实设备的实际需求不断发展完善。
Android 软件的开发方式是怎样的?
Android 的每个平台版本(例如 1.5、1.6 等)在开放源代码树中都有对应的分支。在任何指定的时刻,最新的此类分支将被视为“当前稳定”的分支版本。这个当前稳定的分支是制造商移植到其设备的分支。该分支会始终保持适合发布的状态。
同时,每个版本还有一个“当前实验性”分支,开发者可以在其中开发实验性贡献内容,例如大型的下一代功能。在适当情况下,实验性分支中的错误更正内容和其他贡献内容可以纳入到当前稳定分支中。
最后,Google 会在开发旗舰设备的同时致力于开发下一版 Android 平台。在适当情况下,该分支将纳入实验性分支和稳定分支中的更改。
您可以在我们的代码流水线、分支和版本页面中找到关于此主题的更多信息。
为什么 Android 的部分内容是在私下开发的?
将一款设备推向市场通常需要超过一年的时间。设备制造商无疑希望植入他们可以植入的最新 Android 软件。与此同时,开发者也不希望在编写应用时还要不断追用该平台的新版本。制造商和开发者都会面临及时推出自家产品与追用最新版本难以两全的状况。
为了解决这个问题,下一版 Android 的部分内容(包括核心平台 API)会在私有分支中进行开发。这些 API 将纳入到下一版 Android 中。我们的目标是,在我们开发下一版平台的同时,让其他人将注意力放在当前稳定版 Android 源代码上。这样一来,开发者和原始设备制造商 (OEM) 便可以使用单个版本,而无需为了跟上 Android 开发步伐而追用尚不完善的未来版本。不过,Android 系统中与应用兼容性无关的其他部分是在开放环境中开发的。我们打算逐渐将其中更多的部分转移到开放的开发环境中。
何时发布源代码?
当源代码准备就绪时发布。发布源代码是一个相当复杂的过程。Android 的某些部分是在开放环境中开发的,因此相应的源代码始终可用。还有一些部分最初是在私有树中开发的,并且相应的源代码会在下一个平台版本准备就绪时发布。
对于某些版本,核心平台 API 会提前足够长的时间准备就绪。这种情况下,我们就可以在设备发布之前推出源代码,以便提前了解反馈情况。不过,对于另外一些版本,我们无法做到这一点。在所有情况下,当我们认为相应版本已足够稳定并且开发流程允许时,我们就会发布平台源代码。
发布新版 Android 的源代码涉及哪些流程?
发布新版 Android 平台的源代码是一个非常重要的过程。首先,该软件要移植到设备的系统映像中,并通过各种形式的认证,包括手机销售区域的政府监管机构认证。另外,该软件还需要通过运营商测试。这是发布过程的一个重要阶段,因为这项测试有助于发现大量的软件错误。
在发布事宜得到监管机构和运营商的批准后,制造商将开始大批量生产设备,并且我们将着手发布源代码。
在制造商大批量生产设备的同时,Google 团队将开始为发布开放源代码做一些准备工作。这些准备工作包括进行最终的 API 更改、更新文档(例如,反映在合格性测试期间进行的任何修改)、为新版本准备 SDK,以及发布平台兼容性信息。
此外,准备工作还包括一项最终法定签核程序,以同意将代码发布到开放源代码中。正如开放源代码贡献者需要签署《贡献者许可协议》来证明其拥有所贡献内容的知识产权一样,Google 也必须证明自己在做贡献。
从制造商开始大批量生产设备算起,软件发布过程通常需要大约一个月的时间。这样一来,源代码的发布时间与设备到达用户手中的时间通常差不多。
AOSP 与 Android 兼容性计划有何关联?
Android 开放源代码项目旨在维护 Android 软件以及开发新版本。由于是开放源代码,因此该软件可用于任何用途,包括开发与基于同一源代码的其他设备不兼容的设备。
Android 兼容性计划旨在为 Android 制定与开发者编写的第三方应用兼容的基准实现方式。“与 Android 兼容”的设备可以参与 Android 生态系统,包括 Google Play;不符合兼容性要求的设备将无法参与该生态系统。
也就是说,Android 兼容性计划规定了我们如何区分“与 Android 兼容的设备”与只是运行 Android 源代码衍生品的设备。我们欢迎各种 Android 源代码使用方式,但只有与 Android 兼容的设备(符合 Android 兼容性计划的定义并通过该计划的测试)才可以参与 Android 生态系统。
如何为 Android 做贡献?
您可以通过多种方式为 Android 做贡献。您可以报告错误、编写适用于 Android 平台的应用,或者为 Android 开放源代码项目贡献源代码。
关于我们愿意或能够接受哪些类型的代码贡献内容,有一些限制。例如,有人可能想要贡献备选应用 API,比如完全基于 C++ 的环境。我们会拒绝这种贡献内容,因为 Android 鼓励开发在 ART 运行时中运行的应用。同样,我们也不会接受与我们的许可目标不符的贡献内容(例如 GPL 或 LGPL 库)。
如果您有意贡献源代码,我们建议您在开始任何相关工作前先通过 Android 社区页面中列出的方式与我们联系。您可以在贡献页面中找到关于此主题的更多信息。
如何成为 Android 代码提交者?
Android 开放源代码项目其实并没有“提交者”这一概念。所有贡献内容(包括由 Google 员工创作的内容)都是通过一个称为“Gerrit”的基于网页的系统提交的,该系统是 Android 工程流程的一部分。该系统与 Git 源代码管理系统协同工作,以便明晰地管理源代码贡献内容。
提交之后,相应更改需要获得指定审批者的批准。审批者通常是 Google 员工,但这些审批者还要负责所有提交内容,不论其来源为何。
您可以在提交补丁程序页面中找到关于此主题的更多信息。
返回页首兼容性
“兼容性”是什么意思?
我们将“与 Android 兼容的设备”定义为可以运行由第三方开发者使用 Android SDK 和 NDK 编写的任何应用的设备。我们将此作为过滤条件来区分可以参与和无法参与 Android 应用生态系统的设备。与 Android 妥善兼容的设备可以申请使用 Android 商标。不兼容的设备只不过是 Android 源代码的衍生产品,不能使用 Android 商标。
也就是说,兼容性是参与 Android 应用生态系统的前提条件。我们欢迎任何人使用 Android 源代码。但如果设备与 Android 不兼容,则不会被视为 Android 生态系统的一部分。
Google Play 在兼容性方面发挥什么作用?
与 Android 兼容的设备可以申请 Google Play 客户端软件使用许可。获得该许可后,这些设备便成为了 Android 应用生态系统的一部分,其用户将能够从所有与 Android 兼容的设备共享的目录中下载开发者的应用。与 Android 不兼容的设备无法获得该许可。
哪些类型的设备可与 Android 兼容?
Android 软件可以移植到许多不同类型的设备上,包括第三方应用无法在其中正常运行的某些设备。Android 兼容性定义文档 (CDD) 中详细说明了将被视为与 Android 兼容的具体设备配置。
例如,虽然可以将 Android 源代码移植到没有摄像头的手机上,但兼容性定义文档要求所有手机都要有摄像头。该要求使得开发者在编写应用时可以采用一系列一致的功能。
兼容性定义文档将会不时进行修订,以反映市场实际情况。例如,1.6 版兼容性定义文档仅支持手机。但 2.1 版兼容性定义文档允许设备不包含电话硬件,这使得平板式音乐播放器等非手机设备也可以是兼容的设备。在修订兼容性定义文档的同时,我们还将改进 Google Play,以便开发者可以控制在哪些地区提供其应用。让我们继续以电话为例,某个用于管理短信的应用在媒体播放器上并没有什么用处,因此 Google Play 允许开发者将该应用限制为专用于手机设备。
如果我的设备与 Android 兼容,它是否会自动获得 Google Play 和品牌标识的使用权限?
Google Play 是由 Google 运营的服务。实现兼容性是获得 Google Play 软件和品牌标识使用权限的前提条件。设备制造商应填写申请 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 会为每个版本维护兼容性定义文档。在为 Android 新版本起草兼容性定义文档时,我们会咨询各种原始设备制造商 (OEM),他们将为该文档的内容提供建议。
各 Android 版本可用于开发新设备的时间有多长?
由于 Android 的代码为开放源代码,因此我们无法阻止任何人使用旧版本来推出设备。不过,Google 将不会授予在被视为已过时的版本上使用 Google Play 客户端软件的许可。这样一来,虽然任何人都可以继续植入旧版 Android,但这些设备将不能使用 Android 名称,并且无法参与 Android 应用生态系统,这同设备与 Android 不兼容的情况类似。
设备是否可以采用不同的界面但仍保持与 Android 兼容?
Android 兼容性计划旨在决定某种设备是否可以运行第三方应用。设备附带的界面组件(例如主屏幕、拨号器、配色方案等)一般对第三方应用的影响不大。因此,设备制造商可以根据自己的喜好随意定制界面。兼容性定义文档确实规定了原始设备制造商 (OEM) 可在多大程度内更改系统界面中会影响第三方应用的区域。
何时发布 Android 新版本的兼容性定义?
我们的目标是,一旦相应的 Android 平台版本已足够成型,允许发布新版 Android 兼容性定义文档,我们就会进行发布。虽然我们无法在植入相应 Android 软件的首款旗舰设备之前发布该软件版本的兼容性定义文档终稿,但我们一定会在这一首款设备之后发布兼容性定义文档终稿。不过,无论实际情况如何,我们都将提供兼容性定义文档的草稿版本。
如何验证设备制造商的兼容性声明?
我们并没有针对 Android 设备兼容性的验证流程。不过,如果相应设备要添加 Google Play,Google 通常会先验证设备的兼容性,设备通过验证后,才会同意为其授予 Google Play 客户端软件使用许可。
如果之后发现声称兼容的设备存在兼容性问题,会怎样?
通常情况下,Google 与 Google Play 被许可人之间保持着良好的关系,这使得我们可以要求他们发布经过更新的系统映像以解决相关问题。
返回页首兼容性测试套件
兼容性测试套件的用途是什么?
兼容性测试套件是一种工具,设备制造商可以借助该工具来确保其设备与 Android 兼容,以及报告测试结果供 Google 验证。原始设备制造商 (OEM) 应在整个工程流程中频繁运行兼容性测试套件,以便尽早发现兼容性问题。
兼容性测试套件会测试哪些类型的项目?
目前,兼容性测试套件会测试所有受支持的 Android 强类型 API 是否存在以及行为是否正常。此外,它还会测试其他非 API 系统行为,例如应用生命周期和性能。我们计划在未来的兼容性测试套件版本中扩大支持范围,以便同时测试 Intent 等“软”API。
兼容性测试套件报告会公开吗?
会。虽然目前尚未实现,但 Google 打算为原始设备制造商 (OEM) 提供基于网络的自助服务工具来发布兼容性测试套件报告,以供任何人查看。制造商可在任意范围内分享兼容性测试套件报告。
兼容性测试套件采用哪种许可方式?
兼容性测试套件是根据大部分 Android 代码使用的 Apache Software License 2.0 授权用户使用。
兼容性测试套件接受贡献内容吗?
接受,而且非常欢迎!Android 开放源代码项目接受贡献内容,以便采用与任何其他组件相同的方式来改进兼容性测试套件。事实上,提高兼容性测试套件测试案例的覆盖范围和质量是协助 Android 的最佳方式之一。
任何人都可以在现有设备上使用兼容性测试套件吗?
兼容性定义文档要求与 Android 兼容的设备实现“adb”调试实用工具。这意味着,任何与 Android 兼容的设备(包括零售的设备)都必须能够运行兼容性测试套件测试。
编解码器需要通过兼容性测试套件验证吗?
需要。所有必需的编解码器都要通过兼容性测试套件验证。
返回页首