修订版 3
上次更新时间:2013年6月24日
版权所有 © 2012, Google Inc. 保留所有权利。
compatibility@android.com
目录
1. 简介
2. 参考资源
3. 软件
3.1. 托管 API 兼容性
3.2. 软 API 兼容性
3.2.1. 权限
3.2.2. 构建参数
3.2.3. Intent 兼容性
3.2.3.1. 核心应用 Intent
3.2.3.2. Intent 覆盖
3.2.3.3. Intent 命名空间
3.2.3.4. 广播 Intent
3.3. 原生 API 兼容性
3.3.1 应用程序二进制接口
3.4. Web 兼容性
3.4.1. WebView 兼容性
3.4.2. 浏览器兼容性
3.5. API 行为兼容性
3.6. API 命名空间
3.7. 虚拟机兼容性
3.8. 用户界面兼容性
3.8.1. 小部件
3.8.2. 通知
3.8.3. 搜索
3.8.4. Toast
3.8.5. 主题
3.8.6. 动态壁纸
3.8.7. 最近使用的应用程序显示
3.8.8. 输入管理设置
3.8.9. 锁屏远程控制
3.9 设备管理
3.10 辅助功能
3.11 文本转语音
4. 应用程序打包兼容性
5. 多媒体兼容性
5.1. 媒体编解码器
5.2. 视频编码
5.3. 音频录制
5.4. 音频延迟
5.5. 网络协议
6. 开发者工具兼容性
7. 硬件兼容性
7.1. 显示和图形
7.1.1. 屏幕配置
7.1.2. 显示指标
7.1.3. 屏幕方向
7.1.4. 2D 和 3D 图形加速
7.1.5. 旧版应用程序兼容模式
7.1.6. 屏幕类型
7.1.7. 屏幕技术
7.2. 输入设备
7.2.1. 键盘
7.2.2. 非触摸导航
7.2.3. 导航键
7.2.4. 触摸屏输入
7.2.5. 伪触摸输入
7.2.6. 麦克风
7.3. 传感器
7.3.1. 加速度计
7.3.1. 加速度计
7.3.2. 磁力计
7.3.3. GPS
7.3.4. 陀螺仪
7.3.5. 气压计
7.3.6. 温度计
7.3.7. 光度计
7.3.8. 接近传感器
7.4. 数据连接
7.4.1. 电话
7.4.2. IEEE 802.11 (WiFi)
7.4.2.1. WiFi 直连
7.4.3. 蓝牙
7.4.4. 近场通信 (NFC)
7.4.5. 最低网络能力
7.5. 摄像头
7.5.1. 后置摄像头
7.5.2. 前置摄像头
7.5.3. 相机 API 行为
7.5.4. 相机方向
7.6. 内存和存储
7.6.1. 最低内存和存储
7.6.2. 应用程序共享存储
7.7. USB
8. 性能兼容性
9. 安全模型兼容性
9.1. 权限
9.2. UID 和进程隔离
9.3. 文件系统权限
9.4. 备用执行环境
10. 软件兼容性测试
10.1. 兼容性测试套件
10.2. CTS 验证程序
10.3. 参考应用程序
11. 可更新的软件
12. 联系我们
附录 A - 蓝牙测试程序
1. 简介
本文档列举了设备要与 Android 4.1 兼容必须满足的要求。
设备要与 Android 4.1 兼容必须满足的要求。
“必须”、“不得”、“必需”、“应”、“不应”、“应该”、“不应该”
“建议”、“可以”和“可选”的使用符合 RFC2119 中定义的 IETF 标准
[参考资源,1]。
在本文档中,“设备实现方”或“实现方”是指开发运行 Android 4.1 的硬件/软件解决方案的个人或
组织。“设备
实现”或“实现”是指如此开发的硬件/软件解决方案。
为了被视为与 Android 4.1 兼容,设备实现必须满足
本兼容性定义中提出的要求,包括通过引用并入的任何文档。
通过引用并入的任何文档。
如果本定义或第 10 节中描述的软件测试内容不明确、
含糊或不完整,则设备实现方有责任确保
与现有实现的兼容性。
因此,Android 开放源代码项目 [参考资源,3] 既是 Android 的参考
实现,也是首选实现。强烈建议设备实现方
尽可能基于 Android 开放源代码项目提供的
“上游”源代码进行实现。虽然某些
组件在理论上可以替换为其他实现,但
强烈建议不要这样做,因为通过软件测试将变得
更加困难。设备实现方有责任确保完全行为
与标准 Android 实现的兼容性,包括且不限于
兼容性测试套件。最后,请注意,本文档明确禁止某些组件替换和
修改。
2. 参考资源
1. IETF RFC2119 要求级别:http://www.ietf.org/rfc/rfc2119.txt
2. Android 兼容性计划概述
https://aosp.org.cn/compatibility/index.html
3. Android 开放源代码项目:https://aosp.org.cn/
4. API 定义和文档:
https://developer.android.com.cn/reference/packages.html
5. Android 权限参考
https://developer.android.com.cn/reference/android/Manifest.permission.html
6. android.os.Build 参考
https://developer.android.com.cn/reference/android/os/Build.html
7. Android 4.1 允许的版本字符串
https://aosp.org.cn/compatibility/4.1/versions.html
8. Renderscript
https://developer.android.com.cn/guide/topics/graphics/renderscript.html
9. 硬件加速
https://developer.android.com.cn/guide/topics/graphics/hardware-accel.html
10. android.webkit.WebView 类
https://developer.android.com.cn/reference/android/webkit/WebView.html
11. HTML5:http://www.whatwg.org/specs/web-apps/current-work/multipage/
12. HTML5 离线功能:http://dev.w3.org/html5/spec/Overview.html#offline
13. HTML5 视频标签:http://dev.w3.org/html5/spec/Overview.html#video
14. HTML5/W3C 地理位置 API:http://www.w3.org/TR/geolocation-API/
15. HTML5/W3C webdatabase API:http://www.w3.org/TR/webdatabase/
16. HTML5/W3C IndexedDB API:http://www.w3.org/TR/IndexedDB/
17. Dalvik 虚拟机规范:可在 Android 源代码的 dalvik/docs 中找到
dalvik/docs
18. AppWidgets
https://developer.android.com.cn/guide/practices/ui_guidelines/widget_design.html
19. 通知
https://developer.android.com.cn/guide/topics/ui/notifiers/notifications.html
20. 应用程序资源:http://code.google.com/android/reference/available-
resources.html
21. 状态栏图标样式指南:
https://developer.android.com.cn/guide/practices/ui_guidelines/icon_design_status_bar.html
22. 搜索管理器:
https://developer.android.com.cn/reference/android/app/SearchManager.html
23. Toast:https://developer.android.com.cn/reference/android/widget/Toast.html
24. 主题:https://developer.android.com.cn/guide/topics/ui/themes.html
25. R.style 类:https://developer.android.com.cn/reference/android/R.style.html
26. 动态壁纸:https://developer.android.com.cn/resources/articles/live-
wallpapers.html
27. Android 设备管理
https://developer.android.com.cn/guide/topics/admin/device-admin.html
28. android.app.admin.DevicePolicyManager 类
https://developer.android.com.cn/reference/android/app/admin/DevicePolicyManager.html
29. Android 辅助功能服务 API
https://developer.android.com.cn/reference/android/accessibilityservice/package-
summary.html
30. Android 辅助功能 API
https://developer.android.com.cn/reference/android/view/accessibility/package-
summary.html
31. Eyes Free 项目:http://code.google.com/p/eyes-free
32. 文本转语音 API:
https://developer.android.com.cn/reference/android/speech/tts/package-
summary.html
33. 参考工具文档(适用于 adb、aapt、ddms):
https://developer.android.com.cn/guide/developing/tools/index.html
34. Android apk 文件描述:
https://developer.android.com.cn/guide/topics/fundamentals.html
35. 清单文件:https://developer.android.com.cn/guide/topics/manifest/manifest-
intro.html
36. Monkey 测试工具:
https://developer.android.com.cn/studio/test/other-testing-tools/monkey
37. Android android.content.pm.PackageManager 类和硬件 Features
列表
https://developer.android.com.cn/reference/android/content/pm/PackageManager.html
38. 支持多种屏幕
https://developer.android.com.cn/guide/practices/screens_support.html
39. android.util.DisplayMetrics
https://developer.android.com.cn/reference/android/util/DisplayMetrics.html
40. android.content.res.Configuration
https://developer.android.com.cn/reference/android/content/res/Configuration.html
41. android.hardware.SensorEvent
https://developer.android.com.cn/reference/android/hardware/SensorEvent.html
42. 蓝牙 API
https://developer.android.com.cn/reference/android/bluetooth/package-summary.html
43. NDEF 推送协议:https://aosp.org.cn/compatibility/ndef-push-
protocol.pdf
44. MIFARE MF1S503X:http://www.nxp.com/documents/data_sheet/MF1S503x.pdf
45. MIFARE MF1S703X:http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
46. MIFARE MF0ICU1:http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf
47. MIFARE MF0ICU2
http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf
48. MIFARE AN130511
http://www.nxp.com/documents/application_note/AN130511.pdf
49. MIFARE AN130411
http://www.nxp.com/documents/application_note/AN130411.pdf
50. 相机方向 API
https://developer.android.com.cn/reference/android/hardware/Camera.html#setDisplayOrientation(int)
51. android.hardware.Camera
https://developer.android.com.cn/reference/android/hardware/Camera.html
52. Android 开放附件:
https://developer.android.com.cn/guide/topics/usb/accessory.html
53. USB 主机 API:https://developer.android.com.cn/guide/topics/usb/host.html
54. Android 安全和权限参考
https://developer.android.com.cn/guide/topics/security/security.html
55. Apps for Android:http://code.google.com/p/apps-for-android
56. android.app.DownloadManager 类
https://developer.android.com.cn/reference/android/app/DownloadManager.html
57. Android 文件传输:http://www.android.com/filetransfer
58. Android 媒体格式:https://developer.android.com.cn/guide/appendix/media-
formats.html
59. HTTP Live Streaming Draft 协议:http://tools.ietf.org/html/draft-pantos-http-
live-streaming-03
60. NFC 连接切换:http://www.nfc-
forum.org/specs/spec_list/#conn_handover
61. 使用 NFC 的蓝牙安全简单配对:http://www.nfc-
forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf
62. Wifi 多播 API:
https://developer.android.com.cn/reference/android/net/wifi/WifiManager.MulticastLock.html
63. Action Assist
https://developer.android.com.cn/reference/android/content/Intent.html#ACTION_ASSIST
64. USB 充电规范
http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf
65. Android Beam:https://developer.android.com.cn/guide/topics/nfc/nfc.html
66. Android USB 音频
https://developer.android.com.cn/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
67. Android NFC 共享设置
https://developer.android.com.cn/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
68. Wifi Direct (Wifi P2P)
https://developer.android.com.cn/reference/android/net/wifi/p2p/WifiP2pManager.html
69. 媒体远程控制客户端
https://developer.android.com.cn/reference/android/media/RemoteControlClient.html
70. MotionEvent API:
https://developer.android.com.cn/reference/android/view/MotionEvent.html
71. 触摸输入配置:https://aosp.org.cn/tech/input/touch-
devices.html
这些资源中的许多直接或间接地来源于 Android 4.1 SDK,
并且在功能上与该 SDK 文档中的信息相同。在任何
情况下,如果本兼容性定义或兼容性测试套件与
SDK 文档不一致,则以 SDK 文档为准。任何
以上参考资料中提供的任何技术细节均被
视为本兼容性定义的一部分。
3. 软件
3.1. 托管 API 兼容性
托管(基于 Dalvik)执行环境是 Android
应用程序的主要载体。Android 应用程序编程接口 (API) 是
暴露给在托管 VM 环境中运行的应用
程序的一组 Android 平台接口。设备实现必须提供
Android 4.1
SDK [参考资源,4] 暴露的任何文档化 API 的完整实现,包括所有文档化行为。
设备实现不得省略任何托管 API、更改 API 接口或
签名、偏离文档化行为或包含空操作,除非
本兼容性定义明确允许。
本兼容性定义允许设备实现省略 Android
包含 API 的某些类型的硬件。在这种情况下,API 必须
仍然存在并以合理的方式运行。有关
此场景的具体要求,请参阅第 7 节。
3.2. 软 API 兼容性
除了第 3.1 节中的托管 API 之外,Android 还包括重要的
运行时“软”API,其形式包括 Intent、权限以及
Android 应用程序的类似方面,这些方面无法在应用程序编译
时强制执行。
3.2.1. 权限
设备实现方必须支持并强制执行
权限参考页面 [参考资源,5] 中记录的所有权限常量。请注意,第 10
节列出了与 Android 安全模型相关的其他要求。
3.2.2. 构建参数
Android API 在
android.os.Build
类[参考资源,6] 上包含许多旨在描述当前设备的常量。为了在设备实现之间提供一致、
有意义的值,下表包含对设备实现必须
遵守的这些值格式的附加限制
符合。
参数
注释
当前正在运行的 Android 系统的版本,以人类可读的格式表示。此字段必须具有以下之一
android.os.Build.VERSION.RELEASE
在 [Resources, 7] 中定义的字符串值。
当前正在运行的 Android 系统的版本,以第三方应用程序代码可访问的格式表示。
android.os.Build.VERSION.SDK
对于 Android 4.1,此字段必须具有整数值 16。
当前正在运行的 Android 系统的版本,以第三方应用程序代码可访问的格式表示。
android.os.Build.VERSION.SDK_INT
对于 Android 4.1,此字段必须具有整数值 16。
设备实现者选择的值,用于指定当前正在运行的 Android 的特定构建版本
系统,以人类可读的格式表示。此值不得重复使用于为以下对象提供的不同构建版本
android.os.Build.VERSION.INCREMENTAL
最终用户。此字段的典型用途是指示用于生成构建版本的构建编号或源代码控制更改标识符。
对此字段的特定格式没有要求,但它不得为空或空字符串 ("")。
不得为空或空字符串 ("")。
设备实现者选择的值,用于标识设备使用的特定内部硬件,以
人类可读的格式表示。此字段的可能用途是指示为设备供电的电路板的特定修订版本。
android.os.Build.BOARD
设备。此字段的值必须可编码为 7 位 ASCII,并匹配正则表达式
"^[a-zA-Z0-9.,_-]+$"。
设备实现者选择的值,用于标识生产设备的公司、组织、个人等的名称。
以人类可读的格式表示。此字段的可能用途是指示 OEM
android.os.Build.BRAND
和/或销售设备的运营商。此字段的值必须可编码为 7 位 ASCII,并匹配
正则表达式 "^[a-zA-Z0-9.,_-]+$"。
本机代码的指令集(CPU 类型 + ABI 约定)的名称。请参阅第 3.3 节:本机 API
android.os.Build.CPU_ABI
兼容性。
第二个指令集(CPU 类型 + ABI 约定)的名称,用于本机代码。请参阅第 3.3 节:本机
android.os.Build.CPU_ABI2
API 兼容性。
设备实现者选择的值,用于标识设备主体的特定配置或修订版本
android.os.Build.DEVICE
(有时称为“工业设计”)。此字段的值必须可编码为 7 位
ASCII,并匹配正则表达式 "^[a-zA-Z0-9.,_-]+$"。
唯一标识此构建版本的字符串。它应该是合理的人类可读格式。它必须遵循以下
模板:
$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)
例如:
android.os.Build.FINGERPRINT
acme/mydevice/generic:4.1/JRN53/3359:userdebug/test-keys
指纹不得包含空格字符。如果上面模板中包含的其他字段包含
空格字符,则必须在构建指纹中将其替换为另一个字符,例如
下划线 ("_") 字符。此字段的值必须可编码为 7 位 ASCII。
硬件的名称(来自内核命令行或 /proc)。它应该是合理的人类可读格式。
android.os.Build.HARDWARE
可读。此字段的值必须可编码为 7 位 ASCII,并匹配正则表达式 "^[a-
zA-Z0-9.,_-]+$"。
唯一标识构建版本所在主机的字符串,以人类可读的格式表示。对此没有
android.os.Build.HOST
对此字段的特定格式没有要求,但它不得为空或空字符串 ("")。
设备实现者选择的标识符,用于指代特定版本,以人类可读的格式表示。此
字段可以与 android.os.Build.VERSION.INCREMENTAL 相同,但应该是足够
android.os.Build.ID
对最终用户有意义的值,以便区分软件构建版本。此字段的值必须可编码
为 7 位 ASCII,并匹配正则表达式 "^[a-zA-Z0-9.,_-]+$"。
产品原始设备制造商 (OEM) 的商标名称。对此没有要求
android.os.Build.MANUFACTURER
对此字段的特定格式没有要求,但它不得为空或空字符串 ("")。
设备实现者选择的值,包含最终用户已知的设备名称。此
android.os.Build.MODEL
应该是设备向最终用户销售和营销时使用的名称。没有
对此字段的特定格式没有要求,但它不得为空或空字符串 ("")。
设备实现者选择的值,包含产品的开发名称或代号
android.os.Build.PRODUCT
(SKU)。必须是人类可读的,但不一定旨在供最终用户查看。此字段的值
必须可编码为 7 位 ASCII,并匹配正则表达式 "^[a-zA-Z0-9.,_-]+$"。
硬件序列号(如果可用)。此字段的值必须可编码为 7 位 ASCII,并匹配
android.os.Build.SERIAL
正则表达式 "^([a-zA-Z0-9]{0,20})$"。
设备实现者选择的以逗号分隔的标记列表,用于进一步区分构建版本。例如
android.os.Build.TAGS
例如,“unsigned,debug”。此字段的值必须可编码为 7 位 ASCII,并匹配正则
表达式 "^[a-zA-Z0-9.,_-]+$"。
android.os.Build.TIME
表示构建发生时间的时间戳的值。
设备实现者选择的值,用于指定构建版本的运行时配置。此字段
应具有与三种典型的 Android 运行时配置之一对应的值:“user”、
android.os.Build.TYPE
“userdebug”或“eng”。此字段的值必须可编码为 7 位 ASCII,并匹配正则
表达式 "^[a-zA-Z0-9.,_-]+$"。
生成构建版本的用户(或自动化用户)的名称或用户 ID。对此没有要求
android.os.Build.USER
对此字段的特定格式没有要求,但它不得为空或空字符串 ("")。
3.2.3. Intent 兼容性
设备实现必须遵守 Android 的松耦合 Intent 系统,如
以下各节所述。所谓“遵守”,是指设备实现者
必须提供一个 Android Activity 或 Service,它指定匹配的 Intent 过滤器,并且
绑定到并为每个指定的 Intent 模式实现正确的行为。
3.2.3.1. 核心应用程序 Intent
Android 上游项目定义了许多核心应用程序,例如联系人、
日历、照片库、音乐播放器等。设备实现者可以替换
这些应用程序的替代版本。
但是,任何此类替代版本都必须遵守上游项目提供的相同 Intent 模式。
例如,如果设备包含替代音乐播放器,
它仍然必须遵守第三方应用程序发出的用于选择歌曲的 Intent 模式。
以下应用程序被认为是核心 Android 系统应用程序
桌面时钟
浏览器
日历
联系人
图库
全局搜索
启动器
音乐
设置
核心 Android 系统应用程序包括各种 Activity 或 Service 组件,
被认为是“公共”的。也就是说,属性“android:exported”可能不存在,或者
可能具有值“true”。
对于核心 Android 系统应用程序之一中定义的每个 Activity 或 Service,如果未
通过值为“false”的 android:exported 属性标记为非公共,则设备
实现必须包含一个相同类型的组件,该组件实现
与核心 Android 系统应用程序相同的 Intent 过滤器模式。
换句话说,设备实现可以替换核心 Android 系统应用程序;
但是,如果这样做,则设备实现必须支持每个核心 Android 系统应用程序定义的所有 Intent 模式,这些应用程序将被替换。
由每个核心 Android 系统应用程序替换。
3.2.3.2. Intent 覆盖
由于 Android 是一个可扩展平台,设备实现必须允许第三方应用程序覆盖第 3.2.3.2 节中引用的每个 Intent 模式。上游
平台允许第三方应用程序覆盖第 3.2.3.2 节中引用的每个 Intent 模式。上游
Android 开源实现默认允许这样做;设备
实现者不得将特殊权限附加到系统应用程序对这些 Intent 模式的使用,或阻止第三方应用程序绑定到并接管
这些 Intent 模式的控制权。此项禁止明确包括但不限于
禁用“选择器”用户界面,该界面允许用户在多个
应用程序之间进行选择,这些应用程序都处理相同的 Intent 模式。
应用程序之间进行选择,这些应用程序都处理相同的 Intent 模式。
但是,设备实现可以为特定的 URI 模式(例如 http://play.google.com)提供默认活动,如果默认活动为数据 URI 提供更具体的过滤器。
模式(例如 http://play.google.com)提供默认活动,如果默认活动为数据 URI 提供更具体的过滤器。
例如,指定数据 URI “http://www.android.com”的 intent 过滤器比 “http://”的浏览器过滤器更具体。设备
“http://www.android.com”的 intent 过滤器比 “http://”的浏览器过滤器更具体。设备
实现必须提供用户界面,供用户修改 intent 的默认活动。
intent 的默认活动。
3.2.3.3. Intent 命名空间
设备实现不得包含任何 Android 组件,该组件使用 android.* 或 com.android.* 命名空间中的 ACTION、CATEGORY 或其他键字符串来处理任何新的 Intent 或 Broadcast Intent 模式。
新的 Intent 或 Broadcast Intent 模式,使用 android.* 或 com.android.* 命名空间中的 ACTION、CATEGORY 或其他键
字符串。设备实现者不得
包含任何 Android 组件,这些组件使用属于
另一个组织的包空间中的 ACTION、CATEGORY 或其他键字符串来处理任何新的 Intent 或 Broadcast Intent 模式。
另一个组织的包空间中的 ACTION、CATEGORY 或其他键字符串来处理任何新的 Intent 或 Broadcast Intent 模式。
第 3.2.3.1 节中列出的核心应用程序使用的 Intent 模式。设备实现可以
包括使用与其自身组织明确且明显关联的命名空间的 Intent 模式。
自身组织。
此项禁止类似于第 3.2.3.4 节中为 Java 语言类指定的禁止。
3.6.
3.2.3.4. Broadcast Intent
第三方应用程序依赖平台广播某些 Intent 以通知它们硬件或软件环境中的更改。
硬件或软件环境中的更改。Android 兼容设备
必须广播公共广播 Intent 以响应适当的系统事件。广播 Intent 在 SDK 文档中进行了描述。
广播公共广播 Intent 以响应适当的系统事件。广播 Intent 在 SDK 文档中进行了描述。
3.3. 本机 API 兼容性
3.3.1 应用程序二进制接口
在 Dalvik 中运行的托管代码可以调用在应用程序 .apk 文件中作为为适当的设备硬件架构编译的 ELF .so 文件提供的本机代码。
.apk 文件中作为为适当的设备硬件架构编译的 ELF .so 文件提供的本机代码。
由于本机代码高度依赖于底层处理器技术,Android 在 Android NDK 的文件 docs/CPU-ARCH-ABIS.html 中定义了许多应用程序二进制接口 (ABI)。
在 Android NDK 的文件 docs/CPU-ARCH-ABIS.html 中定义了许多应用程序二进制接口 (ABI)。如果设备实现与一个或多个定义的 ABI 兼容,则应实现与 Android NDK 的兼容性,如下所示。
定义的 ABI 兼容,则应实现与 Android NDK 的兼容性,如下所示。
定义的 ABI 兼容,则应实现与 Android NDK 的兼容性,如下所示。
如果设备实现包含对 Android ABI 的支持,则它
必须包含对以托管环境运行的代码的支持,以便使用标准 Java 本机接口 (JNI) 语义调用本机代码。
使用标准 Java 本机接口 (JNI) 语义调用本机代码。
必须与以下列表中每个必需的库在源代码上兼容(即,标头兼容)和二进制兼容(对于 ABI)。
以下列表中每个必需的库在源代码上兼容(即,标头兼容)和二进制兼容(对于 ABI)。
必须通过 android.os.Build.CPU_ABI API 准确报告设备支持的本机应用程序二进制接口 (ABI)。
必须通过 android.os.Build.CPU_ABI API 准确报告设备支持的本机应用程序二进制接口 (ABI)。
必须仅报告 Android NDK 最新版本的文件 docs/CPU-ARCH-ABIS.txt 中记录的那些 ABI。
必须仅报告 Android NDK 最新版本的文件 docs/CPU-ARCH-ABIS.txt 中记录的那些 ABI。
应使用上游 Android 开源项目中提供的源代码和头文件构建。
应使用上游 Android 开源项目中提供的源代码和头文件构建。
以下本机代码 API 必须可供包含本机代码的应用程序使用
libc(C 库)
libm(数学库)
对 C++ 的最低限度支持
JNI 接口
liblog(Android 日志记录)
libz(Zlib 压缩)
libdl(动态链接器)
libGLESv1_CM.so (OpenGL ES 1.0)
libGLESv2.so (OpenGL ES 2.0)
libEGL.so(本机 OpenGL 表面管理)
libjnigraphics.so
libOpenSLES.so (OpenSL ES 1.0.1 音频支持)
libOpenMAXAL.so (OpenMAX AL 1.0.1 支持)
libandroid.so(本机 Android Activity 支持)
对 OpenGL 的支持,如下所述
请注意,Android NDK 的未来版本可能会引入对其他 ABI 的支持。如果设备实现与现有的预定义 ABI 不兼容,则不得报告对任何 ABI 的支持。
ABI 的支持。如果设备实现与现有的预定义 ABI 不兼容,则不得报告对任何 ABI 的支持。
ABI 的支持。如果设备实现与现有的预定义 ABI 不兼容,则不得报告对任何 ABI 的支持。
本机代码兼容性具有挑战性。因此,应重申,强烈鼓励设备实现者使用上面列出的库的上游实现,以帮助确保兼容性。
因此,应重申,强烈鼓励设备实现者使用上面列出的库的上游实现,以帮助确保兼容性。
因此,应重申,强烈鼓励设备实现者使用上面列出的库的上游实现,以帮助确保兼容性。
3.4. Web 兼容性
3.4.1. WebView 兼容性
Android 开源实现使用 WebKit 渲染引擎来实现 android.webkit.WebView。由于为 Web 渲染系统开发全面的测试套件是不可行的,因此设备实现者必须在 WebView 实现中使用 WebKit 的特定上游构建版本。
由于为 Web 渲染系统开发全面的测试套件是不可行的,因此设备实现者必须在 WebView 实现中使用 WebKit 的特定上游构建版本。
由于为 Web 渲染系统开发全面的测试套件是不可行的,因此设备实现者必须在 WebView 实现中使用 WebKit 的特定上游构建版本。
由于为 Web 渲染系统开发全面的测试套件是不可行的,因此设备实现者必须在 WebView 实现中使用 WebKit 的特定上游构建版本。
设备实现的 android.webkit.WebView 实现必须基于 Android 4.1 的上游 Android 开源树中的 534.30 WebKit 构建版本。
Android 4.1 的上游 Android 开源树中的 534.30 WebKit 构建版本。
此构建版本包含 WebView 的一组特定功能和安全修复程序。设备实现者可以包含对 WebKit 实现的自定义;但是,任何此类自定义都不得更改 WebView 的行为,包括渲染行为。
WebKit 实现的自定义;但是,任何此类自定义都不得更改 WebView 的行为,包括渲染行为。
WebKit 实现的自定义;但是,任何此类自定义都不得更改 WebView 的行为,包括渲染行为。
WebKit 实现的自定义;但是,任何此类自定义都不得更改 WebView 的行为,包括渲染行为。
WebView 报告的用户代理字符串必须采用以下格式:
Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL)
Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1
Mobile Safari/534.30
$(VERSION) 字符串的值必须与 android.os.Build.VERSION.RELEASE 的值相同。
$(VERSION) 字符串的值必须与 android.os.Build.VERSION.RELEASE 的值相同。
android.os.Build.VERSION.RELEASE
$(LOCALE) 字符串的值应遵循 ISO 关于国家/地区代码和语言的约定,并且应指代设备当前配置的区域设置。
国家/地区代码和语言的约定,并且应指代设备当前配置的区域设置。
国家/地区代码和语言的约定,并且应指代设备当前配置的区域设置。
$(MODEL) 字符串的值必须与 android.os.Build.MODEL 的值相同。
android.os.Build.MODEL
$(BUILD) 字符串的值必须与 android.os.Build.DISPLAY 的值相同。
android.os.Build.ID
设备实现可以省略用户代理字符串中的 “Mobile”。
WebView 组件应尽可能多地支持 HTML5 [Resources, 11]。
[Resources, 11]。最低限度,设备实现必须支持 WebView 中与 HTML5 关联的以下每个 API:
这些与 HTML5 关联的 API 在 WebView 中:
应用程序缓存/脱机操作 [Resources, 12]
<video> 标签 [Resources, 13]
地理位置 [Resources, 14]
此外,设备实现必须支持 HTML5/W3C webstorage API [Resources, 15],并且应支持 HTML5/W3C IndexedDB API [Resources, 16]。请注意,由于 Web 开发标准机构正在过渡到倾向于 IndexedDB 而不是 webstorage,因此 IndexedDB 有望在未来版本的 Android 中成为必需组件。
[Resources, 15],并且应支持 HTML5/W3C IndexedDB API [Resources, 16]。请注意,由于 Web 开发标准机构正在过渡到倾向于 IndexedDB 而不是 webstorage,因此 IndexedDB 有望在未来版本的 Android 中成为必需组件。
[Resources, 16]。请注意,由于 Web 开发标准机构正在过渡到倾向于 IndexedDB 而不是 webstorage,因此 IndexedDB 有望在未来版本的 Android 中成为必需组件。
HTML5 API(如所有 JavaScript API)必须在 WebView 中默认禁用,除非开发人员通过常用的 Android API 显式启用它们。
除非开发人员通过常用的 Android API 显式启用它们。
3.4.2. 浏览器兼容性
设备实现必须包含一个独立的浏览器应用程序,用于常规用户 Web 浏览。独立浏览器可以基于 WebKit 以外的浏览器技术。
用户 Web 浏览。独立浏览器可以基于 WebKit 以外的浏览器技术。
用户 Web 浏览。独立浏览器可以基于 WebKit 以外的浏览器技术。
提供给第三方应用程序的 android.webkit.WebView 组件必须基于 WebKit,如第 3.4.1 节中所述。
提供给第三方应用程序的 android.webkit.WebView 组件必须基于 WebKit,如第 3.4.1 节中所述。
实现可以在独立的浏览器应用程序中附带自定义用户代理字符串。
实现可以在独立的浏览器应用程序中附带自定义用户代理字符串。
独立的浏览器应用程序(无论是基于上游 WebKit 浏览器应用程序还是第三方替代品)都应尽可能多地支持 HTML5 [Resources, 11]。
应用程序还是第三方替代品)都应尽可能多地支持 HTML5 [Resources, 11]。
应用程序还是第三方替代品)都应尽可能多地支持 HTML5 [Resources, 11]。
HTML5 [Resources, 11]。最低限度,设备实现必须支持与 HTML5 关联的以下每个 API:
应用程序缓存/脱机操作 [Resources, 12]
<video> 标签 [Resources, 13]
地理位置 [Resources, 14]
此外,设备实现必须支持 HTML5/W3C webstorage API [Resources, 15],并且应支持 HTML5/W3C IndexedDB API [Resources, 16]。请注意,由于 Web 开发标准机构正在过渡到倾向于 IndexedDB 而不是 webstorage,因此 IndexedDB 有望在未来版本的 Android 中成为必需组件。
[Resources, 15],并且应支持 HTML5/W3C IndexedDB API [Resources, 16]。请注意,由于 Web 开发标准机构正在过渡到倾向于 IndexedDB 而不是 webstorage,因此 IndexedDB 有望在未来版本的 Android 中成为必需组件。
16]。请注意,由于 Web 开发标准机构正在过渡到倾向于 IndexedDB 而不是 webstorage,因此 IndexedDB 有望在未来版本的 Android 中成为必需组件。
3.5. API 行为兼容性
每种 API 类型(托管、软、本机和 Web)的行为必须与上游 Android 开源项目的首选实现 [Resources, 3] 一致。
上游 Android 开源项目的首选实现 [Resources, 3] 一致。
项目 [Resources, 3] 的首选实现一致。一些特定的兼容性领域是:
设备不得更改标准 Intent 的行为或语义。
设备不得更改特定类型的系统组件(例如 Service、Activity、ContentProvider 等)的生命周期或生命周期语义。
设备不得更改特定类型的系统组件(例如 Service、Activity、ContentProvider 等)的生命周期或生命周期语义。
设备不得更改标准权限的语义。
以上列表并非详尽无遗。兼容性测试套件 (CTS) 测试了平台行为兼容性的重要部分,但并非全部。设备实现者有责任确保与 Android 开源项目的行为兼容性。
平台行为兼容性的重要部分,但并非全部。设备实现者有责任确保与 Android 开源项目的行为兼容性。
平台行为兼容性的重要部分,但并非全部。设备实现者有责任确保与 Android 开源项目的行为兼容性。
开源项目。因此,设备实现者应尽可能使用通过 Android 开源项目提供的源代码,而不是重新实现系统的重要部分。
开源项目。因此,设备实现者应尽可能使用通过 Android 开源项目提供的源代码,而不是重新实现系统的重要部分。
开源项目。因此,设备实现者应尽可能使用通过 Android 开源项目提供的源代码,而不是重新实现系统的重要部分。
3.6. API 命名空间
Android 遵循 Java 编程语言定义的包和类命名空间约定。为确保与第三方应用程序的兼容性,设备实现者不得对以下包命名空间进行任何禁止的修改(见下文):
Android 遵循 Java 编程语言定义的包和类命名空间约定。为确保与第三方应用程序的兼容性,设备实现者不得对以下包命名空间进行任何禁止的修改(见下文):
Android 遵循 Java 编程语言定义的包和类命名空间约定。为确保与第三方应用程序的兼容性,设备实现者不得对以下包命名空间进行任何禁止的修改(见下文):
Android 遵循 Java 编程语言定义的包和类命名空间约定。为确保与第三方应用程序的兼容性,设备实现者不得对以下包命名空间进行任何禁止的修改(见下文):
java.*
javax.*
sun.*
android.*
com.android.*
禁止的修改包括:
设备实现不得通过更改任何方法或类签名,或通过删除类或类字段来修改 Android 平台上公开的 API。
设备实现不得通过更改任何方法或类签名,或通过删除类或类字段来修改 Android 平台上公开的 API。
设备实现不得通过更改任何方法或类签名,或通过删除类或类字段来修改 Android 平台上公开的 API。
设备实现可以修改 API 的底层实现,但此类修改不得影响任何公开 API 的声明行为和 Java 语言签名。
设备实现可以修改 API 的底层实现,但此类修改不得影响任何公开 API 的声明行为和 Java 语言签名。
设备实现可以修改 API 的底层实现,但此类修改不得影响任何公开 API 的声明行为和 Java 语言签名。
设备实现不得向上述 API 添加任何公开的元素(例如类或接口,或现有类或接口的字段或方法)。
设备实现不得向上述 API 添加任何公开的元素(例如类或接口,或现有类或接口的字段或方法)。
设备实现不得向上述 API 添加任何公开的元素(例如类或接口,或现有类或接口的字段或方法)。
“公开的元素”是指任何未使用上游 Android 源代码中使用的 “@hide” 标记修饰的构造。换句话说,设备实现者不得在上述命名空间中公开新的 API 或更改现有 API。
标记修饰的构造。换句话说,设备实现者不得在上述命名空间中公开新的 API 或更改现有 API。
标记修饰的构造。换句话说,设备实现者不得在上述命名空间中公开新的 API 或更改现有 API。
标记修饰的构造。换句话说,设备实现者不得在上述命名空间中公开新的 API 或更改现有 API。
修改不得向开发人员宣传或以其他方式公开。
设备实现可以添加自定义 API,但任何此类 API 不得位于由另一个组织拥有或引用的命名空间中。例如,设备实现者不得将 API 添加到 com.google.* 或类似的命名空间;只有 Google 才能这样做。
位于由另一个组织拥有或引用的命名空间中。例如,设备实现者不得将 API 添加到 com.google.* 或类似的命名空间;只有 Google 才能这样做。
位于由另一个组织拥有或引用的命名空间中。例如,设备实现者不得将 API 添加到 com.google.* 或类似的命名空间;只有 Google 才能这样做。
命名空间。此外,如果设备实现包含标准 Android 命名空间之外的自定义 API,则这些 API 必须打包在 Android 共享库中,以便只有显式使用它们的应用程序(通过 <uses-library> 机制)才会受到此类 API 增加的内存使用量的影响。
命名空间。此外,如果设备实现包含标准 Android 命名空间之外的自定义 API,则这些 API 必须打包在 Android 共享库中,以便只有显式使用它们的应用程序(通过 <uses-library> 机制)才会受到此类 API 增加的内存使用量的影响。
命名空间。此外,如果设备实现包含标准 Android 命名空间之外的自定义 API,则这些 API 必须打包在 Android 共享库中,以便只有显式使用它们的应用程序(通过 <uses-library> 机制)才会受到此类 API 增加的内存使用量的影响。
命名空间。此外,如果设备实现包含标准 Android 命名空间之外的自定义 API,则这些 API 必须打包在 Android 共享库中,以便只有显式使用它们的应用程序(通过 <uses-library> 机制)才会受到此类 API 增加的内存使用量的影响。
命名空间。此外,如果设备实现包含标准 Android 命名空间之外的自定义 API,则这些 API 必须打包在 Android 共享库中,以便只有显式使用它们的应用程序(通过 <uses-library> 机制)才会受到此类 API 增加的内存使用量的影响。
如果设备实现者建议改进上述包命名空间之一(例如,通过向现有 API 添加有用的新功能,或添加新的 API),则实现者应访问 source.android.com 并开始根据该站点上的信息贡献更改和代码的过程。
如果设备实现者建议改进上述包命名空间之一(例如,通过向现有 API 添加有用的新功能,或添加新的 API),则实现者应访问 source.android.com 并开始根据该站点上的信息贡献更改和代码的过程。
如果设备实现者建议改进上述包命名空间之一(例如,通过向现有 API 添加有用的新功能,或添加新的 API),则实现者应访问 source.android.com 并开始根据该站点上的信息贡献更改和代码的过程。
如果设备实现者建议改进上述包命名空间之一(例如,通过向现有 API 添加有用的新功能,或添加新的 API),则实现者应访问 source.android.com 并开始根据该站点上的信息贡献更改和代码的过程。
请注意,上述限制与 Java 编程语言中命名 API 的标准约定相符;本节仅旨在通过包含在此兼容性定义中来加强这些约定并使其具有约束力。
请注意,上述限制与 Java 编程语言中命名 API 的标准约定相符;本节仅旨在通过包含在此兼容性定义中来加强这些约定并使其具有约束力。
请注意,上述限制与 Java 编程语言中命名 API 的标准约定相符;本节仅旨在通过包含在此兼容性定义中来加强这些约定并使其具有约束力。
3.7. 虚拟机兼容性
设备实现必须支持完整的 Dalvik Executable (DEX) 字节码规范和 Dalvik 虚拟机语义 [Resources, 17]。
设备实现必须支持完整的 Dalvik Executable (DEX) 字节码规范和 Dalvik 虚拟机语义 [Resources, 17]。
设备实现必须根据上游 Android 平台配置 Dalvik 以分配内存,并按照下表指定的方式进行分配。(有关屏幕尺寸和屏幕密度的定义,请参阅第 7.1.1 节。)
设备实现必须根据上游 Android 平台配置 Dalvik 以分配内存,并按照下表指定的方式进行分配。(有关屏幕尺寸和屏幕密度的定义,请参阅第 7.1.1 节。)
设备实现必须根据上游 Android 平台配置 Dalvik 以分配内存,并按照下表指定的方式进行分配。(有关屏幕尺寸和屏幕密度的定义,请参阅第 7.1.1 节。)
请注意,下面指定的内存值被认为是最小值,设备实现可以为每个应用程序分配更多内存。
请注意,下面指定的内存值被认为是最小值,设备实现可以为每个应用程序分配更多内存。
屏幕尺寸
屏幕密度
应用程序内存
小/普通/大
ldpi / mdpi
16MB
小/普通/大
tvdpi / hdpi
32MB
小/普通/大
xhdpi
64MB
xlarge
mdpi
32MB
xlarge
tvdpi / hdpi
64MB
xlarge
xhdpi
128MB
3.8. 用户界面兼容性
3.8.1. 小部件
Android 定义了一个组件类型以及相应的 API 和生命周期,允许应用程序向最终用户公开 “AppWidget” [Resources, 18]。
Android 定义了一个组件类型以及相应的 API 和生命周期,允许应用程序向最终用户公开 “AppWidget” [Resources, 18]。
Android 开源参考版本包含一个启动器应用程序,其中包含用户界面功能,允许用户从主屏幕添加、查看和删除 AppWidget。
Android 开源参考版本包含一个启动器应用程序,其中包含用户界面功能,允许用户从主屏幕添加、查看和删除 AppWidget。
Android 开源参考版本包含一个启动器应用程序,其中包含用户界面功能,允许用户从主屏幕添加、查看和删除 AppWidget。
设备实现可以替换参考启动器(即主屏幕)的替代方案。替代启动器应包含对 AppWidget 的内置支持,并公开用户界面功能以直接在启动器中添加、配置、查看和删除 AppWidget。
替代启动器(即主屏幕)的替代方案。替代启动器应包含对 AppWidget 的内置支持,并公开用户界面功能以直接在启动器中添加、配置、查看和删除 AppWidget。
替代启动器(即主屏幕)的替代方案。替代启动器应包含对 AppWidget 的内置支持,并公开用户界面功能以直接在启动器中添加、配置、查看和删除 AppWidget。
替代启动器可以省略这些用户界面元素;但是,如果省略了这些元素,则设备实现必须提供一个可从启动器访问的单独应用程序,该应用程序允许用户添加、配置、查看和删除 AppWidget。
替代启动器可以省略这些用户界面元素;但是,如果省略了这些元素,则设备实现必须提供一个可从启动器访问的单独应用程序,该应用程序允许用户添加、配置、查看和删除 AppWidget。
替代启动器可以省略这些用户界面元素;但是,如果省略了这些元素,则设备实现必须提供一个可从启动器访问的单独应用程序,该应用程序允许用户添加、配置、查看和删除 AppWidget。
替代启动器可以省略这些用户界面元素;但是,如果省略了这些元素,则设备实现必须提供一个可从启动器访问的单独应用程序,该应用程序允许用户添加、配置、查看和删除 AppWidget。
设备实现必须能够渲染标准网格尺寸为 4 x 4 的小部件。(有关详细信息,请参阅 Android SDK 文档 [Resources, 18] 中的 App Widget 设计指南。)
设备实现必须能够渲染标准网格尺寸为 4 x 4 的小部件。(有关详细信息,请参阅 Android SDK 文档 [Resources, 18] 中的 App Widget 设计指南。)
设备实现必须能够渲染标准网格尺寸为 4 x 4 的小部件。(有关详细信息,请参阅 Android SDK 文档 [Resources, 18] 中的 App Widget 设计指南。)
3.8.2. 通知
Android 包含 API,允许开发人员使用设备的硬件和软件功能通知用户重要事件 [Resources, 19]。
Android 包含 API,允许开发人员使用设备的硬件和软件功能通知用户重要事件 [Resources, 19]。
某些 API 允许应用程序使用硬件(特别是声音、振动和灯光)执行通知或引起注意。设备实现必须支持使用硬件功能的通知,如 SDK 文档中所述,并在设备实现硬件允许的范围内提供支持。
某些 API 允许应用程序使用硬件(特别是声音、振动和灯光)执行通知或引起注意。设备实现必须支持使用硬件功能的通知,如 SDK 文档中所述,并在设备实现硬件允许的范围内提供支持。
某些 API 允许应用程序使用硬件(特别是声音、振动和灯光)执行通知或引起注意。设备实现必须支持使用硬件功能的通知,如 SDK 文档中所述,并在设备实现硬件允许的范围内提供支持。
某些 API 允许应用程序使用硬件(特别是声音、振动和灯光)执行通知或引起注意。设备实现必须支持使用硬件功能的通知,如 SDK 文档中所述,并在设备实现硬件允许的范围内提供支持。
例如,如果设备实现包含振动器,则必须正确实现振动 API。如果设备实现缺少硬件,则相应的 API 必须实现为无操作。请注意,此行为在第 7 节中进一步详细说明。
例如,如果设备实现包含振动器,则必须正确实现振动 API。如果设备实现缺少硬件,则相应的 API 必须实现为无操作。请注意,此行为在第 7 节中进一步详细说明。
例如,如果设备实现包含振动器,则必须正确实现振动 API。如果设备实现缺少硬件,则相应的 API 必须实现为无操作。请注意,此行为在第 7 节中进一步详细说明。
例如,如果设备实现包含振动器,则必须正确实现振动 API。如果设备实现缺少硬件,则相应的 API 必须实现为无操作。请注意,此行为在第 7 节中进一步详细说明。
此外,实现必须正确渲染 API [Resources, 20] 或状态栏/系统栏图标样式指南 [Resources, 21] 中提供的所有资源(图标、声音文件等)。
此外,实现必须正确渲染 API [Resources, 20] 或状态栏/系统栏图标样式指南 [Resources, 21] 中提供的所有资源(图标、声音文件等)。
此外,实现必须正确渲染 API [Resources, 20] 或状态栏/系统栏图标样式指南 [Resources, 21] 中提供的所有资源(图标、声音文件等)。
设备实现可以为通知提供与参考 Android 开源实现提供的用户体验不同的用户体验;但是,此类替代通知系统必须支持现有的通知资源,如上所述。
设备实现可以为通知提供与参考 Android 开源实现提供的用户体验不同的用户体验;但是,此类替代通知系统必须支持现有的通知资源,如上所述。
设备实现可以为通知提供与参考 Android 开源实现提供的用户体验不同的用户体验;但是,此类替代通知系统必须支持现有的通知资源,如上所述。
Android 4.1 包括对丰富通知的支持,例如用于正在进行的通知的交互式视图。设备实现必须正确显示和执行 Android API 中记录的丰富通知。
Android 4.1 包括对丰富通知的支持,例如用于正在进行的通知的交互式视图。设备实现必须正确显示和执行 Android API 中记录的丰富通知。
Android 4.1 包括对丰富通知的支持,例如用于正在进行的通知的交互式视图。设备实现必须正确显示和执行 Android API 中记录的丰富通知。
3.8.3. 搜索
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
Android 包含 API [Resources, 22],允许开发人员将搜索功能集成到其应用程序中,并将应用程序的数据公开到全局系统搜索中。
设备实现必须包含一个单一的、共享的、系统范围的搜索用户界面,能够实时响应用户输入的建议。设备实现必须实现 API,这些 API 允许开发人员重用此用户界面以在其自己的应用程序中提供搜索功能。
设备实现必须包含一个单一的、共享的、系统范围的搜索用户界面,能够实时响应用户输入的建议。设备实现必须实现 API,这些 API 允许开发人员重用此用户界面以在其自己的应用程序中提供搜索功能。
设备实现必须包含一个单一的、共享的、系统范围的搜索用户界面,能够实时响应用户输入的建议。设备实现必须实现 API,这些 API 允许开发人员重用此用户界面以在其自己的应用程序中提供搜索功能。
设备实现必须包含一个单一的、共享的、系统范围的搜索用户界面,能够实时响应用户输入的建议。设备实现必须实现 API,这些 API 允许开发人员重用此用户界面以在其自己的应用程序中提供搜索功能。
设备实现必须实现 API,这些 API 允许第三方应用程序在全局搜索模式下运行时向搜索框添加建议。如果没有安装利用此功能的第三方应用程序,则默认行为应是显示 Web 搜索引擎结果和建议。
设备实现必须实现 API,这些 API 允许第三方应用程序在全局搜索模式下运行时向搜索框添加建议。如果没有安装利用此功能的第三方应用程序,则默认行为应是显示 Web 搜索引擎结果和建议。
设备实现必须实现 API,这些 API 允许第三方应用程序在全局搜索模式下运行时向搜索框添加建议。如果没有安装利用此功能的第三方应用程序,则默认行为应是显示 Web 搜索引擎结果和建议。
设备实现必须实现 API,这些 API 允许第三方应用程序在全局搜索模式下运行时向搜索框添加建议。如果没有安装利用此功能的第三方应用程序,则默认行为应是显示 Web 搜索引擎结果和建议。
3.8.4. Toast
应用程序可以使用 “Toast” API(在 [Resources, 23] 中定义)向最终用户显示简短的非模态字符串,这些字符串在短暂的时间后消失。设备实现必须以某种高度可见的方式向最终用户显示来自应用程序的 Toast。
应用程序可以使用 “Toast” API(在 [Resources, 23] 中定义)向最终用户显示简短的非模态字符串,这些字符串在短暂的时间后消失。设备实现必须以某种高度可见的方式向最终用户显示来自应用程序的 Toast。
应用程序可以使用 “Toast” API(在 [Resources, 23] 中定义)向最终用户显示简短的非模态字符串,这些字符串在短暂的时间后消失。设备实现必须以某种高度可见的方式向最终用户显示来自应用程序的 Toast。
应用程序可以使用 “Toast” API(在 [Resources, 23] 中定义)向最终用户显示简短的非模态字符串,这些字符串在短暂的时间后消失。设备实现必须以某种高度可见的方式向最终用户显示来自应用程序的 Toast。
3.8.5. 主题
Android 提供 “主题” 作为一种机制,供应用程序在整个 Activity 或应用程序中应用样式。Android 3.0 引入了新的 “Holo” 或 “holographic” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配 Android SDK [Resources, 24] 定义的 Holo 主题外观和风格,则可以使用这些样式。
Android 提供 “主题” 作为一种机制,供应用程序在整个 Activity 或应用程序中应用样式。Android 3.0 引入了新的 “Holo” 或 “holographic” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配 Android SDK [Resources, 24] 定义的 Holo 主题外观和风格,则可以使用这些样式。
Android 提供 “主题” 作为一种机制,供应用程序在整个 Activity 或应用程序中应用样式。Android 3.0 引入了新的 “Holo” 或 “holographic” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配 Android SDK [Resources, 24] 定义的 Holo 主题外观和风格,则可以使用这些样式。
Android 提供 “主题” 作为一种机制,供应用程序在整个 Activity 或应用程序中应用样式。Android 3.0 引入了新的 “Holo” 或 “holographic” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配 Android SDK [Resources, 24] 定义的 Holo 主题外观和风格,则可以使用这些样式。
设备实现不得更改向应用程序公开的任何 Holo 主题属性 [Resources, 25]。
设备实现不得更改向应用程序公开的任何 Holo 主题属性 [Resources, 25]。
Android 4.0 引入了新的 “Device Default” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配设备实现者定义的设备主题的外观和风格,则可以使用这些样式。
Android 4.0 引入了新的 “Device Default” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配设备实现者定义的设备主题的外观和风格,则可以使用这些样式。
Android 4.0 引入了新的 “Device Default” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配设备实现者定义的设备主题的外观和风格,则可以使用这些样式。
Android 4.0 引入了新的 “Device Default” 主题,作为一组为应用程序开发人员定义的样式,如果他们想要匹配设备实现者定义的设备主题的外观和风格,则可以使用这些样式。
3.8.6. 动态壁纸
Android 定义了一个组件类型以及相应的 API 和生命周期,允许应用程序向最终用户公开 “AppWidget” [Resources, 18]。
Android 包含 API,允许应用程序向最终用户公开一个或多个 “动态壁纸” [Resources, 26]。
动态壁纸是动画、图案或类似的图像,具有有限的输入功能,作为壁纸显示在其他应用程序的后面。
动态壁纸是动画、图案或类似的图像,具有有限的输入功能,作为壁纸显示在其他应用程序的后面。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
如果硬件可以运行所有动态壁纸,功能不受限制,帧速率合理且对其他应用程序没有不利影响,则认为该硬件能够可靠地运行动态壁纸。
OpenGL 上下文可能会与其他也使用 OpenGL 上下文的应用程序冲突。
OpenGL 上下文可能会与其他也使用 OpenGL 上下文的应用程序冲突。
如果设备实现能够如上所述可靠地运行动态壁纸,则应实现动态壁纸。如果确定设备实现不能如上所述可靠地运行动态壁纸,则不得实现动态壁纸。
如果设备实现能够如上所述可靠地运行动态壁纸,则应实现动态壁纸。如果确定设备实现不能如上所述可靠地运行动态壁纸,则不得实现动态壁纸。
如果设备实现能够如上所述可靠地运行动态壁纸,则应实现动态壁纸。如果确定设备实现不能如上所述可靠地运行动态壁纸,则不得实现动态壁纸。
3.8.7. 最近使用的应用程序显示
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
上游 Android 4.1 源代码包含一个用户界面,用于显示最近使用的应用程序,使用用户上次离开应用程序时应用程序图形状态的缩略图图像。
3.8.8. 输入管理设置
Android 4.1 包括对输入法引擎的支持。Android 4.1 API 允许自定义应用程序 IME 指定用户可调整的设置。设备实现必须包含一种方式,供用户在显示提供此类用户设置的 IME 时始终访问 IME 设置。
Android 4.1 包括对输入法引擎的支持。Android 4.1 API 允许自定义应用程序 IME 指定用户可调整的设置。设备实现必须包含一种方式,供用户在显示提供此类用户设置的 IME 时始终访问 IME 设置。
Android 4.1 包括对输入法引擎的支持。Android 4.1 API 允许自定义应用程序 IME 指定用户可调整的设置。设备实现必须包含一种方式,供用户在显示提供此类用户设置的 IME 时始终访问 IME 设置。
Android 4.1 包括对输入法引擎的支持。Android 4.1 API 允许自定义应用程序 IME 指定用户可调整的设置。设备实现必须包含一种方式,供用户在显示提供此类用户设置的 IME 时始终访问 IME 设置。
3.8.9. 锁屏远程控制
Android 4.0 引入了对远程控制 API 的支持,该 API 允许媒体应用程序与显示在远程视图(如设备锁屏)中的播放控件集成 [Resources, 69]。设备实现应包含对在设备锁屏中嵌入远程控件的支持。
Android 4.0 引入了对远程控制 API 的支持,该 API 允许媒体应用程序与显示在远程视图(如设备锁屏)中的播放控件集成 [Resources, 69]。设备实现应包含对在设备锁屏中嵌入远程控件的支持。
Android 4.0 引入了对远程控制 API 的支持,该 API 允许媒体应用程序与显示在远程视图(如设备锁屏)中的播放控件集成 [Resources, 69]。设备实现应包含对在设备锁屏中嵌入远程控件的支持。
Android 4.0 引入了对远程控制 API 的支持,该 API 允许媒体应用程序与显示在远程视图(如设备锁屏)中的播放控件集成 [Resources, 69]。设备实现应包含对在设备锁屏中嵌入远程控件的支持。
Android 4.0 引入了对远程控制 API 的支持,该 API 允许媒体应用程序与显示在远程视图(如设备锁屏)中的播放控件集成 [Resources, 69]。设备实现应包含对在设备锁屏中嵌入远程控件的支持。
3.9 设备管理
Android 4.1 包括一些功能,允许具有安全意识的应用程序在系统级别执行设备管理功能,例如执行密码策略或通过 Android 设备管理 API [Resources, 27] 执行远程擦除。
Android 4.1 包括一些功能,允许具有安全意识的应用程序在系统级别执行设备管理功能,例如执行密码策略或通过 Android 设备管理 API [Resources, 27] 执行远程擦除。
Android 4.1 包括一些功能,允许具有安全意识的应用程序在系统级别执行设备管理功能,例如执行密码策略或通过 Android 设备管理 API [Resources, 27] 执行远程擦除。
设备实现必须提供 DevicePolicyManager 类 [Resources, 28] 的实现,并且应支持 Android SDK 文档 [Resources, 27] 中定义的全部设备管理策略范围。
设备实现必须提供 DevicePolicyManager 类 [Resources, 28] 的实现,并且应支持 Android SDK 文档 [Resources, 27] 中定义的全部设备管理策略范围。
27].
设备实现必须提供 DevicePolicyManager 类 [Resources, 28] 的实现,并且应支持 Android SDK 文档 [Resources, 27] 中定义的全部设备管理策略范围。
注意: 虽然上面概述的某些要求在 Android 4.1 中被表述为 “应”,但计划在未来版本的兼容性定义中将这些要求更改为 “必须”。也就是说,这些要求在 Android 4.1 中是可选的,但在未来版本中将成为必需。强烈建议现有和运行 Android 4.1 的新设备在 Android 4.1 中满足这些要求,否则它们将无法在升级到未来版本时获得 Android 兼容性。
注意: 虽然上面概述的某些要求在 Android 4.1 中被表述为 “应”,但计划在未来版本的兼容性定义中将这些要求更改为 “必须”。也就是说,这些要求在 Android 4.1 中是可选的,但在未来版本中将成为必需。强烈建议现有和运行 Android 4.1 的新设备在 Android 4.1 中满足这些要求,否则它们将无法在升级到未来版本时获得 Android 兼容性。
注意: 虽然上面概述的某些要求在 Android 4.1 中被表述为 “应”,但计划在未来版本的兼容性定义中将这些要求更改为 “必须”。也就是说,这些要求在 Android 4.1 中是可选的,但在未来版本中将成为必需。强烈建议现有和运行 Android 4.1 的新设备在 Android 4.1 中满足这些要求,否则它们将无法在升级到未来版本时获得 Android 兼容性。
3.10 无障碍功能
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
Android 4.1 提供了一个辅助功能层,帮助残疾用户更轻松地导航其设备。此外,Android 4.1 还提供了平台 API,使辅助功能服务实现能够接收用户和系统事件的回调,并生成替代反馈机制,例如文本到语音、触觉反馈和轨迹球/D-pad 导航 [Resources, 29]。
设备实现必须通过 android.accessibilityservice API [Resources, 30] 支持第三方辅助功能服务实现。设备实现必须生成 AccessibilityEvents,并以与默认 Android 实现一致的方式将这些事件传递给所有注册的 AccessibilityService 实现。
设备实现必须通过 android.accessibilityservice API [Resources, 30] 支持第三方辅助功能服务实现。设备实现必须生成 AccessibilityEvents,并以与默认 Android 实现一致的方式将这些事件传递给所有注册的 AccessibilityService 实现。
设备实现必须通过 android.accessibilityservice API [Resources, 30] 支持第三方辅助功能服务实现。设备实现必须生成 AccessibilityEvents,并以与默认 Android 实现一致的方式将这些事件传递给所有注册的 AccessibilityService 实现。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
设备实现必须提供用户可访问的机制来启用和禁用辅助功能服务,并且必须响应 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS intent 显示此界面。
3.11 文本转语音
Android 4.1 包含 API,允许应用程序使用文本转语音 (TTS) 服务,并允许服务提供商提供 TTS 服务的实现 [Resources, 32]。设备实现必须满足与文本转语音相关的以下要求:
Android 4.1 包含 API,允许应用程序使用文本转语音 (TTS) 服务,并允许服务提供商提供 TTS 服务的实现 [Resources, 32]。设备实现必须满足与文本转语音相关的以下要求:
Android 4.1 包含 API,允许应用程序使用文本转语音 (TTS) 服务,并允许服务提供商提供 TTS 服务的实现 [Resources, 32]。设备实现必须满足与文本转语音相关的以下要求:
t他 Android TTS 框架
设备 实现 必须 支持 Android TTS 框架 API,并且
应该 包含 一个 TTS 引擎,支持 设备上 可用的 语言。
请注意,上游 Android 开源 软件 包含 一个 全功能的 -
特色 TTS 引擎 实现。
设备 实现 必须 支持 安装 第三方 TTS 引擎。
设备 实现 必须 提供 一个 用户可访问的 界面,允许
用户 选择 一个 TTS 引擎 以在 系统级别 使用。
4. 应用程序 包 兼容性
设备 实现 必须 安装 并 运行 由 以下工具生成的 Android “.apk” 文件
官方 Android SDK 中包含的 “aapt” 工具 [资源, 33]。
设备 实现 不得 扩展 任何一种 .apk [资源, 34], Android
清单 [资源, 35], Dalvik 字节码 [资源, 17], 或 renderscript 字节码
格式,以 防止 这些 文件 无法在其他 兼容 设备上 正确 安装 和 运行。
在其他 兼容 设备上。设备 实现者 应该 使用 参考
上游 Dalvik 实现,以及 参考 实现的 包
管理 系统。
5. 多媒体兼容性
设备 实现 必须 包括 至少 一种 形式的 音频 输出,例如
扬声器、耳机插孔、外部扬声器连接等。
5.1. 媒体编解码器
设备 实现 必须 支持 Android SDK 文档中 指定的 核心 媒体 格式 [资源, 58],除非 本
Android SDK 文档中 指定的 核心 媒体 格式 [资源, 58],除非 本
文档中 明确允许的情况。具体而言,设备 实现 必须 支持 媒体 格式,
编码器、解码器、文件类型和容器格式,如下表定义。所有
这些 编解码器 都作为软件 实现在首选的 Android
来自 Android 开源项目的 实现。
请注意,无论是 Google 还是 开放手机联盟,都未作出任何
关于这些 编解码器 未受第三方专利限制的 声明。
那些计划在硬件或软件产品中使用此源代码的人
应注意,此代码的实现,包括在开源软件中
或共享软件中,可能需要获得相关专利持有者的专利许可。
请注意,这些表未列出大多数视频编解码器的特定比特率要求
因为当前的设备硬件不一定支持映射到
相关标准指定的所需比特率的比特率。相反,设备
实现 应该 支持硬件上可行的最高比特率,最高可达
规范定义的限制。
文件类型/
格式/
类型
编码器
解码器
详细信息
容器
编解码器
格式
支持
必需
单声道/立体声/5.0/5.1*
MPEG-4
对于包含
麦克风硬件的设备实现是必需的
AAC 配置文件
包含麦克风硬件
必需
标准采样
(AAC LC)
并定义
3GPP
速率从 8 到 48
android.hardware.microphone。
(.3gp)
kHz。
MPEG-4
支持
(.mp4,
MPEG-4
单声道/立体声/5.0/5.1*
.m4a)
HE AAC
麦克风硬件的设备实现是必需的
ADTS 原始
必需
配置文件
标准采样
AAC (.aac,
(AAC+)
速率从 16 到 48
在 Android
kHz。
中解码
3.1+,
支持
MPEG-4
对于包含
麦克风硬件的设备实现是必需的
单声道/立体声/5.0/5.1*
HE AAC v2
包含麦克风硬件的设备实现是必需的
中解码
麦克风硬件的设备实现是必需的
配置文件
麦克风硬件,并
4.0+,ADIF
标准采样
(增强型
定义
不支持)
速率从 16 到 48
AAC+)
android.hardware.microphone
不支持)
kHz。
MPEG-TS
MPEG-4
(.ts,不可
音频
对于包含
支持
查找,
对象类型
包含麦克风硬件的设备实现是必需的
单声道/立体声内容
中解码
ER AAC
麦克风硬件,并
必需
具有标准
3.0+)
ELD
定义
采样率从
(增强型
android.hardware.microphone
16 到 48 kHz。
低延迟
AAC)
必需
对于包含
4.75 到 12.2 kbps
AMR-NB
包含麦克风硬件
必需
3GPP (.3gp)
采样率 @ 8kHz
并定义
android.hardware.microphone。
必需
对于包含
9 种速率,从 6.60
AMR-WB
包含麦克风硬件
必需
kbit/s 到 23.85 kbit/s
3GPP (.3gp)
并定义
采样率 @ 16kHz
android.hardware.microphone。
单声道/立体声(无
多声道)。
音频
采样率高达
48 kHz(但高达
44.1 kHz 是
在具有 44.1
kHz 输出的设备上推荐,因为 48
必需
FLAC
kHz 到 44.1 kHz
FLAC (.flac) 仅
(Android 3.1+)
到 44.1 kHz
降采样器不
包括低通
滤波器)。16 位
推荐;不
对 24 位应用抖动。
位。
单声道/立体声 8-
320Kbps 恒定
MP3
必需
MP3 (.mp3)
比特率(CBR)或可变
比特率(VBR)
类型 0 和
MIDI 类型 0 和 1。
1 (.mid,
DLS 版本 1 和
.xmf, .mxmf)
2。XMF 和移动
RTTTL/RTX
MIDI
必需
XMF。支持
(.rtttl, .rtx)
铃声格式
OTA (.ota)
RTTTL/RTX、OTA、
iMelody
和 iMelody
(.imy)
Ogg (.ogg)
Vorbis
必需
Matroska
(.mkv)
8 位和 16 位
线性 PCM**(速率
高达硬件限制)。设备
硬件)。设备
必须支持
PCM/WAVE
必需
必需
WAVE (.wav)
原始 PCM 录音的
采样率
在 8000、16000 和
44100 Hz
频率
JPEG
必需
必需
基本+渐进
JPEG (.jpg)
GIF
必需
GIF (.gif)
图像
PNG
必需
必需
PNG (.png)
BMP
必需
BMP (.bmp)
WEBP
必需
必需
WebP (.webp)
必需
对于包含
3GPP
包含摄像头硬件并
(.3gp)
H.263
必需
定义 android.hardware.camera
MPEG-4
或
(.mp4)
android.hardware.camera.front。
3GPP
(.3gp)
必需
MPEG-4
(.mp4)
对于包含
MPEG-TS
包含摄像头硬件并
基线配置文件
视频
H.264 AVC
必需
(.ts,AAC
定义 android.hardware.camera
(BP)
音频,
或
不支持)
android.hardware.camera.front。
查找,
中解码
3.0+)
MPEG-4
必需
3GPP (.3gp)
SP
WebM (.webm)
必需
和 Matroska
VP8
(Android
(.mkv,Android
2.3.3+)
4.0+)
*注意:仅需要对 5.0/5.1 内容进行下混;记录或渲染超过 2
个声道是可选的。**注意:16 位线性 PCM 捕获是强制性的。8 位线性 PCM
捕获不是强制性的。
5.2 视频编码
包含后置摄像头并声明 android.hardware.camera 的 Android 设备实现 应该 支持 以下视频编码配置文件。
android.hardware.camera 的 Android 设备实现 应该 支持 以下视频编码配置文件。
高清(当硬件支持时)
标清(低质量)标清(高质量)
硬件)
H.264 基线
H.264 基线
视频编解码器
H.264 基线配置文件
配置文件
配置文件
视频
176 x 144 像素
480 x 360 像素
1280 x 720 像素
分辨率
视频帧 12 fps
30 fps
30 fps
率
500 Kbps 或
视频比特率 56 Kbps
2 Mbps 或更高
更高
音频编解码器 AAC-LC
AAC-LC
AAC-LC
音频
1(单声道)
2(立体声)
2(立体声)
声道
音频比特率 24 Kbps
128 Kbps
192 Kbps
5.3. 音频录制
当应用程序使用 android.media.AudioRecord API 开始录制
音频流时,包含麦克风硬件并
声明 android.hardware.microphone 的设备实现 必须 使用以下
行为对音频进行采样和录制
设备 应该 表现出近似平坦的幅度与频率特性;
特性;具体而言,从 100 Hz 到 4000 Hz,±3 dB
音频输入灵敏度 应该 设置为使得 1000 Hz 的 90 dB 声功率级
(SPL)源在 16 位采样时产生 2500 的 RMS。
PCM 幅度水平 应该 在线性跟踪输入 SPL 变化,至少在
从 -18 dB 到 +12 dB 重新调整到麦克风处 90 dB SPL 的 30 dB 范围内。
对于 1Khz、90 dB SPL 输入电平,总谐波失真 应该 小于 1%。
电平。
除了上述录音规范外,当应用程序开始
使用以下项录制音频流时
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION 音频源
噪声抑制处理(如果存在)必须禁用。
自动增益控制(如果存在)必须禁用。
设备实现必须提供 DevicePolicyManager 类 [Resources, 28] 的实现,并且应支持 Android SDK 文档 [Resources, 27] 中定义的全部设备管理策略范围。
Android 4.1,未来版本的兼容性定义计划将这些
更改为“必须”。也就是说,这些要求在 Android 4.1 中是可选的,但将在未来的版本中变为必需。运行 Android 4.1 的现有和新设备强烈建议在 Android 4.1 中满足这些要求,否则它们将无法
注意: 虽然上面概述的某些要求在 Android 4.1 中被表述为 “应”,但计划在未来版本的兼容性定义中将这些要求更改为 “必须”。也就是说,这些要求在 Android 4.1 中是可选的,但在未来版本中将成为必需。强烈建议现有和运行 Android 4.1 的新设备在 Android 4.1 中满足这些要求,否则它们将无法在升级到未来版本时获得 Android 兼容性。
5.4. 音频延迟
音频延迟大致定义为应用程序请求
音频播放或录制操作与设备实现实际
开始操作之间的时间间隔。许多类别的应用程序依赖于短延迟,以实现
实时效果,例如音效或 VOIP 通信。包含麦克风硬件并声明 android.hardware.microphone
实时效果,例如音效或 VOIP 通信。包含麦克风硬件并声明 android.hardware.microphone
的设备实现 应该 满足本节概述的所有音频延迟要求。有关设备实现可以省略麦克风硬件的条件,请参见第 7 节。
设备实现可以省略麦克风硬件的条件,请参见第 7 节。
设备实现可以省略麦克风硬件的条件,请参见第 7 节。
对于本节的目的
“冷输出延迟”定义为应用程序请求音频播放与音频系统
在请求之前一直处于空闲和断电状态时,声音开始播放之间的时间间隔。
在请求之前一直处于空闲和断电状态时,声音开始播放之间的时间间隔。
“热输出延迟”定义为应用程序最近使用过但当前处于空闲状态(即静音)之间的时间间隔。
在请求之前一直处于空闲和断电状态时,声音开始播放之间的时间间隔。
最近使用过但当前处于空闲状态(即静音)之间的时间间隔。
“连续输出延迟”定义为应用程序发出要播放的样本与扬声器物理播放
要播放的样本与扬声器物理播放
相应声音之间的时间间隔,同时设备当前正在播放音频。
“冷输入延迟”定义为应用程序请求音频录制与第一个样本通过其回调传递给
应用程序请求音频录制与第一个样本通过其回调传递给
应用程序之间的时间间隔,当音频系统和麦克风在请求之前一直处于空闲和断电状态时。
应用程序之间的时间间隔,当音频系统和麦克风在请求之前一直处于空闲和断电状态时。
“连续输入延迟”定义为当环境声音发生以及与该声音对应的样本通过其回调传递给
与该声音对应的样本通过其回调传递给
录音应用程序之间的时间间隔,同时设备处于录音模式。
使用上述定义,设备实现 应该 表现出以下各项
属性
冷输出延迟为 100 毫秒或更少
热输出延迟为 10 毫秒或更少
连续输出延迟为 45 毫秒或更少
冷输入延迟为 100 毫秒或更少
连续输入延迟为 50 毫秒或更少
注意:虽然上述要求在 Android 4.1 中声明为“应该”,
但未来版本的兼容性定义计划将这些更改为“必须”。
也就是说,这些要求在 Android 4.1 中是可选的,但将在未来版本中变为必需。
运行 Android 4.1 的现有和新设备强烈建议在 Android 4.1 中满足这些要求,否则它们将无法在升级到未来版本时获得 Android 兼容性认证。
在升级到未来版本时获得 Android 兼容性认证。
如果设备实现满足本节的要求,则可以报告支持低延迟音频,通过 android.content.pm.PackageManager 类报告 “android.hardware.audio.low-latency” 功能。[资源, 37]
相反,如果设备实现不满足这些要求,则绝不能报告支持低延迟音频。
类报告 “android.hardware.audio.low-latency” 功能。[资源, 37]
相反,如果设备实现不满足这些要求,则绝不能报告支持低延迟音频。
latency” 功能。[资源, 37]
相反,如果设备实现不满足这些要求,则绝不能报告支持低延迟音频。
NOT 报告 支持 低延迟 音频。
5.5. 网络协议
设备 必须 支持 Android SDK 文档 [资源, 58]中指定的 音频和视频播放的媒体网络协议。具体而言,设备
Android SDK 文档 [资源, 58]中指定的 音频和视频播放的媒体网络协议。具体而言,设备
必须 支持 以下媒体网络协议:
RTSP (RTP, SDP)
HTTP(S) 渐进式流媒体
HTTP(S) 实时流媒体草案协议,版本 3 [资源, 59]
6. 开发者工具兼容性
设备 实现 必须 支持 Android SDK 中提供的 Android 开发者工具。
具体而言,Android 兼容设备 必须 与
Android 调试桥 (adb) [资源, 33] 兼容。
设备 实现 必须 支持 Android SDK 中记录的 所有 adb 功能。
设备端的 adb 守护程序 必须 默认处于非活动状态,并且
必须 有一个用户可访问的机制来打开 Android 调试桥。
必须 有一个用户可访问的机制来打开 Android 调试桥。
Dalvik 调试监视器服务 (ddms) [资源, 33]
设备 实现 必须 支持 Android SDK 中记录的 所有 ddms 功能。由于 ddms 使用 adb,因此对 ddms 的支持 应该
Android SDK 中记录的 所有 ddms 功能。由于 ddms 使用 adb,因此对 ddms 的支持 应该
默认情况下处于非活动状态,但只要用户已激活 Android 调试桥(如上所述),就必须支持 ddms。
调试桥(如上所述),就必须支持 ddms。
Monkey [资源, 36]
设备 实现 必须 包含 Monkey 框架,并使其
可供应用程序使用。
大多数基于 Linux 的系统和 Apple Macintosh 系统都无需额外支持即可识别 Android 设备,
大多数基于 Linux 的系统和 Apple Macintosh 系统都无需额外支持即可识别 Android 设备,
例如,新的供应商 ID 和有时新的设备 ID 需要用于 Windows 系统的自定义 USB 驱动程序。)
例如,新的供应商 ID 和有时新的设备 ID 需要用于 Windows 系统的自定义 USB 驱动程序。)
如果 adb 工具(在标准 Android SDK 中提供)无法识别设备实现,则设备实现者 必须 提供 Windows 驱动程序,
如果 adb 工具(在标准 Android SDK 中提供)无法识别设备实现,则设备实现者 必须 提供 Windows 驱动程序,
允许开发者使用 adb 协议连接到设备。必须为 Windows XP、Windows Vista 和 Windows 7 的 32 位和 64 位版本提供这些驱动程序。
允许开发者使用 adb 协议连接到设备。必须为 Windows XP、Windows Vista 和 Windows 7 的 32 位和 64 位版本提供这些驱动程序。
32 位和 64 位版本。
7. 硬件兼容性
如果设备包含具有相应的第三方开发者 API 的特定硬件组件,则设备实现 必须
如 Android SDK 文档中所述实现该 API。如果 SDK 中的 API 与声明为可选的硬件组件交互,并且设备实现
如 Android SDK 文档中所述实现该 API。如果 SDK 中的 API 与声明为可选的硬件组件交互,并且设备实现
不具备该组件
不具备该组件
组件 API 的完整类定义(如 SDK 文档所述)必须仍然存在
组件 API 的完整类定义(如 SDK 文档所述)必须仍然存在
API 的行为 必须 以某种合理的方式实现为空操作
方式实现为空操作
API 方法 必须 在 SDK 允许的情况下返回空值
文档
API 方法 必须 在 SDK 不允许空值的情况下返回类的空操作实现
API 方法 必须 在 SDK 不允许空值的情况下返回类的空操作实现
API 方法 不得 抛出 SDK 未记录的异常
文档
这些要求适用的典型场景示例是电话 API,即使在非电话设备上,这些 API 也必须实现为合理的空操作。
这些要求适用的典型场景示例是电话 API,即使在非电话设备上,这些 API 也必须实现为合理的空操作。
设备 实现 必须 通过 android.content.pm.PackageManager 类上的 getSystemAvailableFeatures() 和 hasSystemFeature(String) 方法准确报告准确的硬件配置信息。[资源, 37]
设备 实现 必须 通过 android.content.pm.PackageManager 类上的 getSystemAvailableFeatures() 和 hasSystemFeature(String) 方法准确报告准确的硬件配置信息。[资源, 37]
方法准确报告准确的硬件配置信息。[资源, 37]
7.1. 显示和图形
Android 4.1 包含自动调整应用程序资源和 UI 布局以适应设备的工具,以确保第三方应用程序在各种硬件配置上良好运行 [资源, 38]。
Android 4.1 包含自动调整应用程序资源和 UI 布局以适应设备的工具,以确保第三方应用程序在各种硬件配置上良好运行 [资源, 38]。
设备 必须 正确实现这些 API 和行为,如本节详细所述。
设备 必须 正确实现这些 API 和行为,如本节详细所述。
本节要求引用的单位定义如下:
“物理对角线尺寸”是显示器发光部分两个相对角之间的距离(以英寸为单位)。
“物理对角线尺寸”是显示器发光部分两个相对角之间的距离(以英寸为单位)。
“dpi”(表示“每英寸点数”)是 1 英寸线性水平或垂直跨度所包含的像素数。在列出 dpi 值时,水平和垂直 dpi 都必须在范围内。
“dpi”(表示“每英寸点数”)是 1 英寸线性水平或垂直跨度所包含的像素数。在列出 dpi 值时,水平和垂直 dpi 都必须在范围内。
垂直 dpi 都必须在范围内。
“宽高比”是屏幕较长尺寸与较短尺寸的比率。例如,480x854 像素的显示器的宽高比为 854 / 480 = 1.779,或大致为“16:9”。
“宽高比”是屏幕较长尺寸与较短尺寸的比率。例如,480x854 像素的显示器的宽高比为 854 / 480 = 1.779,或大致为“16:9”。
1.779,或大致为“16:9”。
“密度无关像素”或 “dp” 是标准化为 160 dpi 屏幕的虚拟像素单位,计算公式为:像素 = dps *(密度 / 160)。
“密度无关像素”或 “dp” 是标准化为 160 dpi 屏幕的虚拟像素单位,计算公式为:像素 = dps *(密度 / 160)。
7.1.1. 屏幕配置
屏幕尺寸
Android UI 框架支持各种不同的屏幕尺寸,并允许应用程序通过 android.content.res.Configuration.screenLayout 和 SCREENLAYOUT_SIZE_MASK 查询设备屏幕尺寸(也称为“屏幕布局”)。
Android UI 框架支持各种不同的屏幕尺寸,并允许应用程序通过 android.content.res.Configuration.screenLayout 和 SCREENLAYOUT_SIZE_MASK 查询设备屏幕尺寸(也称为“屏幕布局”)。
android.content.res.Configuration.screenLayout 和
SCREENLAYOUT_SIZE_MASK。设备 实现 必须 报告正确的屏幕尺寸,如 Android SDK 文档 [资源, 38]中所定义,并由上游 Android 平台确定。
SCREENLAYOUT_SIZE_MASK。设备 实现 必须 报告正确的屏幕尺寸,如 Android SDK 文档 [资源, 38]中所定义,并由上游 Android 平台确定。
上游 Android 平台确定。具体而言,设备实现 必须 根据以下逻辑密度无关像素 (dp) 屏幕尺寸报告正确的屏幕尺寸。
上游 Android 平台确定。具体而言,设备实现 必须 根据以下逻辑密度无关像素 (dp) 屏幕尺寸报告正确的屏幕尺寸。
屏幕尺寸。
设备 必须 具有至少 426 dp x 320 dp ('small') 的屏幕尺寸
报告屏幕尺寸为“正常”的设备 必须 具有至少 480 dp x 320 dp 的屏幕尺寸
报告屏幕尺寸为“正常”的设备 必须 具有至少 480 dp x 320 dp 的屏幕尺寸
报告屏幕尺寸为“大”的设备 必须 具有至少 640 dp x 480 dp 的屏幕尺寸
报告屏幕尺寸为“大”的设备 必须 具有至少 640 dp x 480 dp 的屏幕尺寸
报告屏幕尺寸为“超大”的设备 必须 具有至少 960 dp x 720 dp 的屏幕尺寸
报告屏幕尺寸为“超大”的设备 必须 具有至少 960 dp x 720 dp 的屏幕尺寸
此外,设备 必须 具有至少 2.5 英寸物理对角线尺寸的屏幕尺寸。
此外,设备 必须 具有至少 2.5 英寸物理对角线尺寸的屏幕尺寸。
设备 不得 在任何时候更改其报告的屏幕尺寸。
应用程序可以选择通过 AndroidManifest.xml 文件中的 <supports-screens> 属性指示它们支持哪些屏幕尺寸。设备实现 必须 正确地遵循应用程序声明的对小型、正常、大型和超大型屏幕的支持,如 Android SDK 文档中所述。
应用程序可以选择通过 AndroidManifest.xml 文件中的 <supports-screens> 属性指示它们支持哪些屏幕尺寸。设备实现 必须 正确地遵循应用程序声明的对小型、正常、大型和超大型屏幕的支持,如 Android SDK 文档中所述。
正确地遵循应用程序声明的对小型、正常、大型和超大型屏幕的支持,如 Android SDK 文档中所述。
屏幕,如 Android SDK 文档中所述。
屏幕宽高比
宽高比 必须 介于 1.3333 (4:3) 和 1.85 (16:9)之间。
屏幕密度
Android UI 框架定义了一组标准逻辑密度,以帮助应用程序开发者定位应用程序资源。
Android UI 框架定义了一组标准逻辑密度,以帮助应用程序开发者定位应用程序资源。
设备 实现 必须 通过 android.util.DisplayMetrics API 报告以下逻辑 Android 框架密度之一,并且 必须 以这种标准密度执行应用程序。
设备 实现 必须 通过 android.util.DisplayMetrics API 报告以下逻辑 Android 框架密度之一,并且 必须 以这种标准密度执行应用程序。
密度执行应用程序。
120 dpi,称为 'ldpi'
160 dpi,称为 'mdpi'
213 dpi,称为 'tvdpi'
240 dpi,称为 'hdpi'
320 dpi,称为 'xhdpi'
480 dpi,称为 'xxhdpi'
设备 实现 应该 定义在数值上最接近屏幕物理密度的标准 Android 框架密度,除非该逻辑密度将报告的屏幕尺寸推到支持的最小值以下。
设备 实现 应该 定义在数值上最接近屏幕物理密度的标准 Android 框架密度,除非该逻辑密度将报告的屏幕尺寸推到支持的最小值以下。
在数值上最接近屏幕物理密度的标准 Android 框架密度,除非该逻辑密度将报告的屏幕尺寸推到支持的最小值以下。
将报告的屏幕尺寸推到支持的最小值以下。如果数值上最接近物理密度的标准 Android 框架密度导致屏幕尺寸小于最小支持的兼容屏幕尺寸(320 dp 宽度),
将报告的屏幕尺寸推到支持的最小值以下。如果数值上最接近物理密度的标准 Android 框架密度导致屏幕尺寸小于最小支持的兼容屏幕尺寸(320 dp 宽度),
尺寸(320 dp 宽度),
设备 实现 应该 报告下一个最低的标准 Android 框架密度
密度执行应用程序。
7.1.2. 显示指标
设备 实现 必须 报告 android.util.DisplayMetrics [资源, 39]中定义的所有显示指标的正确值。
设备 实现 必须 报告 android.util.DisplayMetrics [资源, 39]中定义的所有显示指标的正确值。
7.1.3. 屏幕方向
设备 必须 支持应用程序动态定向到纵向或横向屏幕方向。
设备 必须 支持应用程序动态定向到纵向或横向屏幕方向。
也就是说,设备必须尊重应用程序对特定屏幕方向的请求。设备 可以 选择纵向或横向方向作为默认方向。
也就是说,设备必须尊重应用程序对特定屏幕方向的请求。设备 可以 选择纵向或横向方向作为默认方向。
设备 必须 在通过 android.content.res.Configuration.orientation、android.view.Display.getOrientation() 或其他 API 查询时,报告设备当前方向的正确值。
设备 必须 在通过 android.content.res.Configuration.orientation、android.view.Display.getOrientation() 或其他 API 查询时,报告设备当前方向的正确值。
android.view.Display.getOrientation(),或其他 API。
设备 不得 在更改方向时更改报告的屏幕尺寸或密度。
设备 不得 在更改方向时更改报告的屏幕尺寸或密度。
设备 必须 报告它们支持的屏幕方向(android.hardware.screen.portrait 和/或 android.hardware.screen.landscape),并且 必须 报告至少一个支持的方向。
设备 必须 报告它们支持的屏幕方向(android.hardware.screen.portrait 和/或 android.hardware.screen.landscape),并且 必须 报告至少一个支持的方向。
android.hardware.screen.portrait 和/或 android.hardware.screen.landscape),并且 必须 报告至少一个支持的方向。例如,具有固定横向屏幕方向的设备(例如电视或笔记本电脑) 必须 仅报告 android.hardware.screen.landscape。
android.hardware.screen.portrait 和/或 android.hardware.screen.landscape),并且 必须 报告至少一个支持的方向。例如,具有固定横向屏幕方向的设备(例如电视或笔记本电脑) 必须 仅报告 android.hardware.screen.landscape。
android.hardware.screen.landscape。
7.1.4. 2D 和 3D 图形加速
设备 实现 必须 支持 OpenGL ES 1.0 和 2.0,如 Android SDK 文档中所体现和详述的那样。设备实现 还必须 支持 Android Renderscript,如 Android SDK 文档 [资源, 8]中所详述的那样。
设备 实现 必须 支持 OpenGL ES 1.0 和 2.0,如 Android SDK 文档中所体现和详述的那样。设备实现 还必须 支持 Android Renderscript,如 Android SDK 文档 [资源, 8]中所详述的那样。
支持 Android Renderscript,如 Android SDK 文档 [资源, 8]中所详述的那样。
[资源, 8]。
设备 实现 还必须 正确标识自身为支持 OpenGL ES 1.0 和 2.0。也就是说:
设备 实现 还必须 正确标识自身为支持 OpenGL ES 1.0 和 2.0。也就是说:
托管 API(例如通过 GLES10.getString() 方法) 必须 报告支持 OpenGL ES 1.0 和 2.0。
托管 API(例如通过 GLES10.getString() 方法) 必须 报告支持 OpenGL ES 1.0 和 2.0。
原生 C/C++ OpenGL API(即通过 libGLES_v1CM.so、libGLES_v2.so 或 libEGL.so 提供给应用程序的 API) 必须 报告支持 OpenGL ES 1.0 和 2.0。
原生 C/C++ OpenGL API(即通过 libGLES_v1CM.so、libGLES_v2.so 或 libEGL.so 提供给应用程序的 API) 必须 报告支持 OpenGL ES 1.0 和 2.0。
OpenGL ES 1.0 和 2.0。
设备 实现 可以 实现任何所需的 OpenGL ES 扩展。
设备 实现 可以 实现任何所需的 OpenGL ES 扩展。
但是,设备实现 必须 通过 OpenGL ES 托管和原生 API 报告它们支持的所有扩展字符串,反之,绝不能报告它们不支持的扩展字符串。
但是,设备实现 必须 通过 OpenGL ES 托管和原生 API 报告它们支持的所有扩展字符串,反之,绝不能报告它们不支持的扩展字符串。
请注意,Android 4.1 包含对应用程序选择性地指定它们需要特定 OpenGL 纹理压缩格式的支持。
请注意,Android 4.1 包含对应用程序选择性地指定它们需要特定 OpenGL 纹理压缩格式的支持。
这些格式通常是供应商特定的。Android 4.1 不要求设备实现实现任何特定的纹理压缩格式。但是,它们 应该 通过 OpenGL API 中的 getString() 方法准确报告它们支持的任何纹理压缩格式。
这些格式通常是供应商特定的。Android 4.1 不要求设备实现实现任何特定的纹理压缩格式。但是,它们 应该 通过 OpenGL API 中的 getString() 方法准确报告它们支持的任何纹理压缩格式。
OpenGL API 中的 getString() 方法。
OpenGL API 中的 getString() 方法。
Android 4.1 包含一种机制,允许应用程序声明它们想要通过使用清单标记 android:hardwareAccelerated 或直接 API 调用 [资源, 9],在应用程序、Activity、窗口或视图级别启用 2D 图形的硬件加速。
Android 4.1 包含一种机制,允许应用程序声明它们想要通过使用清单标记 android:hardwareAccelerated 或直接 API 调用 [资源, 9],在应用程序、Activity、窗口或视图级别启用 2D 图形的硬件加速。
View 级别启用 2D 图形的硬件加速。
API 调用 [资源, 9]。
在 Android 4.1 中,设备实现 必须 默认启用硬件加速,如果开发者通过设置 android:hardwareAccelerated="false" 或通过 Android View API 直接禁用硬件加速来请求,则 必须 禁用硬件加速。
在 Android 4.1 中,设备实现 必须 默认启用硬件加速,如果开发者通过设置 android:hardwareAccelerated="false" 或通过 Android View API 直接禁用硬件加速来请求,则 必须 禁用硬件加速。
设置 android:hardwareAccelerated="false" 或禁用硬件加速
直接通过 Android View API。
此外,设备实现 必须 表现出与 Android SDK 文档中关于硬件加速的内容 [资源, 9]一致的行为。
此外,设备实现 必须 表现出与 Android SDK 文档中关于硬件加速的内容 [资源, 9]一致的行为。
Android 4.1 包含一个 TextureView 对象,允许开发者直接将硬件加速的 OpenGL ES 纹理集成到 UI 层次结构中作为渲染目标。
Android 4.1 包含一个 TextureView 对象,允许开发者直接将硬件加速的 OpenGL ES 纹理集成到 UI 层次结构中作为渲染目标。
设备 实现 必须 支持 TextureView API,并且 必须 表现出与上游 Android 实现一致的行为。
设备 实现 必须 支持 TextureView API,并且 必须 表现出与上游 Android 实现一致的行为。
7.1.5. 旧应用程序兼容性模式
Android 4.1 指定了一种“兼容性模式”,其中框架在“正常”屏幕尺寸等效(320dp 宽度)模式下运行,以方便旧版应用程序使用,这些应用程序不是为早于屏幕尺寸独立性的旧版本 Android 开发的。
Android 4.1 指定了一种“兼容性模式”,其中框架在“正常”屏幕尺寸等效(320dp 宽度)模式下运行,以方便旧版应用程序使用,这些应用程序不是为早于屏幕尺寸独立性的旧版本 Android 开发的。
应用程序使用,这些应用程序不是为早于屏幕尺寸独立性的旧版本 Android 开发的。
设备 实现 必须 包含对上游 Android 开源代码实现的旧应用程序兼容性模式的支持。也就是说,设备实现 不得 更改激活兼容性模式的触发器或阈值,并且 不得 更改兼容性模式本身的行为。
设备 实现 必须 包含对上游 Android 开源代码实现的旧应用程序兼容性模式的支持。也就是说,设备实现 不得 更改激活兼容性模式的触发器或阈值,并且 不得 更改兼容性模式本身的行为。
也就是说,设备实现 不得 更改激活兼容性模式的触发器或阈值,并且 不得 更改兼容性模式本身的行为。
兼容性模式本身的行为。
兼容性模式本身的行为。
7.1.6. 屏幕类型
设备实现屏幕分为两种类型之一:
固定像素显示实现:屏幕是单个面板,仅支持单个像素宽度和高度。通常,屏幕在物理上与设备集成在一起。示例包括手机、平板电脑等。
固定像素显示实现:屏幕是单个面板,仅支持单个像素宽度和高度。通常,屏幕在物理上与设备集成在一起。示例包括手机、平板电脑等。
与设备集成在一起。示例包括手机、平板电脑等。
可变像素显示实现:设备实现要么没有嵌入式屏幕,要么包含视频输出端口(例如 VGA、HDMI 或用于显示的无线端口),要么具有可以更改像素尺寸的嵌入式屏幕。示例包括电视、机顶盒等。
可变像素显示实现:设备实现要么没有嵌入式屏幕,要么包含视频输出端口(例如 VGA、HDMI 或用于显示的无线端口),要么具有可以更改像素尺寸的嵌入式屏幕。示例包括电视、机顶盒等。
尺寸的嵌入式屏幕。示例包括电视、机顶盒等。
尺寸的嵌入式屏幕。示例包括电视、机顶盒等。
固定像素设备实现
固定像素设备实现 可以 使用任何像素尺寸的屏幕,前提是它们满足本兼容性定义中定义的要求。
固定像素设备实现 可以 使用任何像素尺寸的屏幕,前提是它们满足本兼容性定义中定义的要求。
固定像素实现 可以 包含用于外部显示的视频输出端口。但是,如果该显示器曾经用于运行应用程序,则设备 必须 满足以下要求:
固定像素实现 可以 包含用于外部显示的视频输出端口。但是,如果该显示器曾经用于运行应用程序,则设备 必须 满足以下要求:
以下要求:
设备 必须 报告与固定像素显示器相同的屏幕配置和显示指标(如第 7.1.1 节和 7.1.2 节中所述)。
设备 必须 报告与固定像素显示器相同的屏幕配置和显示指标(如第 7.1.1 节和 7.1.2 节中所述)。
设备 必须 报告与固定像素显示器相同的逻辑密度。
设备 必须 报告与固定像素显示器相同或非常接近的屏幕尺寸。
设备 必须 报告与固定像素显示器相同或非常接近的屏幕尺寸。
例如,对角线尺寸为 7 英寸、分辨率为 1024x600 像素的平板电脑被视为固定像素大型 mdpi 显示实现。如果它包含以 720p 或 1080p 分辨率显示的视频输出端口,则设备实现 必须 缩放输出,以便无论使用固定像素显示器还是视频输出端口,应用程序都仅在大型 mdpi 窗口中执行。
例如,对角线尺寸为 7 英寸、分辨率为 1024x600 像素的平板电脑被视为固定像素大型 mdpi 显示实现。如果它包含以 720p 或 1080p 分辨率显示的视频输出端口,则设备实现 必须 缩放输出,以便无论使用固定像素显示器还是视频输出端口,应用程序都仅在大型 mdpi 窗口中执行。
输出端口,应用程序都仅在大型 mdpi 窗口中执行。
输出端口,应用程序都仅在大型 mdpi 窗口中执行。
无论使用固定像素显示器还是视频输出端口。
可变像素设备实现
可变像素设备实现 必须 支持 1280x720 或 1920x1080(即 720p 或 1080p)之一或两者都支持。具有可变像素显示器的设备实现 不得 支持任何其他屏幕配置或模式。
可变像素设备实现 必须 支持 1280x720 或 1920x1080(即 720p 或 1080p)之一或两者都支持。具有可变像素显示器的设备实现 不得 支持任何其他屏幕配置或模式。
屏幕配置或模式。具有可变像素屏幕的设备实现 可以 在运行时或启动时更改屏幕配置或模式。
屏幕配置或模式。具有可变像素屏幕的设备实现 可以 在运行时或启动时更改屏幕配置或模式。
模式。例如,机顶盒用户可能会用 1080p 显示器替换 720p 显示器,并且设备实现可能会相应地进行调整。
模式。例如,机顶盒用户可能会用 1080p 显示器替换 720p 显示器,并且设备实现可能会相应地进行调整。
相应地进行调整。
此外,可变像素设备实现 必须 报告以下像素尺寸的配置桶:
此外,可变像素设备实现 必须 报告以下像素尺寸的配置桶:
1280x720(也称为 720p):'大型'屏幕尺寸,'tvdpi' (213 dpi) 密度
1920x1080(也称为 1080p):'大型'屏幕尺寸,'xhdpi' (320 dpi) 密度
为了清晰起见,在 Android 4.1 中,具有可变像素尺寸的设备实现仅限于 720p 或 1080p,并且 必须 配置为报告屏幕尺寸和密度桶,如上所述。
为了清晰起见,在 Android 4.1 中,具有可变像素尺寸的设备实现仅限于 720p 或 1080p,并且 必须 配置为报告屏幕尺寸和密度桶,如上所述。
密度桶,如上所述。
7.1.7. 屏幕技术
Android 平台包含允许应用程序向显示器渲染丰富图形的 API。设备 必须 支持 Android SDK 定义的所有这些 API,除非本文档中明确允许的情况。具体而言:
Android 平台包含允许应用程序向显示器渲染丰富图形的 API。设备 必须 支持 Android SDK 定义的所有这些 API,除非本文档中明确允许的情况。具体而言:
除非本文档中明确允许的情况。具体而言:
设备 必须 支持能够渲染 16 位彩色图形的显示器,并且 应该 支持能够渲染 24 位彩色图形的显示器。
设备 必须 支持能够渲染 16 位彩色图形的显示器,并且 应该 支持能够渲染 24 位彩色图形的显示器。
设备 必须 支持能够渲染动画的显示器。
使用的显示技术 必须 具有介于 0.9 和 1.1 之间的像素宽高比 (PAR)。也就是说,像素宽高比 必须 接近正方形 (1.0),公差为 10%。
使用的显示技术 必须 具有介于 0.9 和 1.1 之间的像素宽高比 (PAR)。也就是说,像素宽高比 必须 接近正方形 (1.0),公差为 10%。
公差为 10%。
7.2. 输入设备
7.2.1. 键盘
设备实现:
必须 包含对输入法框架的支持(允许第三方开发者创建输入法引擎,即软键盘),如 https://developer.android.com.cn 中所详述。
必须 包含对输入法框架的支持(允许第三方开发者创建输入法引擎,即软键盘),如 https://developer.android.com.cn 中所详述。
详细描述。
必须 提供至少一个软键盘实现(无论是否存在硬键盘)
必须 提供至少一个软键盘实现(无论是否存在硬键盘)
可以 包含额外的软键盘实现
可以 包含硬键盘
绝不能 包含与 android.content.res.Configuration.keyboard [资源, 40]中指定的格式之一不匹配的硬键盘(即 QWERTY 或 12 键)。
绝不能 包含与 android.content.res.Configuration.keyboard [资源, 40]中指定的格式之一不匹配的硬键盘(即 QWERTY 或 12 键)。
(即 QWERTY 或 12 键)。
7.2.2. 非触摸导航
设备实现:
可以 省略非触摸导航选项(即,可以省略轨迹球、D-pad 或滚轮)
可以 省略非触摸导航选项(即,可以省略轨迹球、D-pad 或滚轮)
必须 报告 android.content.res.Configuration.navigation [资源, 40]的正确值
必须 报告 android.content.res.Configuration.navigation [资源, 40]的正确值
必须 提供合理的替代用户界面机制,用于文本的选择和编辑,与输入法引擎兼容。上游 Android 开源软件包含适用于缺少非触摸导航输入的设备的文本选择机制。
必须 提供合理的替代用户界面机制,用于文本的选择和编辑,与输入法引擎兼容。上游 Android 开源软件包含适用于缺少非触摸导航输入的设备的文本选择机制。
适用于缺少非触摸导航输入的设备的文本选择机制。
7.2.3. 导航键
主页、菜单和返回功能对于 Android 导航范例至关重要。设备实现 必须 在运行应用程序时始终向用户提供这些功能。
主页、菜单和返回功能对于 Android 导航范例至关重要。设备实现 必须 在运行应用程序时始终向用户提供这些功能。
在运行应用程序时始终向用户提供这些功能。这些功能 可以 通过专用物理按钮(例如机械按钮或电容式触摸按钮)实现,也可以使用专用软件键、手势、触摸面板等实现。Android 4.1 支持这两种实现方式。
在运行应用程序时始终向用户提供这些功能。这些功能 可以 通过专用物理按钮(例如机械按钮或电容式触摸按钮)实现,也可以使用专用软件键、手势、触摸面板等实现。Android 4.1 支持这两种实现方式。
面板等实现。Android 4.1 支持这两种实现方式。
面板等实现。Android 4.1 支持这两种实现方式。
Android 4.1 引入了对辅助操作 [资源, 63]的支持。设备实现 必须 在运行应用程序时始终向用户提供辅助操作。
Android 4.1 引入了对辅助操作 [资源, 63]的支持。设备实现 必须 在运行应用程序时始终向用户提供辅助操作。
在运行应用程序时始终向用户提供辅助操作。此功能 可以 通过硬件或软件键实现。
在运行应用程序时始终向用户提供辅助操作。此功能 可以 通过硬件或软件键实现。
设备 实现 可以 使用屏幕的独立部分来显示导航键,但如果这样做,则 必须 满足以下要求:
设备 实现 可以 使用屏幕的独立部分来显示导航键,但如果这样做,则 必须 满足以下要求:
设备实现导航键 必须 使用屏幕的独立部分,应用程序不可用,并且 不得 遮挡或以其他方式干扰应用程序可用的屏幕部分。
设备实现导航键 必须 使用屏幕的独立部分,应用程序不可用,并且 不得 遮挡或以其他方式干扰应用程序可用的屏幕部分。
应用程序可用的屏幕部分。
设备 实现 必须 向应用程序提供屏幕的一部分,该部分满足第 7.1.1 节中定义的要求。
设备 实现 必须 向应用程序提供屏幕的一部分,该部分满足第 7.1.1 节中定义的要求。
设备 实现 必须 在应用程序未指定系统 UI 模式或指定 SYSTEM_UI_FLAG_VISIBLE 时显示导航键。
设备 实现 必须 在应用程序未指定系统 UI 模式或指定 SYSTEM_UI_FLAG_VISIBLE 时显示导航键。
设备 实现 必须 在应用程序指定 SYSTEM_UI_FLAG_LOW_PROFILE 时,以不显眼的“低调”(例如,变暗)模式显示导航键。
设备 实现 必须 在应用程序指定 SYSTEM_UI_FLAG_LOW_PROFILE 时,以不显眼的“低调”(例如,变暗)模式显示导航键。
SYSTEM_UI_FLAG_LOW_PROFILE。
设备 实现 必须 在应用程序指定 SYSTEM_UI_FLAG_HIDE_NAVIGATION 时隐藏导航键。
设备 实现 必须 在应用程序指定 SYSTEM_UI_FLAG_HIDE_NAVIGATION 时隐藏导航键。
当 targetSdkVersion <= 10 时,设备实现 必须 向应用程序呈现菜单键,并且当 targetSdkVersion > 10 时不应呈现菜单键。
当 targetSdkVersion <= 10 时,设备实现 必须 向应用程序呈现菜单键,并且当 targetSdkVersion > 10 时不应呈现菜单键。
targetSdkVersion > 10。
设备 实现 必须 向应用程序提供屏幕的一部分,该部分满足第 7.1.1 节中定义的要求。
设备 实现 必须 向应用程序提供屏幕的一部分,该部分满足第 7.1.1 节中定义的要求。
7.2.4. 触摸屏输入
设备实现应该具有某种指针输入系统(鼠标式或触摸式)。
鼠标式或触摸式)。但是,如果设备实现不支持指针
输入系统,则不得报告 android.hardware.touchscreen 或
android.hardware.faketouch 功能常量。包含
指针输入系统的设备实现
如果设备输入系统支持多个指针,则应该支持完全独立跟踪的指针。
支持多个指针
必须报告 android.content.res.Configuration.touchscreen 的值
[资源,40] 对应于设备上特定触摸屏的类型。
设备
Android 4.0 包括对各种触摸屏、触摸板和伪触摸输入设备的支持。
基于触摸屏的设备实现与显示屏 [资源,71] 相关联,使用户产生直接操作屏幕上项目的印象。
显示屏 [资源,71] 相关联,使用户产生直接操作屏幕上项目的印象。
由于用户直接触摸屏幕,系统不需要任何额外的辅助手段来指示正在操作的对象。在
由于用户直接触摸屏幕,系统不需要任何额外的辅助手段来指示正在操作的对象。在
对比之下,伪触摸界面提供了一种用户输入系统,该系统近似于触摸屏功能的子集。例如,鼠标或遥控器驱动
对比之下,伪触摸界面提供了一种用户输入系统,该系统近似于触摸屏功能的子集。例如,鼠标或遥控器驱动
屏幕光标近似于触摸,但需要用户先指向或聚焦,然后单击。许多输入设备(如鼠标、触控板、基于陀螺仪的空中鼠标、
屏幕光标近似于触摸,但需要用户先指向或聚焦,然后单击。许多输入设备(如鼠标、触控板、基于陀螺仪的空中鼠标、
陀螺仪指针、操纵杆和多点触控板)可以支持伪触摸交互。
Android 4.0 包括功能常量 android.hardware.faketouch,它
对应于高保真非触摸(即,基于指针)输入设备,例如
鼠标或触控板,可以充分模拟基于触摸的输入(包括基本
手势支持),并指示设备支持模拟的触摸屏功能的子集。
手势支持),并指示设备支持模拟的触摸屏功能的子集。
必须满足第 7.2.5 节中的伪触摸要求。
设备实现必须报告与所用输入类型对应的正确功能。
设备实现必须报告与所用输入类型对应的正确功能。
必须报告平台功能常量 android.hardware.touchscreen。设备
实现报告平台功能常量
android.hardware.touchscreen 的设备实现还必须报告平台功能常量
android.hardware.faketouch。不包含
触摸屏(并且仅依赖指针设备)的设备实现不得报告任何触摸屏
功能,并且如果满足伪触摸要求,则必须仅报告 android.hardware.faketouch
触摸要求,请参见第 7.2.5 节。
7.2.5. 伪触摸输入
声明支持 android.hardware.faketouch 的设备实现
必须报告指针位置的绝对 X 和 Y 屏幕位置,并在
屏幕上显示可视指针 [资源,70]
必须报告触摸事件,其操作代码 [资源,70] 指定了指针在屏幕上按下或抬起时发生的状态更改
屏幕上显示可视指针 [资源,70]
[资源,70]
必须支持在屏幕上对象上的指针按下和抬起,这允许
用户模拟在屏幕上对象上的点击。
必须支持指针按下、指针抬起、指针按下然后在同一位置的屏幕对象上在时间阈值内指针抬起,这允许用户
用户模拟在屏幕上对象上的点击。
模拟在屏幕上对象上的双击 [资源,70]
必须支持在屏幕上任意点上的指针按下、指针移动到屏幕上的任何其他任意点,然后是指针抬起,这允许
模拟在屏幕上对象上的双击 [资源,70]
用户模拟触摸拖动。
必须支持指针按下,然后允许用户快速将对象移动到屏幕上的不同位置,然后在屏幕上指针抬起,这允许
用户模拟触摸拖动。
用户在屏幕上快速滑动对象。
声明支持 android.hardware.faketouch.multitouch.distinct 的设备
必须满足上述伪触摸的要求,并且还必须支持对两个或多个独立指针输入的独特跟踪。
用户在屏幕上快速滑动对象。
7.2.6. 麦克风
设备实现可以省略麦克风。但是,如果设备实现
省略麦克风,则不得报告 android.hardware.microphone 功能
常量,并且必须根据第 7 节将音频录制 API 实现为无操作。
相反,拥有麦克风的设备实现
必须报告 android.hardware.microphone 功能常量
应该满足第 5.4 节中的音频质量要求
应该满足第 5.5 节中的音频延迟要求
7.3. 传感器
Android 4.1 包括用于访问各种传感器类型的 API。设备
实现通常可以省略这些传感器,如下面的
小节中规定。如果设备包含特定传感器类型,该类型具有对应的 API
供第三方开发人员使用,则设备实现必须按照 Android SDK 文档中的描述来实现该 API。
供第三方开发人员使用,则设备实现必须按照 Android SDK 文档中的描述来实现该 API。
必须准确报告传感器的存在或不存在,根据
android.content.pm.PackageManager 类。[资源,37]
必须通过 SensorManager.getSensorList() 和类似方法返回支持的传感器的准确列表。
android.content.pm.PackageManager 类。[资源,37]
对于所有其他传感器 API 必须表现合理(例如,当应用程序尝试注册侦听器时,返回 true 或 false,而不是在
对于所有其他传感器 API 必须表现合理(例如,当应用程序尝试注册侦听器时,返回 true 或 false,而不是在
相应的传感器不存在时调用传感器侦听器等)。
必须使用相关的国际单位制报告所有传感器测量值
单位制(即公制)值,对于每种传感器类型,如 Android SDK 中定义的那样
文档 [资源,41]
上面的列表并非详尽无遗;Android SDK 的文档化行为
应被视为权威。
某些传感器类型是合成的,这意味着它们可以从一个或多个其他传感器提供的数据中导出。(示例包括方向传感器和线性
应被视为权威。
加速度传感器。)当设备实现包含先决条件的物理传感器时,应该实现这些传感器类型。
加速度传感器。)当设备实现包含先决条件的物理传感器时,应该实现这些传感器类型。
Android 4.1 API 引入了“流式”传感器的概念,该传感器是
持续返回数据,而不是仅在数据更改时返回数据。设备
实现必须为 Android 4.1 SDK 文档指示为流式传感器的任何 API 持续提供定期数据样本。
持续返回数据,而不是仅在数据更改时返回数据。设备
7.3.1. 加速度计
设备实现应该包含一个三轴加速度计。如果设备
实现包含一个三轴加速度计,则它
应该能够以 120 Hz 或更高的频率传递事件。请注意,虽然
上面的加速度计频率在 Android 4.1 中声明为“应该”,但
未来版本的兼容性定义计划将这些更改为“必须”。也就是说,这些标准在 Android 4.1 中是可选的,但在未来的版本中将是必需的。
未来版本的兼容性定义计划将这些更改为“必须”。也就是说,这些标准在 Android 4.1 中是可选的,但在未来的版本中将是必需的。
强烈建议运行 Android 4.1 的现有设备和新设备在 Android 4.1 中满足这些要求,以便
它们将能够升级到未来的平台版本。
必须遵守 Android 传感器坐标系,如
Android API 中详细说明的那样(请参见 [资源,41])。
必须能够测量从自由落体到两倍重力 (2g) 或更大的加速度,在
任何三维矢量上必须具有 8 位或更高的精度。
任何三维矢量上必须具有 8 位或更高的精度。
7.3.2. 磁力计
设备实现应该包含一个三轴磁力计(即,指南针)。如果
设备包含一个三轴磁力计,则它
必须能够以 10 Hz 或更高的频率传递事件。
必须遵守 Android 传感器坐标系,如
Android API(请参见 [资源,41])。
必须能够采样足够范围的磁场强度以覆盖
地磁场。
必须具有 8 位或更高的精度。
必须具有不大于 0.5 µT 的标准偏差。
7.3.3. GPS
设备实现应该包含 GPS 接收器。如果设备实现
包含 GPS 接收器,则应该包含某种形式的“辅助 GPS”技术,以最大程度地减少 GPS 定位时间。
包含 GPS 接收器,则应该包含某种形式的“辅助 GPS”技术,以最大程度地减少 GPS 定位时间。
7.3.4. 陀螺仪
设备实现应该包含陀螺仪(即,角变化传感器)。
除非还包含三轴加速度计,否则设备不应包含陀螺仪传感器。
除非还包含三轴加速度计,否则设备不应包含陀螺仪传感器。
必须进行温度补偿。
必须能够测量高达 5.5*Pi 的方向变化
弧度/秒(即,大约 1,000 度/秒)。
应该能够以 200 Hz 或更高的频率传递事件。请注意,虽然
上面的陀螺仪频率在 Android 4.1 中声明为“应该”,但
未来版本的兼容性定义计划将这些更改为“必须”。也就是说,这些标准在 Android 4.1 中是可选的,但在未来的版本中将是必需的。
未来版本的兼容性定义计划将这些更改为“必须”。也就是说,这些标准在 Android 4.1 中是可选的,但在未来的版本中将是必需的。
强烈建议运行 Android 4.1 的现有设备和新设备在 Android 4.1 中满足这些要求,以便
它们将能够升级到未来的平台版本。
必须具有 12 位或更高的精度。
必须具有不大于 1e-7 rad^2 / s^2 每 Hz 的方差(每 Hz 方差,或 rad^2 / s)。
必须具有不大于 1e-7 rad^2 / s^2 每 Hz 的方差(每 Hz 方差,或 rad^2 / s)。
换句话说,如果您以 1 Hz 采样率测量陀螺仪的方差,则应不大于 1e-7 rad^2/s^2。
换句话说,如果您以 1 Hz 采样率测量陀螺仪的方差,则应不大于 1e-7 rad^2/s^2。
必须具有尽可能接近硬件事件发生时间的的时间戳。必须消除恒定延迟。
必须具有尽可能接近硬件事件发生时间的的时间戳。必须消除恒定延迟。
7.3.5. 气压计
设备实现可以包含气压计(即,环境气压传感器)。如果
设备实现包含气压计,则它
必须能够以 5 Hz 或更高的频率传递事件。
必须具有足够的精度以能够估计海拔高度。
必须进行温度补偿。
7.3.7. 温度计
设备实现可以但不应该包含温度计(即
温度传感器)。如果设备实现包含温度计,则必须
测量设备 CPU 的温度。不得测量任何其他
温度。(请注意,此传感器类型在 Android 4.1 API 中已弃用。)
7.3.7. 光度计
设备实现可以包含光度计(即,环境光传感器)。
7.3.8. 接近传感器
设备实现可以包含接近传感器。如果设备实现
包含接近传感器,则必须测量与屏幕相同方向上物体的接近程度。
包含接近传感器,则必须测量与屏幕相同方向上物体的接近程度。
靠近屏幕的物体,因为此传感器类型的主要目的是检测
用户正在使用的手机。如果设备实现包含具有任何其他方向的接近传感器,则不得通过此 API 访问它。
用户正在使用的手机。如果设备实现包含具有任何其他方向的接近传感器,则不得通过此 API 访问它。
精度或更高。
7.4. 数据连接
7.4.1. 电话
Android 4.1 API 和本文档中使用的“电话”专门指
与通过 GSM 或 CDMA 网络拨打语音电话和发送 SMS 消息相关的硬件。
与通过 GSM 或 CDMA 网络拨打语音电话和发送 SMS 消息相关的硬件。
对于 Android 4.1 的目的而言,它们被认为是独立于可能使用同一网络实现的任何数据连接。
对于 Android 4.1 的目的而言,它们被认为是独立于可能使用同一网络实现的任何数据连接。
功能和 API 专门指语音电话和 SMS;例如,设备
无法拨打电话或发送/接收 SMS 消息的实现不得
报告“android.hardware.telephony”功能或任何子功能,无论
它们是否使用蜂窝网络进行数据连接。
Android 4.1 可以用于不包含电话硬件的设备。也就是说,
Android 4.1 与非手机设备兼容。但是,如果设备
实现确实包含 GSM 或 CDMA 电话,则必须为该技术实现完全支持的 API。
实现确实包含 GSM 或 CDMA 电话,则必须为该技术实现完全支持的 API。
硬件的设备实现必须将所有 API 实现为无操作。
7.4.2. IEEE 802.11 (WiFi)
Android 4.1 设备实现应该包括对一种或多种形式的 802.11 (b/g/a/n 等) 的支持。
Android 4.1 设备实现应该包括对一种或多种形式的 802.11 (b/g/a/n 等) 的支持。
必须实现相应的 Android API。
设备实现必须按照 SDK 文档 [资源,62] 中描述的方式实现多播 API。
设备实现必须按照 SDK 文档 [资源,62] 中描述的方式实现多播 API。
必须支持多播 DNS (mDNS)。设备实现不得过滤 mDNS
数据包 (224.0.0.251),在任何操作时间,包括屏幕未处于活动状态时。
数据包 (224.0.0.251),在任何操作时间,包括屏幕未处于活动状态时。
7.4.2.1. WiFi 直连
设备实现应该包括对 Wifi Direct (Wifi 对等网络) 的支持。如果
设备实现确实包含对 Wifi Direct 的支持,则必须实现
相应的 Android API,如 SDK 文档 [资源,68] 中所述。如果
设备实现包含对 Wifi Direct 的支持,则它
必须支持常规 Wifi 操作。
应该支持并发 wifi 和 wifi Direct 操作。
7.4.3. 蓝牙
设备实现应该包含蓝牙收发器。设备
实现包含蓝牙收发器的必须启用基于 RFCOMM 的蓝牙 API,如 SDK 文档 [资源,42] 中所述。
实现包含蓝牙收发器的必须启用基于 RFCOMM 的蓝牙 API,如 SDK 文档 [资源,42] 中所述。
AVRCP、OBEX 等蓝牙配置文件,根据设备的情况而定。
兼容性测试套件包括涵盖 Android RFCOMM 蓝牙 API 的基本操作的用例。
兼容性测试套件包括涵盖 Android RFCOMM 蓝牙 API 的基本操作的用例。
设备之间的通信协议,因此无法通过在单个设备上运行的单元测试进行完全测试。
因此,设备实现还必须通过附录 A 中描述的人工驱动的蓝牙测试程序。
设备之间的通信协议,因此无法通过在单个设备上运行的单元测试进行完全测试。
7.4.4. 近场通信 (NFC)
近场通信 (NFC) 的收发器和相关硬件。如果设备实现包含 NFC
近场通信 (NFC) 的收发器和相关硬件。如果设备实现包含 NFC
硬件,则它
必须从 android.content.pm.PackageManager.hasSystemFeature() 方法报告 android.hardware.nfc 功能。
硬件,则它
[资源,37]
必须能够通过以下 NFC 标准读取和写入 NDEF 消息:
必须能够通过以下 NFC 标准读取和写入 NDEF 消息:
必须能够充当 NFC 论坛读/写器(由 NFC 论坛技术规范 NFCForum-TS-DigitalProtocol-1.0 定义),
必须能够充当 NFC 论坛读/写器(由 NFC 论坛技术规范 NFCForum-TS-DigitalProtocol-1.0 定义),
通过以下 NFC 标准
NfcA (ISO14443-3A)
NfcB (ISO14443-3B)
NfcF (JIS 6319-4)
IsoDep (ISO 14443-4)
NFC 论坛标签类型 1、2、3、4(由 NFC 论坛定义)
应该能够通过以下 NFC 标准读取和写入 NDEF 消息。
NFC 标准。请注意,虽然以下 NFC 标准在 Android 4.1 中声明为“应该”,但未来版本的兼容性定义
NFC 标准。请注意,虽然以下 NFC 标准在 Android 4.1 中声明为“应该”,但未来版本的兼容性定义
计划将这些更改为“必须”。也就是说,这些标准在 Android 4.1 中是可选的,但在未来的版本中将是必需的。
计划将这些更改为“必须”。也就是说,这些标准在 Android 4.1 中是可选的,但在未来的版本中将是必需的。
强烈建议运行 Android 4.1 的现有设备和新设备在 Android 4.1 中满足这些要求,以便它们能够升级到未来的平台版本。
强烈建议运行 Android 4.1 的现有设备和新设备在 Android 4.1 中满足这些要求,以便它们能够升级到未来的平台版本。
NfcV (ISO 15693)
必须能够通过以下对等标准和协议传输和接收数据
必须能够通过以下对等标准和协议传输和接收数据
ISO 18092
LLCP 1.0(由 NFC 论坛定义)
SDP 1.0(由 NFC 论坛定义)
NDEF 推送协议 [资源,43]
SNEP 1.0(由 NFC 论坛定义)
必须包括对 Android Beam [资源,65] 的支持。
必须实现 SNEP 默认服务器。默认 SNEP 服务器接收到的有效 NDEF 消息
必须使用 android.nfc.ACTION_NDEF_DISCOVERED intent 分派到应用程序。
必须使用 android.nfc.ACTION_NDEF_DISCOVERED intent 分派到应用程序。
禁用设置中的 Android Beam 不得禁用传入 NDEF 消息的分派。
禁用设置中的 Android Beam 不得禁用传入 NDEF 消息的分派。
设备实现必须遵循
android.settings.NFCSHARING_SETTINGS intent 以显示 NFC 共享
设置 [资源,67]。必须实现 NPP 服务器。NPP 服务器接收的消息
必须以与 SNEP 默认服务器相同的方式进行处理。
必须实现 SNEP 客户端,并在启用 Android Beam 时尝试将出站 P2P NDEF 发送到默认 SNEP 服务器。
必须实现 SNEP 客户端,并在启用 Android Beam 时尝试将出站 P2P NDEF 发送到默认 SNEP 服务器。
SNEP 服务器,则客户端必须尝试发送到 NPP 服务器。
SNEP 服务器,则客户端必须尝试发送到 NPP 服务器。
必须允许前台活动使用 android.nfc.NfcAdapter.setNdefPushMessage 设置出站 P2P NDEF 消息,以及
必须允许前台活动使用 android.nfc.NfcAdapter.setNdefPushMessage 设置出站 P2P NDEF 消息,以及
android.nfc.NfcAdapter.setNdefPushMessageCallback,以及
android.nfc.NfcAdapter.enableForegroundNdefPush。
应该在发送出站 P2P NDEF 消息之前使用手势或屏幕确认,例如“触摸以传输”。
应该在发送出站 P2P NDEF 消息之前使用手势或屏幕确认,例如“触摸以传输”。
默认情况下应该启用 Android Beam。
当设备支持蓝牙对象推送配置文件时,必须支持 NFC 连接切换到蓝牙。
当设备支持蓝牙对象推送配置文件时,必须支持 NFC 连接切换到蓝牙。
使用 android.nfc.NfcAdapter.setBeamPushUris 时,必须支持连接切换到蓝牙,方法是实现“连接切换版本 1.2” [资源,60] 和“使用 NFC 的蓝牙安全
使用 android.nfc.NfcAdapter.setBeamPushUris 时,必须支持连接切换到蓝牙,方法是实现“连接切换版本 1.2” [资源,60] 和“使用 NFC 的蓝牙安全
配对版本 1.0” [资源,61] 规范,来自 NFC 论坛。这样的实现应该使用 SNEP GET 请求
配对版本 1.0” [资源,61] 规范,来自 NFC 论坛。这样的实现应该使用 SNEP GET 请求
配对版本 1.0” [资源,61] 规范,来自 NFC 论坛。这样的实现应该使用 SNEP GET 请求
用于通过 NFC 交换切换请求/选择记录,并且必须使用蓝牙对象推送配置文件进行实际的蓝牙数据传输。
用于通过 NFC 交换切换请求/选择记录,并且必须使用蓝牙对象推送配置文件进行实际的蓝牙数据传输。
传输。
在 NFC 发现模式下,必须轮询所有支持的技术。
当设备唤醒且屏幕处于活动状态且锁屏解锁时,应该处于 NFC 发现模式。
当设备唤醒且屏幕处于活动状态且锁屏解锁时,应该处于 NFC 发现模式。
(请注意,JIS、ISO 和 NFC 论坛规范的公开可用链接不可用。)
(请注意,JIS、ISO 和 NFC 论坛规范的公开可用链接不可用。)
此外,设备实现可以包括对以下 MIFARE 技术的读/写器支持。
此外,设备实现可以包括对以下 MIFARE 技术的读/写器支持。
MIFARE Classic (NXP MF1S503x [资源,44],MF1S703x [资源,44])
MIFARE Ultralight (NXP MF0ICU1 [资源,46],MF0ICU2 [资源,46])
MIFARE Ultralight (NXP MF0ICU1 [资源,46],MF0ICU2 [资源,46])
请注意,Android 4.1 中包含用于这些 MIFARE 类型的 API。如果设备
实现支持读/写器角色中的 MIFARE,则它
必须实现 Android SDK 文档中记录的相应 Android API。
必须实现 Android SDK 文档中记录的相应 Android API。
必须从 [资源,37] 报告 com.nxp.mifare 功能。请注意,这不是标准的 Android 功能,因此
硬件,则它
必须从 [资源,37] 报告 com.nxp.mifare 功能。请注意,这不是标准的 Android 功能,因此
不会显示为 PackageManager 类上的常量。
除非还实现了本节中描述的常规 NFC 支持,否则不得实现相应的 Android API,也不得报告 com.nxp.mifare 功能。
除非还实现了本节中描述的常规 NFC 支持,否则不得实现相应的 Android API,也不得报告 com.nxp.mifare 功能。
描述。
如果设备实现不包含 NFC 硬件,则不得从 android.content.pm.PackageManager.hasSystemFeature() 方法 [资源,37] 声明 android.hardware.nfc 功能,
如果设备实现不包含 NFC 硬件,则不得从 android.content.pm.PackageManager.hasSystemFeature() 方法 [资源,37] 声明 android.hardware.nfc 功能,
android.content.pm.PackageManager.hasSystemFeature() 方法 [资源,37],
并且必须将 Android 4.1 NFC API 实现为无操作。
由于类 android.nfc.NdefMessage 和 android.nfc.NdefRecord 表示协议独立的
数据表示格式,即使设备实现不包含对 NFC 的支持或声明 android.hardware.nfc 功能,也必须实现这些 API。
数据表示格式,即使设备实现不包含对 NFC 的支持或声明 android.hardware.nfc 功能,也必须实现这些 API。
7.4.5. 最低网络能力
设备实现必须包括对一种或多种形式的数据联网的支持。
具体而言,设备实现必须包括对至少一种能够达到 200Kbit/秒或更高的数据标准的支持。
具体而言,设备实现必须包括对至少一种能够达到 200Kbit/秒或更高的数据标准的支持。
满足此要求的技术示例包括 EDGE、HSPA、EV-DO、802.11g、以太网等。
物理联网标准(如以太网)是主要数据连接的设备实现,还应该包括对至少一种常见无线数据标准(如 802.11 (WiFi))的支持。
物理联网标准(如以太网)是主要数据连接的设备实现,还应该包括对至少一种常见无线数据标准(如 802.11 (WiFi))的支持。
无线数据标准,如 802.11 (WiFi)。
设备可以实现多种形式的数据连接。
7.5. 摄像头
设备实现应该包含后置摄像头,并且可以包含前置摄像头。
设备实现应该包含后置摄像头,并且可以包含前置摄像头。
设备背面的一侧;也就是说,它对设备远侧的场景成像,就像传统相机一样。前置摄像头是位于设备显示屏同一侧的摄像头;
设备背面的一侧;也就是说,它对设备远侧的场景成像,就像传统相机一样。前置摄像头是位于设备显示屏同一侧的摄像头;
也就是说,通常用于对用户成像的摄像头,例如用于视频会议和类似应用程序。
也就是说,通常用于对用户成像的摄像头,例如用于视频会议和类似应用程序。
7.5.1. 后置摄像头
设备实现应该包含后置摄像头。如果设备
实现包含后置摄像头,则它
必须具有至少 200 万像素的分辨率。
应该具有硬件自动对焦,或在摄像头驱动程序中实现的软件自动对焦(对应用程序软件透明)。
应该具有硬件自动对焦,或在摄像头驱动程序中实现的软件自动对焦(对应用程序软件透明)。
可以具有固定焦距或 EDOF(扩展景深)硬件。
可以包括闪光灯。如果摄像头包含闪光灯,则在 android.hardware.Camera.PreviewCallback 实例已
可以包括闪光灯。如果摄像头包含闪光灯,则在 android.hardware.Camera.PreviewCallback 实例已
注册到摄像头预览表面上时,闪光灯不得点亮,除非应用程序已通过启用 Camera.Parameters 对象的 FLASH_MODE_AUTO 或 FLASH_MODE_ON 属性显式启用了闪光灯。
注册到摄像头预览表面上时,闪光灯不得点亮,除非应用程序已通过启用 Camera.Parameters 对象的 FLASH_MODE_AUTO 或 FLASH_MODE_ON 属性显式启用了闪光灯。
设备的内置系统摄像头应用程序,而仅适用于使用 Camera.PreviewCallback 的第三方应用程序。
设备的内置系统摄像头应用程序,而仅适用于使用 Camera.PreviewCallback 的第三方应用程序。
使用 Camera.PreviewCallback。
7.5.2. 前置摄像头
设备实现可以包含前置摄像头。如果设备实现
设备实现可以包含前置摄像头。如果设备实现
必须具有至少 VGA(即,640x480 像素)的分辨率。
不得将前置摄像头用作摄像头 API 的默认摄像头。也就是说,
Android 4.1 中的摄像头 API 具有对前置摄像头的特定支持,并且
设备实现不得将 API 配置为将前置摄像头视为默认后置摄像头,即使它是设备上唯一的摄像头也是如此。
设备实现不得将 API 配置为将前置摄像头视为默认后置摄像头,即使它是设备上唯一的摄像头也是如此。
设备。
可以包括后置摄像头可用的功能(如自动对焦、闪光灯等),如第 7.5.1 节所述。
可以包括后置摄像头可用的功能(如自动对焦、闪光灯等),如第 7.5.1 节所述。
必须水平反射(即镜像)应用程序在 CameraPreview 中显示的流,如下所示:
必须水平反射(即镜像)应用程序在 CameraPreview 中显示的流,如下所示:
如果设备实现能够被用户旋转(例如通过加速度计自动旋转或通过用户输入手动旋转),则摄像头预览必须相对于设备的当前
如果设备实现能够被用户旋转(例如通过加速度计自动旋转或通过用户输入手动旋转),则摄像头预览必须相对于设备的当前
如果设备实现能够被用户旋转(例如通过加速度计自动旋转或通过用户输入手动旋转),则摄像头预览必须相对于设备的当前
设备 不得 在更改方向时更改报告的屏幕尺寸或密度。
如果当前应用程序已明确请求通过调用 android.hardware.Camera.setDisplayOrientation() [资源,50] 方法旋转摄像头显示,则摄像头预览必须相对于应用程序指定的方向水平镜像。
如果当前应用程序已明确请求通过调用 android.hardware.Camera.setDisplayOrientation() [资源,50] 方法旋转摄像头显示,则摄像头预览必须相对于应用程序指定的方向水平镜像。
android.hardware.Camera.setDisplayOrientation() [资源,50]
方法,摄像头预览必须相对于应用程序指定的方向水平镜像。
方法,摄像头预览必须相对于应用程序指定的方向水平镜像。
否则,预览必须沿着设备的默认水平轴镜像。
否则,预览必须沿着设备的默认水平轴镜像。
必须以与摄像头预览图像流相同的方式镜像后视图显示的图像。(如果设备实现不支持后视图,则此要求显然不适用。)
必须以与摄像头预览图像流相同的方式镜像后视图显示的图像。(如果设备实现不支持后视图,则此要求显然不适用。)
后视图,此要求显然不适用。)
不得镜像返回到应用程序回调或提交到媒体存储的最终捕获的静态图像或视频流。
后视图,此要求显然不适用。)
7.5.3. 摄像头 API 行为
设备实现必须为与摄像头相关的 API(对于前置和后置摄像头)实现以下行为:
设备实现必须为与摄像头相关的 API(对于前置和后置摄像头)实现以下行为:
1. 如果应用程序从未调用 android.hardware.Camera.Parameters.setPreviewFormat(int),则设备必须对提供给应用程序回调的预览数据使用 android.hardware.PixelFormat.YCbCr_420_SP。
1. 如果应用程序从未调用 android.hardware.Camera.Parameters.setPreviewFormat(int),则设备必须对提供给应用程序回调的预览数据使用 android.hardware.PixelFormat.YCbCr_420_SP。
device MUST use android.hardware.PixelFormat.YCbCr_420_SP for preview
数据提供给应用程序回调。
2. 如果应用程序注册了 android.hardware.Camera.PreviewCallback 实例,并且当预览格式为 YCbCr_420_SP 时,系统调用 onPreviewFrame() 方法,则传递到 onPreviewFrame() 中的 byte[] 中的数据必须进一步采用 NV21 编码格式。也就是说,NV21 必须是默认格式。
2. 如果应用程序注册了 android.hardware.Camera.PreviewCallback 实例,并且当预览格式为 YCbCr_420_SP 时,系统调用 onPreviewFrame() 方法,则传递到 onPreviewFrame() 中的 byte[] 中的数据必须进一步采用 NV21 编码格式。也就是说,NV21 必须是默认格式。
format is YCbCr_420_SP, the data in the byte[] passed into onPreviewFrame()
必须进一步采用 NV21 编码格式。也就是说,NV21 必须是默认格式。
3. 设备实现必须支持 YV12 格式(由常量 android.graphics.ImageFormat.YV12 表示),用于前置和后置摄像头的摄像头预览。
android.graphics.ImageFormat.YV12 常量)用于前置和后置摄像头的摄像头预览。(硬件视频解码器和摄像头可以使用任何本机像素格式,但设备实现必须支持转换为 YV12。)
android.graphics.ImageFormat.YV12 常量)用于前置和后置摄像头的摄像头预览。(硬件视频解码器和摄像头可以使用任何本机像素格式,但设备实现必须支持转换为 YV12。)
使用任何本机像素格式,但设备实现必须支持转换为 YV12。)
转换到 YV12。)
设备实现必须实现 Android 4.1 SDK 文档 [资源,51] 中包含的完整摄像头 API,无论设备是否包含硬件自动对焦或其他功能。
设备实现必须实现 Android 4.1 SDK 文档 [资源,51] 中包含的完整摄像头 API,无论设备是否包含硬件自动对焦或其他功能。
硬件自动对焦或其他功能。例如,缺少自动对焦的摄像头仍然必须调用任何已注册的 android.hardware.Camera.AutoFocusCallback 实例(即使这与非自动对焦摄像头无关)。
硬件自动对焦或其他功能。例如,缺少自动对焦的摄像头仍然必须调用任何已注册的 android.hardware.Camera.AutoFocusCallback 实例(即使这与非自动对焦摄像头无关)。
实例(即使这与非自动对焦摄像头无关)。请注意,这适用于前置摄像头;例如,即使大多数前置摄像头不支持自动对焦,API 回调仍然必须像描述的那样“伪造”。
实例(即使这与非自动对焦摄像头无关)。请注意,这适用于前置摄像头;例如,即使大多数前置摄像头不支持自动对焦,API 回调仍然必须像描述的那样“伪造”。
摄像头不支持自动对焦,API 回调仍然必须像描述的那样“伪造”。
描述。
设备实现必须识别并遵守定义为 android.hardware.Camera.Parameters 类上的常量的每个参数名称(如果底层硬件支持该功能)。
设备实现必须识别并遵守定义为 android.hardware.Camera.Parameters 类上的常量的每个参数名称(如果底层硬件支持该功能)。
API 必须按文档所述的方式运行。相反,设备实现不得识别或遵守传递给 android.hardware.Camera.setParameters() 方法的字符串常量,除非这些常量在 android.hardware.Camera.Parameters 上记录为常量。
API 必须按文档所述的方式运行。相反,设备实现不得识别或遵守传递给 android.hardware.Camera.setParameters() 方法的字符串常量,除非这些常量在 android.hardware.Camera.Parameters 上记录为常量。
android.hardware.Camera.setParameters() 方法的字符串常量,除非这些常量在 android.hardware.Camera.Parameters 上记录为常量。
android.hardware.Camera.setParameters() 方法的字符串常量,除非这些常量在 android.hardware.Camera.Parameters 上记录为常量。
实现必须支持所有标准摄像头参数(如果硬件允许),并且不得支持自定义摄像头参数类型。
实现必须支持所有标准摄像头参数(如果硬件允许),并且不得支持自定义摄像头参数类型。
允许,并且不得支持自定义摄像头参数类型。
每当摄像头拍摄新照片并且照片条目已添加到媒体存储时,设备实现必须广播 Camera.ACTION_NEW_PICTURE intent。
每当摄像头拍摄新照片并且照片条目已添加到媒体存储时,设备实现必须广播 Camera.ACTION_NEW_PICTURE intent。
添加到媒体存储。
每当摄像头录制新视频并且照片条目已添加到媒体存储时,设备实现必须广播 Camera.ACTION_NEW_VIDEO intent。
每当摄像头录制新视频并且照片条目已添加到媒体存储时,设备实现必须广播 Camera.ACTION_NEW_VIDEO intent。
添加到媒体存储。
7.5.4. 摄像头方向
前后置摄像头(如果存在)都必须定向,以使摄像头的长尺寸与屏幕的长尺寸对齐。
前后置摄像头(如果存在)都必须定向,以使摄像头的长尺寸与屏幕的长尺寸对齐。
设备处于横向方向时,摄像头必须以横向方向捕获图像。这适用于设备的自然方向,也就是说,它既适用于横向主设备,也适用于纵向主设备。
设备处于横向方向时,摄像头必须以横向方向捕获图像。这适用于设备的自然方向,也就是说,它既适用于横向主设备,也适用于纵向主设备。
也就是说,它既适用于横向主设备,也适用于纵向主设备。
7.6. 内存和存储
7.6.1. 最低内存和存储
设备实现必须具有至少 340MB 的内存可供内核和用户空间使用。
设备实现必须具有至少 340MB 的内存可供内核和用户空间使用。
内核控制之外的硬件组件(如无线电、视频等)的任何专用内存。
内核控制之外的硬件组件(如无线电、视频等)的任何专用内存。
设备实现必须具有至少 350MB 的非易失性存储空间,供应用程序专用数据使用。也就是说,/data 分区必须至少为 350MB。
设备实现必须具有至少 350MB 的非易失性存储空间,供应用程序专用数据使用。也就是说,/data 分区必须至少为 350MB。
Android API 包括下载管理器,应用程序可以使用它来下载数据文件 [资源,56]。
Android API 包括下载管理器,应用程序可以使用它来下载数据文件 [资源,56]。
必须能够将至少 100MB 大小的单个文件下载到默认的“缓存”位置。
必须能够将至少 100MB 大小的单个文件下载到默认的“缓存”位置。
7.6.2. 应用程序共享存储
设备实现必须为应用程序提供共享存储。提供的共享存储必须至少为 1GB。
设备实现必须为应用程序提供共享存储。提供的共享存储必须至少为 1GB。
设备实现必须配置为默认情况下“开箱即用”挂载共享存储。
设备实现必须配置为默认情况下“开箱即用”挂载共享存储。
设备必须包含从 /sdcard 到实际挂载点的 Linux 符号链接。
设备实现必须强制执行文档中记录的此共享存储上的 android.permission.WRITE_EXTERNAL_STORAGE 权限。
设备实现必须强制执行文档中记录的此共享存储上的 android.permission.WRITE_EXTERNAL_STORAGE 权限。
共享存储必须可由任何获得该权限的应用程序写入。
共享存储必须可由任何获得该权限的应用程序写入。
设备实现可以具有用于用户可访问的可移动存储的硬件,例如安全数字卡。或者,设备实现可以将内部(不可移动)存储分配为应用程序的共享存储。
设备实现可以具有用于用户可访问的可移动存储的硬件,例如安全数字卡。或者,设备实现可以将内部(不可移动)存储分配为应用程序的共享存储。
内部(不可移动)存储分配为应用程序的共享存储。
无论使用何种形式的共享存储,设备实现都必须提供某种机制来从主机计算机访问共享存储的内容,例如 USB 大容量存储 (UMS) 或媒体传输协议 (MTP)。
无论使用何种形式的共享存储,设备实现都必须提供某种机制来从主机计算机访问共享存储的内容,例如 USB 大容量存储 (UMS) 或媒体传输协议 (MTP)。
计算机,例如 USB 大容量存储 (UMS) 或媒体传输协议 (MTP)。
设备实现可以使用 USB 大容量存储,但应该使用媒体传输协议。如果设备实现支持媒体传输协议,
设备实现可以使用 USB 大容量存储,但应该使用媒体传输协议。如果设备实现支持媒体传输协议,
设备实现应该与参考 Android MTP 主机 Android 文件传输 [资源,57] 兼容。设备实现应该报告 0x00 的 USB 设备类。
设备实现应该与参考 Android MTP 主机 Android 文件传输 [资源,57] 兼容。设备实现应该报告 0x00 的 USB 设备类。
设备实现应该报告 'MTP' 的 USB 接口名称。
如果设备实现缺少 USB 端口,则必须通过其他方式(例如网络文件系统)向主机计算机提供对共享存储内容的访问权限。
如果设备实现缺少 USB 端口,则必须通过其他方式(例如网络文件系统)向主机计算机提供对共享存储内容的访问权限。
系统。
考虑两个常见示例来说明问题。如果设备实现包括 SD 卡插槽以满足共享存储要求,则必须在出售给用户的设备中包含 FAT 格式的 1GB 或更大的 SD 卡,并且必须默认挂载。
考虑两个常见示例来说明问题。如果设备实现包括 SD 卡插槽以满足共享存储要求,则必须在出售给用户的设备中包含 FAT 格式的 1GB 或更大的 SD 卡,并且必须默认挂载。
1GB 或更大的 SD 卡,并且必须默认挂载。
使用内部固定存储来满足此要求,则该存储必须为 1GB 或更大,并挂载在 /sdcard 上(或者,如果挂载在其他位置,则 /sdcard 必须是到物理位置的符号链接)。
使用内部固定存储来满足此要求,则该存储必须为 1GB 或更大,并挂载在 /sdcard 上(或者,如果挂载在其他位置,则 /sdcard 必须是到物理位置的符号链接)。
挂载在 /sdcard 上(或者,如果挂载在其他位置,则 /sdcard 必须是到物理位置的符号链接)。
挂载在 /sdcard 上(或者,如果挂载在其他位置,则 /sdcard 必须是到物理位置的符号链接)。
设备实现包括多个共享存储路径(例如 SD 卡插槽和共享内部存储),则应该修改核心应用程序,以便
设备实现包括多个共享存储路径(例如 SD 卡插槽和共享内部存储),则应该修改核心应用程序,以便
作为媒体扫描器和 ContentProvider 以透明地支持放置在两者中的文件
位置。
7.7. USB
设备实现应包括一个 USB 客户端端口,并应包括一个
USB 主机端口。
如果设备实现包括 USB 客户端端口
则该端口必须可连接到带有标准 USB-A 端口的 USB 主机
该端口在设备侧应使用 micro USB 外形尺寸。现有的
和运行 Android 4.1 的新设备强烈建议在 Android 4.1 中满足这些要求,以便它们能够升级到未来的
平台版本
该端口应位于边缘的中间位置。设备实现
应将端口放置在设备底部(根据自然
方向)或为所有应用(包括主屏幕)启用软件屏幕旋转,以便当设备以端口在底部
的方向放置时,显示能够正确绘制。现有和运行 Android 4.1 的新设备强烈建议在 Android 4.1 中满足这些要求,以便它们能够
升级到未来的平台版本。
升级到未来的平台版本。
如果设备有其他端口(例如非 USB 充电端口),则它应
与 micro-USB 端口位于同一边缘
它必须允许连接到设备的主机访问共享存储卷的内容,使用 USB 大容量存储或媒体传输
协议
协议
它必须实现 Android 开放配件 API 和规范,如 Android SDK 文档中所述,并且必须声明支持硬件功能 android.hardware.usb.accessory [资源,52]
硬件功能 android.hardware.usb.accessory [资源,52]
硬件功能 android.hardware.usb.accessory [资源,52]
它必须实现 USB 音频类,如 Android SDK 文档 [资源,66] 中所述
文档 [资源,66]
它应实现对 USB 电池充电规范的支持规范
[资源,64] 现有和运行 Android 4.1 的新设备非常强烈建议在 Android 4.1 中满足这些要求,以便它们
能够升级到未来的平台版本
如果设备实现包括 USB 主机端口
它可以使用非标准端口外形尺寸,但如果这样做,则必须随附将端口适配到标准 USB-A 的电缆或
电缆
它必须实现 Android USB 主机 API,如 Android SDK 中所述,并且必须声明支持硬件功能
SDK,并且必须声明支持硬件功能
android.hardware.usb.host [资源,53]
设备实现必须实现 Android 调试桥。如果设备
实现省略 USB 客户端端口,则必须通过局域网(例如以太网或 802.11)实现 Android 调试桥
局域网(例如以太网或 802.11)
8. 性能兼容性
设备实现必须满足下表中定义的 Android 4.1 兼容设备的关键性能指标
兼容设备的关键性能指标
指标
性能阈值
注释
以下应用程序
应在指定的时间内启动。
应在指定的时间内启动。
启动时间被测量为完成加载
应用程序默认活动的总时间,
浏览器:小于
应用程序
应用程序
1300 毫秒
包括启动 Linux 进程、将 Android 程序包加载到 Dalvik VM 和调用 onCreate 所需的时间。
启动时间
联系人:小于
Linux 进程、将 Android 程序包加载到 Dalvik VM 和调用
700 毫秒
程序包到 Dalvik VM 和调用
设置:小于
onCreate。
700 毫秒
当多个应用程序
已启动时,重新
启动已在运行的应用程序后,
同时
运行的应用程序后,
应用程序
启动后必须
花费少于原始启动时间。
启动时间。
9. 安全模型兼容性
设备实现必须实现与 Android 平台安全模型一致的安全模型,如 Android 开发者文档中安全和权限参考文档 [资源,54] 中定义的那样。
平台安全模型一致的安全模型,如 Android 开发者文档中安全和权限参考文档 [资源,54] 中定义的那样。
API [资源,54] 中定义的那样。
设备实现必须支持安装自签名应用程序,而无需任何第三方/机构的额外权限/证书。
设备实现必须支持安装自签名应用程序,而无需任何第三方/机构的额外权限/证书。
具体而言,兼容设备必须支持以下子章节中描述的安全机制。
以下子章节中描述的安全机制。
9.1. 权限
设备实现必须支持 Android 权限模型,如 Android 开发者文档 [资源,54] 中定义的那样。具体而言,实现必须强制执行 SDK 文档中描述的每个权限;
Android 开发者文档 [资源,54] 中定义的那样。具体而言,实现必须强制执行 SDK 文档中描述的每个权限;
SDK 文档中描述的每个权限;
不得省略、更改或忽略任何权限。实现可以添加额外的权限,前提是新的权限 ID 字符串不在 android.* 命名空间中。
忽略任何权限。实现可以添加额外的权限,前提是新的权限 ID 字符串不在 android.* 命名空间中。
命名空间中。
9.2. UID 和进程隔离
设备实现必须支持 Android 应用程序沙箱模型,其中每个应用程序都作为唯一的 Unix 样式 UID 并在单独的进程中运行。
其中每个应用程序都作为唯一的 Unix 样式 UID 并在单独的进程中运行。
设备实现必须支持以相同的 Linux 用户 ID 运行多个应用程序,前提是这些应用程序已正确签名和构建,如安全和权限参考 [资源,54] 中定义的那样。
Linux 用户 ID 运行多个应用程序,前提是这些应用程序已正确签名和构建,如安全和权限参考 [资源,54] 中定义的那样。
安全和权限参考 [资源,54] 中定义的那样。
9.3. 文件系统权限
设备实现必须支持 Android 文件访问权限模型,如安全和权限参考 [资源,54] 中定义的那样。
安全和权限参考 [资源,54] 中定义的那样。
9.4. 备用执行环境
设备实现可以包括运行时环境,这些环境使用 Dalvik 虚拟机或本机代码以外的其他软件或技术来执行应用程序。
使用 Dalvik 虚拟机或本机代码以外的其他软件或技术来执行应用程序。
但是,此类备用执行环境不得损害 Android 安全模型或已安装的 Android 应用程序的安全性,如本节中所述。
Android 安全模型或已安装的 Android 应用程序的安全性,如本节中所述。
在本节中所述。
备用运行时本身必须是 Android 应用程序,并遵守标准 Android 安全模型,如第 9 节其他地方所述。
标准 Android 安全模型,如第 9 节其他地方所述。
备用运行时不得被授予访问权限,以访问未在运行时的 AndroidManifest.xml 文件中通过 <uses-permission> 机制请求的受权限保护的资源。
未在运行时的 AndroidManifest.xml 文件中通过 <uses-permission> 机制请求的受权限保护的资源。
permission> 机制请求的受权限保护的资源。
备用运行时不得允许应用程序使用受限于系统应用程序的 Android 权限保护的功能。
受限于系统应用程序的 Android 权限保护的功能。
备用运行时必须遵守 Android 沙箱模型。具体而言,备用运行时应通过 PackageManager 将应用安装到单独的 Android 沙箱中(即 Linux 用户 ID 等)。
Linux 用户 ID 等)。
Android 沙箱中(即 Linux 用户 ID 等)。
备用运行时可以提供一个由使用备用运行时的所有应用程序共享的单个 Android 沙箱
备用运行时可以提供一个由使用备用运行时的所有应用程序共享的单个 Android 沙箱
备用运行时和使用备用运行时安装的应用程序不得重用设备上安装的任何其他应用程序的沙箱,除非通过共享用户 ID 和签名证书的标准 Android 机制。
除非通过共享用户 ID 和签名证书的标准 Android 机制。
共享用户 ID 和签名证书的标准 Android 机制。
备用运行时不得启动、授予或被授予访问权限,以访问与其他 Android 应用程序相对应的沙箱
与其他 Android 应用程序相对应的沙箱
备用运行时不得以超级用户(root)或任何其他用户 ID 的任何特权启动、被授予或授予给其他应用程序。
超级用户(root)或任何其他用户 ID 的任何特权启动、被授予或授予给其他应用程序。
备用运行时的 .apk 文件可以包含在设备实现的系统映像中,但必须使用与用于签名设备实现中包含的其他应用程序的密钥不同的密钥进行签名。
签名设备实现中包含的其他应用程序的密钥不同的密钥进行签名。
应用程序的密钥不同的密钥进行签名。
安装应用程序时,备用运行时必须获得用户对应用程序使用的 Android 权限的同意。也就是说,如果应用程序需要使用设备资源,而该资源具有相应的 Android 权限(例如相机、GPS 等),则备用运行时必须告知用户该应用程序将能够访问该资源。
使用设备资源,而该资源具有相应的 Android 权限(例如相机、GPS 等),则备用运行时必须告知用户该应用程序将能够访问该资源。
Android 权限(例如相机、GPS 等),则备用运行时必须告知用户该应用程序将能够访问该资源。
资源(例如相机、GPS 等),则备用运行时必须告知用户该应用程序将能够访问该资源。
资源。如果运行时环境不以这种方式记录应用程序功能,则运行时环境必须在安装任何使用该运行时的应用程序时,列出运行时本身拥有的所有权限。
运行时环境必须在安装任何使用该运行时的应用程序时,列出运行时本身拥有的所有权限。
运行时本身拥有的所有权限。
10. 软件兼容性测试
设备实现必须通过本节中描述的所有测试。
但是,请注意,没有软件包测试是完全全面的。因此,强烈建议设备实现者尽可能少地更改 Android 4.1 的参考和首选实现,该实现可从 Android 开源项目获得。这将最大程度地降低引入错误(这些错误会产生不兼容性,需要返工和潜在的设备更新)的风险。
强烈建议设备实现者尽可能少地更改 Android 4.1 的参考和首选实现,该实现可从 Android 开源项目获得。这将最大程度地降低引入错误(这些错误会产生不兼容性,需要返工和潜在的设备更新)的风险。
Android 4.1 的参考和首选实现,该实现可从 Android 开源项目获得。这将最大程度地降低引入错误(这些错误会产生不兼容性,需要返工和潜在的设备更新)的风险。
Android 开源项目获得。这将最大程度地降低引入错误(这些错误会产生不兼容性,需要返工和潜在的设备更新)的风险。
错误(这些错误会产生不兼容性,需要返工和潜在的设备更新)的风险。
更新)的风险。
10.1. 兼容性测试套件
设备实现必须通过 Android 兼容性测试套件 (CTS) [资源,2],该套件可从 Android 开源项目获得,并使用设备上的最终发布软件。
Android 开源项目获得,并使用设备上的最终发布软件。
此外,设备实现者应尽可能多地使用 Android 开源树中的参考实现,并且必须确保在 CTS 中存在歧义以及对参考源代码的任何重新实现的情况下保持兼容性。
Android 开源树中的参考实现,并且必须确保在 CTS 中存在歧义以及对参考源代码的任何重新实现的情况下保持兼容性。
CTS 中存在歧义以及对参考源代码的任何重新实现的情况下保持兼容性。
参考源代码的任何重新实现的情况下保持兼容性。
CTS 旨在在实际设备上运行。与任何软件一样,CTS 本身可能包含错误。CTS 的版本将独立于此兼容性定义进行版本控制,并且可能会为 Android 4.1 发布 CTS 的多个修订版本。设备实现必须通过设备软件完成时可用的最新 CTS 版本。
CTS 本身可能包含错误。CTS 的版本将独立于此兼容性定义进行版本控制,并且可能会为 Android 4.1 发布 CTS 的多个修订版本。设备实现必须通过设备软件完成时可用的最新 CTS 版本。
兼容性定义进行版本控制,并且可能会为 Android 4.1 发布 CTS 的多个修订版本。设备实现必须通过设备软件完成时可用的最新 CTS 版本。
设备软件完成时可用的最新 CTS 版本。
软件完成时可用的最新 CTS 版本。
10.2. CTS 验证程序
设备实现必须正确执行 CTS 验证程序中的所有适用案例。CTS 验证程序包含在兼容性测试套件中,旨在由人工操作员运行,以测试无法通过自动化系统测试的功能,例如摄像头和传感器的正确功能。
CTS 验证程序包含在兼容性测试套件中,旨在由人工操作员运行,以测试无法通过自动化系统测试的功能,例如摄像头和传感器的正确功能。
自动化系统测试的功能,例如摄像头和传感器的正确功能。
摄像头和传感器的正确功能。
CTS 验证程序具有许多硬件类型的测试,包括一些可选硬件。设备实现必须通过其拥有的硬件的所有测试;例如,如果设备拥有加速度计,则必须正确执行 CTS 验证程序中的加速度计测试案例。此兼容性定义文档中注明为可选的功能的测试案例可以跳过或省略。
其拥有的硬件的所有测试;例如,如果设备拥有加速度计,则必须正确执行 CTS 验证程序中的加速度计测试案例。此兼容性定义文档中注明为可选的功能的测试案例可以跳过或省略。
例如,如果设备拥有加速度计,则必须正确执行 CTS 验证程序中的加速度计测试案例。此兼容性定义文档中注明为可选的功能的测试案例可以跳过或省略。
此兼容性定义文档中注明为可选的功能的测试案例可以跳过或省略。
可以跳过或省略。
每个设备和每个版本都必须正确运行 CTS 验证程序,如上所述。但是,由于许多版本非常相似,因此不期望设备实现者在仅在微不足道的方式上不同的版本上显式运行 CTS 验证程序。具体而言,与已通过 CTS 验证程序的实现仅因包含的语言环境、品牌等集合而不同的设备实现可以省略 CTS 验证程序测试。
由于许多版本非常相似,因此不期望设备实现者在仅在微不足道的方式上不同的版本上显式运行 CTS 验证程序。具体而言,与已通过 CTS 验证程序的实现仅因包含的语言环境、品牌等集合而不同的设备实现可以省略 CTS 验证程序测试。
仅在微不足道的方式上不同的版本上显式运行 CTS 验证程序。具体而言,与已通过 CTS 验证程序的实现仅因包含的语言环境、品牌等集合而不同的设备实现可以省略 CTS 验证程序测试。
与已通过 CTS 验证程序的实现仅因包含的语言环境、品牌等集合而不同的设备实现可以省略 CTS 验证程序测试。
CTS 验证程序测试。
测试。
10.3. 参考应用程序
设备实现者必须使用以下开源应用程序测试实现兼容性:
设备实现者必须使用以下开源应用程序测试实现兼容性:
“Android 应用”应用程序 [资源,55]
Replica Island(可在 Android Market 中获得)
上述每个应用程序都必须在实现上正确启动和运行,才能将该实现视为兼容。
上述每个应用程序都必须在实现上正确启动和运行,才能将该实现视为兼容。
11. 可更新的软件
设备实现必须包含一种机制来替换整个系统软件。该机制无需执行“实时”升级 - 也就是说,可能需要重启设备。
该机制无需执行“实时”升级 - 也就是说,可能需要重启设备。
可能需要重启设备。
可以使用任何方法,前提是它可以替换设备上预安装的整个软件。例如,以下任何方法都将满足此要求:
可以使用任何方法,前提是它可以替换设备上预安装的整个软件。例如,以下任何方法都将满足此要求:
此要求:
通过重启进行离线更新的无线 (OTA) 下载
通过 USB 从主机 PC 进行“ tethered”更新
通过重启和从可移动存储上的文件进行更新的“离线”更新
使用的更新机制必须支持在不擦除用户数据的情况下进行更新。也就是说,更新机制必须保留应用程序私有数据和应用程序共享数据。请注意,上游 Android 软件包括满足此要求的更新机制。
也就是说,更新机制必须保留应用程序私有数据和应用程序共享数据。请注意,上游 Android 软件包括满足此要求的更新机制。
应用程序共享数据。请注意,上游 Android 软件包括满足此要求的更新机制。
此要求的更新机制。
如果在设备发布后但在其合理的产品寿命期内(该寿命期与 Android 兼容性团队协商确定)发现设备实现中存在影响第三方应用程序兼容性的错误,则设备实现者必须通过可应用的软件更新来纠正该错误,如刚刚描述的机制所示。
合理的产品寿命期内(该寿命期与 Android 兼容性团队协商确定)发现设备实现中存在影响第三方应用程序兼容性的错误,则设备实现者必须通过可应用的软件更新来纠正该错误,如刚刚描述的机制所示。
影响第三方应用程序兼容性的错误,则设备实现者必须通过可应用的软件更新来纠正该错误,如刚刚描述的机制所示。
可应用的软件更新来纠正该错误,如刚刚描述的机制所示。
如刚刚描述的机制所示。
12. 联系我们
您可以联系文档作者 compatibility@android.com 以获得澄清,并提出您认为文档未涵盖的任何问题。
您可以联系文档作者 compatibility@android.com 以获得澄清,并提出您认为文档未涵盖的任何问题。
附录 A - 蓝牙测试程序
兼容性测试套件包括涵盖 Android RFCOMM 蓝牙 API 的基本操作的用例。
兼容性测试套件包括涵盖 Android RFCOMM 蓝牙 API 的基本操作的用例。
设备之间的通信协议,因此无法通过在单个设备上运行的单元测试进行完全测试。
因此,设备实现还必须通过下面描述的人工操作的蓝牙测试程序。
因此,设备实现还必须通过下面描述的人工操作的蓝牙测试程序。
测试程序基于 Android 开源项目树中包含的 BluetoothChat 示例应用。该程序需要两个设备:
Android 开源项目树中包含的 BluetoothChat 示例应用。该程序需要两个设备:
运行要测试的软件版本的候选设备实现
一个已知的兼容的单独设备实现,以及来自被测试的设备实现的型号 - 即“已知良好”的设备实现
来自被测试的设备实现的型号 - 即“已知良好”的设备实现
设备实现
以下测试程序将这些设备称为“候选”设备和“已知良好”设备。
以下测试程序将这些设备称为“候选”设备和“已知良好”设备。
设置和安装
1. 通过 Android 源代码树中的 'make samples' 构建 BluetoothChat.apk
1. 通过 Android 源代码树中的 'make samples' 构建 BluetoothChat.apk
2. 在已知良好设备上安装 BluetoothChat.apk
3. 在候选设备上安装 BluetoothChat.apk
通过应用测试蓝牙控制
1. 在蓝牙禁用的情况下,在候选设备上启动 BluetoothChat
2. 验证候选设备是否打开蓝牙,或提示用户使用对话框打开蓝牙
测试配对和通信
1. 在两个设备上启动蓝牙聊天应用
2. 从 BluetoothChat 中使已知良好设备可被发现(使用菜单)
从 BluetoothChat 中使已知良好设备可被发现(使用菜单)
3. 在候选设备上,从 BluetoothChat 中扫描蓝牙设备(使用菜单)并与已知良好设备配对
(使用菜单)并与已知良好设备配对
4. 从每个设备发送 10 条或更多消息,并验证另一个设备是否正确接收到它们
从每个设备发送 10 条或更多消息,并验证另一个设备是否正确接收到它们
5. 按 Home 键关闭两个设备上的 BluetoothChat 应用
6. 使用设备设置应用,取消每个设备与另一个设备的配对
使用设备设置应用,取消每个设备与另一个设备的配对
反向测试配对和通信
1. 在两个设备上启动蓝牙聊天应用。
2. 从 BluetoothChat 中使候选设备可被发现(使用菜单)。
从 BluetoothChat 中使候选设备可被发现(使用菜单)。
3. 在已知良好设备上,从 BluetoothChat 中扫描蓝牙设备(使用菜单)并与候选设备配对。
(使用菜单)并与候选设备配对。
4. 从每个设备发送 10 条或更多消息,并验证另一个设备是否正确接收到它们。
从每个设备发送 10 条或更多消息,并验证另一个设备是否正确接收到它们。
5. 通过反复按返回键回到启动器,关闭两个设备上的蓝牙聊天应用。
通过反复按返回键回到启动器,关闭两个设备上的蓝牙聊天应用。
重新启动测试
1. 在两个设备上重新启动蓝牙聊天应用。
2. 从每个设备发送 10 条或更多消息,并验证另一个设备
从每个设备发送 10 条或更多消息,并验证另一个设备是否正确接收到它们。
注意:以上测试中的某些案例通过使用 Home 键结束测试部分,而某些案例使用 Back 键。这些测试并非冗余,也不是可选的:目的是验证蓝牙 API 和堆栈在显式终止活动(通过用户按返回键,这将调用 finish())和隐式发送到后台(通过用户按 Home 键)时都能正确工作。每个测试序列都必须按描述执行。
也不是可选的:目的是验证蓝牙 API 和堆栈在显式终止活动(通过用户按返回键,这将调用 finish())和隐式发送到后台(通过用户按 Home 键)时都能正确工作。每个测试序列都必须按描述执行。
目的是验证蓝牙 API 和堆栈在显式终止活动(通过用户按返回键,这将调用 finish())和隐式发送到后台(通过用户按 Home 键)时都能正确工作。每个测试序列都必须按描述执行。
隐式发送到后台(通过用户按 Home 键)时都能正确工作。每个测试序列都必须按描述执行。
每个测试序列都必须按描述执行。
按描述执行。