翻译:Ross.Zeng 校对:
硬件要求¶
原则上,安卓能够运行在任何可以运行Linux的硬件上。现在的安卓已经可以运行在ARM,x86,MIPS,SuperH及PowerPC这些支持Linux的架构上。如果想将安卓移植到你的硬件设备上,首先你需要将Linux移植过去。除了使用某种显示和指针机制来允许用户与接口交互之外,运行AOSP几乎没有额外的硬件需求。当然,如果硬件不支持AOSP期望的外设,你还是需要根据具体情况做适当的修改。例如板子上不存在GPS模块,你可能会想要像安卓模拟器那样为AOSP在硬件抽象层提供一个虚拟的GPS模组。另外,你也需要确保有足够的空间存储安卓镜像,并使用一颗足够强大的处理器为用户提供优良的使用体验。
总的来说,如果仅仅想将AOSP运行在自己的硬件上几乎没有什么限制。但是如果设备必须要贴上“安卓”商标或必须包含如谷歌地图、谷歌应用商店这些标准的谷歌套件,你就需要通过我之前提到的ACP。ACP有两个独立但互补的部分:兼容性定义文件(CDD)及兼容性测试套件(CTS)。即使不打算过ACP,你也可以看一看CDD和CTS,因为它们给出了安卓设计目标的总体思维模式。
ACP的主要目标,细分到CDD与CTS,是确保为用户及应用开发人员提供统一的生态系统。因此,当你被允许使用“安卓”商标之前,谷歌想要保证不会被不兼容或残缺的产品破坏整个安卓的生态。反过来说,制造商们也能够受益于人们对安卓品牌的认同。关于ACP的更多细节,可以参考此处
兼容性定义文档¶
兼容性定义文档(后文简称CDD)是ACP的策略部分,可以在上面列出的URL中获取。它指出了兼容性设备必须满足的需求。CDD基于RFC2119的语言描述,大量使用“MUST(表示必须要这样做)”,“SHOULD(表示一般情况下应该这样做,特殊情况下可以忽视)”,“MAY(表可选,即可做可不做)”等词来描述不同的属性。文档约有25页长,涵盖了软硬件各个方面的能力。本质上,它覆盖的方面不能仅仅通过CTS去做简单的自动化测试。让我们来看一看CDD的要求。
软件¶
这一节列出了Java和原生API以及web、虚拟机、用户接口兼容性要求。如果你使用的是AOSP,那么应该很容易符合这部分CDD的要求。
应用打包兼容性¶
本节指出你的设备必须能够安装和运行.apk文件。所有的安卓应用都使用Android SDK编译成.apk文件。这些文件将通过安卓应用市场发布并安装到用户的设备上。
多媒体兼容性¶
CDD在这里描述了设备的媒体编解码器(解码器与编码器)、音频录制及音频延迟(区别于delay,更像是潜伏)的要求。AOSP中包含了StageFright多媒体框架,所以使用AOSP是能够通过CDD的。但是,你仍然需要阅读关于音频录制及延迟的章节,这其中包含的特殊技术信息可能对设备上必须配置的硬件配置有所影响。
开发人员工具兼容性¶
这一节列举了设备中必须提供的特定工具。如adb,ddms和monkey都是一些在开发及测试过程中常用的工具。
硬件兼容性¶
这或许对嵌入式开发人员来说是最重要的一部分,这可能会对目标设备的设计决策带来深远的影响。下面列出了每个章节的总结。
显示及图像 + 设备的屏幕在物理显示上至少要有2.5吋 + 分辨率至少为100dpi + 宽高比必须在4:3与16:9之间 + 屏幕显示必须支动态持横竖屏切换。如果不支持切换,那必须支持宽屏模式,因为应用可能会强制改变显示方向。 + 必须支持OpenGL ES 1.0
输入设备 + 设备必须支持输入法框架,并且允许开发人员创建定制的屏上软键盘 + 必须提供至少一个软键盘 + 不允许提供不符合API设计的实体键盘 + 必须提供“HOME”,“MENU”及“BACK”键 + 必须具备触摸屏,无论是电容屏还是电阻屏 + 一般情况下需要支持独立跟踪点(多点触摸)
传感器 虽然所有的传感器描述都是用“SHOULD”,但这并不意味着它们不是强制性的。设备必须准确地报告传感器存在还是不存在,并且必须返回所支持传感器的准确列表。
数据连接 这里最重要的一项是明确指明安卓可能被用于不支持电话的设备。增加这点是因为存在基于安卓的平板设备。此外,文档还指出设备在硬件上应该支持802.11x(wlan)、蓝牙及NFC。最后,设备必须支持带宽200Kbits/s的网络格式。
相机 设备必须有一个后置摄像头,也可以有一个前置摄像头。
内存与存储 + 设备必须有至少128M来存储内核及用户空间 space. + 必须有至少150M存储用户数据 + 必须有至少1G的“共享存储”,本质上指SD卡 + 必须提供从PC访问的共享存储机制。换言之,设备通过USB连接PC时,SD卡的内容必须能够在PC上访问。
USB 这个需求可能是安卓品牌设备以用户为中心的重要体现。它假设用户拥有一台设备后,要求能够通过PC连接时完全控制这台设备。在某些情况下这对开发者而言是一个严重的问题,因为你可能并不想让使用者通过PC连接你的嵌入式设备。尽管如此,CDD这么要求: + 设备必须实现一个能够通过USB接口连接的USB客户端 + 必须实现在USB中的adb命令中实现安卓调试桥(ADB) + 必须实现USB大容量存储,从而允许通过主机访问设备SD卡
性能兼容性¶
虽然CDD没有指定CPU的速度要求,但它指定了app相关的时间限制。这与硬件所选择的CPU速度相关。例如: + 浏览器应用程序必须在1300毫秒内启动 + MMS/SMS程序必须在700毫秒内启动 + 闹钟程序必须在650毫秒内启动 + 重新启动一个正在运行的程序所花费的时间必须比首次启动时间要少
安全模式的兼容性¶
设备必须遵循由安卓应用框架、Dalvik虚拟机与Linux内核实施的安全环境。具体来说,应用程序必需能够按照SDK文档中所描述的那样,能够访问并获得相应的权限。应用程序必须受到像Linux以不同UID作为单独进程运行这样的沙箱限制。文件系统访问权限也必须符合开发人员文档中的对应描述。最后,如果你不使用Dalvik,那么使用任何其他虚拟机都必须提供与Dalvik一样的安全行为。
软件兼容性测试¶
设备必须通过CTS,包括人工操作的CTS验证部分。另外设备必须能够运行安卓应用市场中指定的参考应用程序。
可更新软件¶
必须提供一种更新设备的机制。这可以通过OTA去完成,并以重启的方式离线更新。也可以通过USB连接PC机线刷,或者通过其他移动存储设备离线更新。
兼容性测试套件¶
CTS作为AOSP的一部分,我们将在第10章探讨。AOSP包含一个特殊的构建目标并生成cts命令行工具作为控制测试套件的主要接口。CTS通过adb在USB连接目标中推送并运行测试项。这些测试项是建立在JUnit上的java单元测试框架,并执行框架中如API、Dalvik、Intent、Permission等不同的部分。一旦测试完成,它们会生成一个包含了XML文件及对应屏幕截图的.zip压缩文件,这些文件需要被提供给cts@android.com