修訂版本 1
上次更新日期:2013 年 7 月 23 日
Copyright © 2013, Google Inc. All rights reserved.
compatibility@android.com
目錄
2. 資源
3. 軟體
3.2. 軟體 API 相容性
3.3. 本機 API 相容性
3.4. 網頁相容性
3.5. API 行為相容性
3.6. API 命名空間
3.7. 虛擬機器相容性
3.8. 使用者介面相容性
3.8.2. 小工具
3.8.3. 通知
3.8.4. 搜尋
3.8.5. 吐司
3.8.6. 主題
3.8.7. 動態桌布
3.8.8. 最近應用程式顯示畫面
3.8.9. 輸入管理
3.8.10. 透過螢幕鎖定畫面控制媒體
3.8.11. Dreams
3.10 無障礙設計
3.11 文字轉語音
5. 多媒體相容性
6. 開發人員工具和選項相容性
7. 硬體相容性
7.1.2. 顯示指標
7.1.3. 螢幕方向
7.1.4. 2D 和 3D 圖形加速功能
7.1.5. 舊版應用程式相容性模式
7.1.6. 螢幕類型
7.1.7. Screen Technology
7.1.8. 外接螢幕
7.3. 感應器
7.4. 資料連線
7.5. 攝影機
7.6. 記憶體與儲存空間
7.7. USB
9. 安全性模型相容性
10. 軟體相容性測試
11. 可更新軟體
12. 聯絡我們
1. 簡介
本文件列舉裝置必須符合的條件,才能與 Android 4.3 相容。
使用「必須」、「不得」、「必要」、「應」、「應當」、「不得」、「應」、「不得」、「建議」、「可」和「選用」等詞彙,是根據 RFC2119 中定義的 IETF 標準 [資源, 1]。
在本文件中,「裝置實作者」或「實作者」是指開發搭載 Android 4.3 的硬體/軟體解決方案的個人或機構。「裝置實作」或「實作」是指所開發的硬體/軟體解決方案。
裝置實作必須符合本相容性定義中列出的規定,包括透過參考納入的任何文件,才能視為與 Android 4.3 相容。
如果這個定義或 第 10 節所述的軟體測試未明確說明或不完整,則裝置導入者有責任確保與現有導入作業的相容性。
因此,Android 開放原始碼計畫 [Resources, 3] 是 Android 的參考和偏好實作項目。強烈建議裝置實作者盡可能以「上游」原始碼為基礎,從 Android 開放原始碼計畫取得原始碼。雖然部分元件理論上可由其他實作項目取代,但我們強烈建議您不要這麼做,因為通過軟體測試的難度會大幅提高。實作者有責任確保與標準 Android 實作項目的行為完全相容,包括 Compatibility Test Suite 和其他項目。最後,請注意,本文件明文禁止某些元件替換和修改作業。
2. 資源
- IETF RFC2119 需求等級:http://www.ietf.org/rfc/rfc2119.txt
- Android 相容性計畫簡介:http://source.android.com/docs/compatibility/index.html
- Android 開放原始碼計畫:http://source.android.com/
- API 定義和說明文件:http://developer.android.com/reference/packages.html
- Android 權限參考資料:http://developer.android.com/reference/android/Manifest.permission.html
- android.os.Build 參考資料:http://developer.android.com/reference/android/os/Build.html
- Android 4.3 允許使用的版本字串:http://source.android.com/docs/compatibility/4.3/versions.html
- Renderscript:http://developer.android.com/guide/topics/graphics/renderscript.html
- 硬體加速:http://developer.android.com/guide/topics/graphics/hardware-accel.html
- android.webkit.WebView 類別:http://developer.android.com/reference/android/webkit/WebView.html
- HTML5:http://www.whatwg.org/specs/web-apps/current-work/multipage/
- HTML5 離線功能:http://dev.w3.org/html5/spec/Overview.html#offline
- HTML5 影片標記:http://dev.w3.org/html5/spec/Overview.html#video
- HTML5/W3C 地理位置 API:http://www.w3.org/TR/geolocation-API/
- HTML5/W3C 網路資料庫 API:http://www.w3.org/TR/webdatabase/
- HTML5/W3C IndexedDB API:http://www.w3.org/TR/IndexedDB/
- Dalvik 虛擬機器規格:可在 Android 原始碼的 dalvik/docs 中找到
- AppWidget:http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
- 通知:http://developer.android.com/guide/topics/ui/notifiers/notifications.html
- 應用程式資源:http://code.google.com/android/reference/available-resources.html
- 狀態列圖示樣式指南:http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
- 搜尋管理工具:http://developer.android.com/reference/android/app/SearchManager.html
- Toast:http://developer.android.com/reference/android/widget/Toast.html
- 主題:http://developer.android.com/guide/topics/ui/themes.html
- R.style 類別:http://developer.android.com/reference/android/R.style.html
- 動態桌布:https://android-developers.googleblog.com/2010/02/live-wallpapers.html
- Android 裝置管理:http://developer.android.com/guide/topics/admin/device-admin.html
- DevicePolicyManager 參考資料:http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
- Android Accessibility Service API:http://developer.android.com/reference/android/accessibilityservice/package-summary.html
- Android Accessibility API:http://developer.android.com/reference/android/view/accessibility/package-summary.html
- Eyes Free 專案:http://code.google.com/p/eyes-free
- Text-To-Speech API:http://developer.android.com/reference/android/speech/tts/package-summary.html
- 參考工具說明文件 (適用於 ADB、AAPT、DDMS、Systrace):http://developer.android.com/guide/developing/tools/index.html
- Android 應用程式檔案說明:http://developer.android.com/guide/topics/fundamentals.html
- 資訊清單檔案:http://developer.android.com/guide/topics/manifest/manifest-intro.html
- Monkey 測試工具:https://developer.android.com/studio/test/other-testing-tools/monkey
- Android android.content.pm.PackageManager 類別和硬體功能清單:http://developer.android.com/reference/android/content/pm/PackageManager.html
- 支援多螢幕:http://developer.android.com/guide/practices/screens_support.html
- android.util.DisplayMetrics:http://developer.android.com/reference/android/util/DisplayMetrics.html
- android.content.res.Configuration:http://developer.android.com/reference/android/content/res/Configuration.html
- android.hardware.SensorEvent:http://developer.android.com/reference/android/hardware/SensorEvent.html
- Bluetooth API:http://developer.android.com/reference/android/bluetooth/package-summary.html
- NDEF 推送通訊協定:http://source.android.com/docs/compatibility/ndef-push-protocol.pdf
- MIFARE MF1S503X:http://www.nxp.com/documents/data_sheet/MF1S503x.pdf
- MIFARE MF1S703X:http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
- MIFARE MF0ICU1:http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf
- MIFARE MF0ICU2:http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf
- MIFARE AN130511:http://www.nxp.com/documents/application_note/AN130511.pdf
- MIFARE AN130411:http://www.nxp.com/documents/application_note/AN130411.pdf
- 相機方向 API:http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
- 相機:http://developer.android.com/reference/android/hardware/Camera.html
- Android Open Accessories:http://developer.android.com/guide/topics/usb/accessory.html
- USB 主機 API:http://developer.android.com/guide/topics/usb/host.html
- Android 安全性和權限參考資料:http://developer.android.com/guide/topics/security/security.html
- Android 版應用程式:http://code.google.com/p/apps-for-android
- Android DownloadManager:http://developer.android.com/reference/android/app/DownloadManager.html
- Android 檔案傳輸應用程式:http://www.android.com/filetransfer
- Android 媒體格式:http://developer.android.com/guide/appendix/media-formats.html
- HTTP 即時串流草案通訊協定:http://tools.ietf.org/html/draft-pantos-http-live-streaming-03
- NFC 連線移交:http://www.nfc-forum.org/specs/spec_list/#conn_handover
- 使用 NFC 進行藍牙安全簡易配對:http://www.nfc-forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf
- Wifi 多播 API:http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
- Action Assist:http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST
- USB 充電規格:http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf
- Android Beam:http://developer.android.com/guide/topics/nfc/nfc.html
- Android USB 音訊:http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
- Android NFC 分享設定:http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
- Wifi Direct (Wifi P2P):http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
- 螢幕鎖定畫面和主畫面小工具:http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
- UserManager 參考資料:http://developer.android.com/reference/android/os/UserManager.html
- 外部儲存空間參考資料:https://source.android.com/docs/core/storage
- External Storage API:http://developer.android.com/reference/android/os/Environment.html
- 簡訊簡碼:http://en.wikipedia.org/wiki/Short_code
- 媒體遙控控制器用戶端:http://developer.android.com/reference/android/media/RemoteControlClient.html
- 螢幕管理工具:http://developer.android.com/reference/android/hardware/display/DisplayManager.html
- 夢境:http://developer.android.com/reference/android/service/dreams/DreamService.html
- Android 應用程式開發相關設定:http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS
- 相機:http://developer.android.com/reference/android/hardware/Camera.Parameters.html
- EGL 擴充功能-EGL_ANDROID_RECORDABLE:http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt
- Motion Event API:http://developer.android.com/reference/android/view/MotionEvent.html
- 觸控輸入設定:http://source.android.com/docs/core/interaction/input/touch-devices.html
這些資源多半是直接或間接從 Android 4.3 SDK 衍生而來,功能上與該 SDK 說明文件中的資訊相同。無論何時,如果此相容性定義或相容性測試套件與 SDK 說明文件不一致,SDK 說明文件都會視為權威來源。上述參考資料中提供的任何技術細節,都會視為本相容性定義的一部分。
3. 軟體
3.1. 代管 API 相容性
代管 (以 Dalvik 為基礎) 執行環境是 Android 應用程式的主要載具。Android 應用程式設計介面 (API) 是指向在受管理的 VM 環境中執行的應用程式公開的 Android 平台介面組合。裝置實作項目必須提供完整實作項目,包括所有已記錄的行為,以及 Android 4.3 SDK 公開的任何已記錄 API [Resources, 4]。
裝置實作不得省略任何受管理的 API、變更 API 介面或簽章、偏離已記錄的行為,或包含無操作,除非本相容性定義明確允許。
這個相容性定義允許某些類型的硬體,讓裝置實作項目略過 Android 所附帶的 API。在這種情況下,API 必須仍會出現,並以合理的方式運作。如要瞭解這項情境的具體規定,請參閱第 7 節。
3.2. 軟性 API 相容性
除了第 3.1 節所述的受管理 API 外,Android 也包含重要的執行階段專屬「軟性」API,以意圖、權限和無法在應用程式編譯期間強制執行的 Android 應用程式類似層面等形式呈現。
3.2.1. 權限
裝置實作者必須支援並強制執行所有權限常數,如「權限參考資料」頁面所述 [資源, 5]。請注意,第 9 節列出與 Android 安全性模型相關的其他規定。
3.2.2. 建構參數
Android API 在 android.os.Build
類別 [Resources, 6] 上包含多個常數,用於描述目前的裝置。為在各裝置實作中提供一致且有意義的值,下表針對這些值的格式列出額外限制,裝置實作必須符合這些限制。
參數 | 備註 |
android.os.Build.VERSION.RELEASE | 目前執行的 Android 系統版本,以人類可讀的格式表示。這個欄位必須包含 [Resources, 7] 中定義的字串值。 |
android.os.Build.VERSION.SDK | 目前執行的 Android 系統版本,格式可供第三方應用程式程式碼存取。對於 Android 4.3,這個欄位必須設為整數值 18。 |
android.os.Build.VERSION.SDK_INT | 目前執行的 Android 系統版本,格式可供第三方應用程式程式碼存取。對於 Android 4.3,這個欄位必須設為整數值 18。 |
android.os.Build.VERSION.INCREMENTAL | 裝置實作者選擇的值,用於指定目前執行中 Android 系統的特定版本,並以人類可讀的格式呈現。這個值絕對不可用於向使用者提供的不同版本。這個欄位的常見用途是指出系統用來產生建構項目的建構編號或來源控管變更 ID。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。 |
android.os.Build.BOARD | 裝置實作者選擇的值,用來識別裝置使用的特定內部硬體,格式為人類可讀。這個欄位的可能用途是指出為裝置供電的板子特定修訂版本。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.BRAND | 裝置實作者選擇的值,用於以人類可讀的格式,標示出裝置製造商的公司、機構、個人等名稱。這個欄位的可能用途是指出販售裝置的原始設備製造商和/或電信業者。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.CPU_ABI | 原生程式碼的指令集名稱 (CPU 類型 + ABI 慣例)。請參閱「第 3.3 節:原生 API 相容性」。 |
android.os.Build.CPU_ABI2 | 原生程式碼的第二個指令集名稱 (CPU 類型 + ABI 慣例)。請參閱「第 3.3 節:原生 API 相容性」。 |
android.os.Build.DEVICE | 裝置實作者選擇的值,用於識別裝置主體 (有時稱為「工業設計」) 的特定設定或修訂版本。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.FINGERPRINT | 用於唯一識別此版本的字串。應以人類可讀的方式呈現。必須遵循以下範本:
$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS) 例如: acme/mydevice/generic:4.3/JRN53/3359:userdebug/test-keys 指紋不得包含空白字元。如果上述範本中包含其他含有空白字元的欄位,則必須在版本指紋中以其他字元取代,例如底線字元 ("_")。這個欄位的值必須能以 7 位元 ASCII 編碼。 |
android.os.Build.HARDWARE | 硬體名稱 (來自核心命令列或 /proc)。應以人類可讀的格式呈現。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.HOST | 以人類可讀格式,提供可明確識別建構所在主機的字串。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。 |
android.os.Build.ID | 裝置實作者選擇的 ID,用於參照特定版本,並以人類可讀的格式呈現。這個欄位可以與 android.os.Build.VERSION.INCREMENTAL 相同,但應為使用者區分軟體版本時可充分利用的值。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.MANUFACTURER | 產品原始設備製造商 (OEM) 的商業名稱。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。 |
android.os.Build.MODEL | 裝置實作者選擇的值,其中包含使用者所知的裝置名稱。這應與向終端使用者行銷和銷售裝置時使用的名稱相同。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。 |
android.os.Build.PRODUCT | 裝置實作者選擇的值,其中包含產品 (SKU) 的開發名稱或代碼名稱。必須是人類可讀的形式,但不一定是供使用者查看。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.SERIAL | 硬體序號 (如有)。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^([a-zA-Z0-9]{0,20})$" 。 |
android.os.Build.TAGS | 裝置實作者選擇的標記清單,以半形逗號分隔,可進一步區分版本。例如「unsigned,debug」。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.TIME | 代表建構作業發生時間的時間戳記值。 |
android.os.Build.TYPE | 裝置實作者選擇的值,可指定建構作業的執行階段設定。這個欄位應包含下列三種常見 Android 執行階段設定的其中一個值:「user」、「userdebug」或「eng」。這個欄位的值必須能以 7 位元 ASCII 編碼,且符合規則運算式 "^[a-zA-Z0-9.,_-]+$" 。 |
android.os.Build.USER | 產生版本的使用者 (或自動化使用者) 的名稱或使用者 ID。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。 |
3.2.3. 意圖相容性
裝置實作項目必須遵循 Android 的鬆散耦合 Intent 系統,如以下各節所述。「遵循」是指裝置實作者必須提供 Android 活動或服務,指定相符的意圖篩選器,並為每個指定的意圖模式繫結及實作正確的行為。
3.2.3.1. 核心應用程式意圖
Android 上游專案定義了許多核心應用程式,例如聯絡人、日曆、相片庫、音樂播放器等。裝置導入者可以將這些應用程式替換為其他版本。
不過,任何這類替代版本都必須遵循上游專案提供的相同意圖模式。舉例來說,如果裝置含有其他音樂播放器,則仍須遵循第三方應用程式發出的 Intent 模式,才能選取歌曲。
以下應用程式屬於核心 Android 系統應用程式:
- 桌上時鐘
- Browser
- 日曆
- 聯絡人
- 圖庫
- GlobalSearch
- 啟動器
- 音樂
- 設定
核心 Android 系統應用程式包含各種活動或服務元件,這些元件被視為「公開」。也就是說,「android:exported」屬性可能不存在,或可能具有「true」值。
對於在某個核心 Android 系統應用程式中定義的每個活動或服務,如果該服務未透過 android:exported 屬性標示為非公開 (值為「false」),則裝置實作必須包含與核心 Android 系統應用程式相同的意圖篩選器模式的相同類型元件。
換句話說,裝置實作項目可以取代核心 Android 系統應用程式;不過,如果是這種情況,裝置實作項目就必須支援所有 Intent 模式,也就是每個核心 Android 系統應用程式所定義的 Intent 模式。
3.2.3.2. 意圖覆寫
由於 Android 是可擴充的平台,因此裝置實作必須允許第三方應用程式覆寫第 3.2.3.2 節中所述的每個 Intent 模式。上游 Android 開放原始碼實作內容預設允許這項功能;裝置導入者不得將特殊權限附加至系統應用程式使用這些 Intent 模式,或禁止第三方應用程式繫結至這些模式並接管控制權。這項禁止行為包括但不限於停用「選擇器」使用者介面,該介面可讓使用者在多個應用程式中選擇,這些應用程式都會處理相同的意圖模式。
不過,如果預設活動為資料 URI 提供更明確的篩選器,裝置實作可能會為特定 URI 模式 (例如 http://play.google.com) 提供預設活動。舉例來說,意圖篩選器指定的資料 URI「http://www.android.com」比瀏覽器篩選器的「http://」更為明確。裝置實作項目必須提供使用者介面,讓使用者修改意圖的預設活動。
3.2.3.3. 意圖命名空間
裝置實作不得包含任何 Android 元件,這些元件會使用 android.* 或 com.android.* 命名空間中的 ACTION、CATEGORY 或其他關鍵字串,遵循任何新的意圖或廣播意圖模式。裝置導入者不得在屬於其他機構的套件空間中,使用 ACTION、CATEGORY 或其他關鍵字串,納入任何遵循新意圖或廣播意圖模式的 Android 元件。裝置實作者不得變更或擴充第 3.2.3.1 節所列核心應用程式使用的任何 Intent 模式。裝置實作可能會包含意圖模式,使用與其自身組織明確且明顯相關的命名空間。
這項禁止規定與第 3.6 節中針對 Java 語言類別所指定的規定類似。
3.2.3.4. 廣播意圖
第三方應用程式會依賴平台發布特定意圖,以便通知硬體或軟體環境的變更。相容的 Android 裝置必須廣播公開廣播意圖,以回應適當的系統事件。如要瞭解廣播意圖,請參閱 SDK 說明文件。
3.3. 原生 API 相容性
3.3.1 應用程式二進位檔介面
在 Dalvik 中執行的受管理程式碼可以呼叫應用程式 .apk 檔案中提供的機器碼,做為為適當裝置硬體架構編譯的 ELF .so 檔案。由於原生程式碼高度依賴基礎處理器技術,Android 會在 Android NDK 的 docs/CPU-ARCH-ABIS.html
檔案中定義多個應用程式二進位檔介面 (ABI)。如果裝置實作與一或多個定義的 ABI 相容,則應實作與 Android NDK 的相容性,如下所示。
如果裝置實作項目支援 Android ABI,則會:
- 必須支援在受管理環境中執行的程式碼,以便使用標準 Java Native Interface (JNI) 語意,呼叫原生程式碼
- 必須與下列清單中的每個必要程式庫相容 (即標頭相容),並與 ABI 相容 (二進位檔相容)
- 必須透過
android.os.Build.CPU_ABI
API 準確回報裝置支援的原生應用程式二進位檔介面 (ABI) - 請務必只在
docs/CPU-ARCH-ABIS.txt
檔案中,回報 Android NDK 最新版本中記錄的 ABI。 - 應使用上游 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)
- libGLESv3.so (OpenGL ES 3.0)
- libEGL.so (原生 OpenGL 途徑管理)
- libjnigraphics.so
- libOpenSLES.so (OpenSL ES 1.0.1 音訊支援)
- libOpenMAXAL.so (支援 OpenMAX AL 1.0.1)
- libandroid.so (原生 Android 活動支援)
- 支援 OpenGL,如下所述
請注意,日後推出的 Android NDK 版本可能會支援其他 ABI。如果裝置實作不相容於現有的預先定義 ABI,則絕對不應回報支援任何 ABI。
請注意,裝置實作項目必須包含 libGLESv3.so,且必須以符號連結 (symbolic) 連結至 libGLESv2.so。在宣告支援 OpenGL ES 3.0 的裝置實作項目中,libGLESv2.so 除了必須匯出 OpenGL ES 2.0 函式符號,也必須匯出 OpenGL ES 3.0 函式符號。
原生程式碼的相容性很難處理。因此,我們再次強調,強烈建議裝置實作者使用上述程式庫的上游實作項目,以確保相容性。
3.4. 網頁相容性
3.4.1. WebView 相容性
Android 開放原始碼實作會使用 WebKit 轉譯引擎來實作 android.webkit.WebView
[Resources, 10]。由於無法為網路轉譯系統開發完整的測試套件,因此裝置實作者必須在 WebView 實作中使用 WebKit 的特定上游版本。具體違規事項如下:
- 裝置實作項目的
android.webkit.WebView
實作項目,必須以 Android 4.3 上游 Android 開放原始碼樹狀結構的 534.30 WebKit 版本為基礎。此版本包含 WebView 的特定功能和安全性修正項目。裝置導入者可以為 WebKit 實作自訂項目,但任何這類自訂項目都不得變更 WebView 的行為,包括轉譯行為。 - WebView 回報的使用者代理程式字串必須採用下列格式:
Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
- $(VERSION) 字串的值必須與
android.os.Build.VERSION.RELEASE
的值相同 - $(LOCALE) 字串的值應遵循 ISO 國家/地區代碼和語言代碼慣例,且應參照裝置目前設定的語言代碼
- $(MODEL) 字串的值必須與
android.os.Build.MODEL
的值相同 - $(BUILD) 字串的值必須與
android.os.Build.ID
的值相同 - 裝置實作可能會省略使用者代理程式字串中的
Mobile
- $(VERSION) 字串的值必須與
WebView 元件應盡可能支援 HTML5 [資源, 11]。裝置實作項目至少必須支援 WebView 中與 HTML5 相關聯的下列各項 API:
- 應用程式快取/離線作業 [Resources, 12]
- <video> 標記 [資源,13]
- 地理位置 [Resources, 14]
此外,裝置實作方式必須支援 HTML5/W3C WebStorage API [Resources, 15],並應支援 HTML5/W3C IndexedDB API [Resources, 16]。請注意,隨著網路開發標準機構轉向偏好 IndexedDB 而非 webstorage,IndexedDB 預計將成為日後 Android 版本的必要元件。
如同所有 JavaScript API,HTML5 API 在 WebView 中的預設狀態為停用,除非開發人員透過一般 Android API 明確啟用。
3.4.2. 瀏覽器相容性
裝置實作項目必須包含獨立的瀏覽器應用程式,供一般使用者瀏覽網頁。獨立瀏覽器可採用 WebKit 以外的瀏覽器技術。不過,即使使用其他瀏覽器應用程式,提供給第三方應用程式的 android.webkit.WebView
元件仍必須以 WebKit 為基礎,如第 3.4.1 節所述。
實作可能會在獨立的瀏覽器應用程式中提供自訂使用者代理程式字串。
獨立瀏覽器應用程式 (無論是基於上游 WebKit 瀏覽器應用程式,還是第三方替代品) 應盡可能支援 HTML5 [資源, 11]。裝置實作項目至少必須支援下列與 HTML5 相關的 API:
- 應用程式快取/離線作業 [Resources, 12]
- <video> 標記 [資源,13]
- 地理位置 [Resources, 14]
此外,裝置實作方式必須支援 HTML5/W3C WebStorage API [Resources, 15],並應支援 HTML5/W3C IndexedDB API [Resources, 16]。請注意,隨著網路開發標準機構轉向偏好 IndexedDB 而非 webstorage,IndexedDB 預計將成為日後 Android 版本的必要元件。
3.5. API 行為相容性
每種 API 類型 (受管理、軟體、原生和網頁) 的行為都必須與上游 Android 開放原始碼計畫的偏好實作相符 [Resources, 3]。以下是一些特定的相容性問題:
- 裝置不得變更標準意圖的行為或語意
- 裝置不得變更特定類型的系統元件 (例如服務、活動、ContentProvider 等) 的生命週期或生命週期語意
- 裝置絕對不得變更標準權限的語意
此處僅列舉部分內容,並未包含所有可能情況。Compatibility Test Suite (CTS) 會測試平台的大部分行為相容性,但並非全部。實作者有責任確保與 Android 開放原始碼專案的行為相容性。因此,裝置實作人員應盡可能使用 Android 開放原始碼計畫提供的原始碼,而非重新實作系統的重要部分。
3.6. API 命名空間
Android 遵循 Java 程式設計語言定義的套件和類別命名空間慣例。為確保與第三方應用程式相容,裝置導入者不得對下列套件命名空間進行任何禁止的修改 (請見下文):
- java.*
- javax.*
- sun.*
- android.*
- com.android.*
禁止的修改包括:
- 裝置實作項目不得透過變更任何方法或類別簽章,或移除類別或類別欄位,修改 Android 平台上公開公開的 API。
- 裝置實作者可以修改 API 的基礎實作項目,但此類修改不得影響任何公開 API 的已知行為和 Java 語言簽章。
- 裝置實作者不得在上述 API 中加入任何公開的元素 (例如類別或介面、欄位或方法)。
「公開暴露的元素」是指任何未以「@hide」標記裝飾的結構體,就像在 Android 上游原始碼中使用的標記一樣。換句話說,裝置實作者不得在上述命名空間中公開新的 API,或變更現有的 API。裝置實作者可以進行僅限內部使用的修改,但這些修改不得宣傳或以其他方式提供給開發人員。
裝置實作人員可以新增自訂 API,但任何這類 API 不得位於由其他機構擁有或參照的命名空間。舉例來說,裝置實作人員絕對不應將 API 新增至 com.google.* 或類似的命名空間;只有 Google 可以這麼做。同樣地,Google 也絕對不應將 API 新增至其他公司的命名空間。此外,如果裝置實作內容包含標準 Android 命名空間以外的自訂 API,則這些 API 必須封裝在 Android 共用程式庫中,這樣只有明確使用這些 API (透過 <uses-library>
機制) 的應用程式,才會受到這些 API 記憶體用量增加的影響。
如果裝置實作人員建議改善上述其中一個套件命名空間 (例如在現有 API 中新增實用的新功能,或新增 API),則應前往 source.android.com,並根據該網站上的資訊,開始提供變更和程式碼的程序。
請注意,上述限制與 Java 程式設計語言中 API 命名的標準慣例相符;本節只是為了強化這些慣例,並透過納入這個相容性定義來使其具約束力。
3.7. 虛擬機器相容性
裝置實作必須支援完整的 Dalvik 執行檔 (DEX) 位元碼規格和 Dalvik 虛擬機器語意 [Resources, 17]。
裝置實作必須設定 Dalvik,以便根據上游 Android 平台和下表所述,分配記憶體。(如要瞭解螢幕大小和螢幕密度的定義,請參閱 第 7.1.1 節)。
請注意,下方指定的記憶體值視為最小值,且裝置實作可能會為每個應用程式分配更多記憶體。
螢幕大小 | 螢幕密度 | 應用程式記憶體 |
小 / 正常 / 大 | ldpi / mdpi | 16MB |
小 / 正常 / 大 | tvdpi / hdpi | 32MB |
小 / 正常 / 大 | xhdpi | 64MB |
特大 | mdpi | 32MB |
特大 | tvdpi / hdpi | 64MB |
特大 | xhdpi | 128MB |
3.8. 使用者介面相容性
3.8.1. 啟動器 (主畫面)
Android 4.3 包含啟動器應用程式 (主畫面),並支援第三方應用程式取代裝置啟動器 (主畫面)。允許第三方應用程式取代裝置主畫面的裝置實作方式,必須宣告平台功能 android.software.home_screen
。
3.8.2. 小工具
Android 定義了元件類型和對應的 API 與生命週期,讓應用程式可向使用者公開「AppWidget」[Resources, 18]。支援在主畫面上嵌入小工具的裝置實作必須符合下列要求,並宣告支援平台功能 android.software.app_widgets
。
- 裝置啟動器必須內建 AppWidget 支援功能,並提供使用者介面操作元素,讓使用者直接在啟動器中新增、設定、查看及移除 AppWidget。
- 裝置實作項目必須能夠算繪標準格狀大小為 4 x 4 的小工具。(詳情請參閱 Android SDK 說明文件中的「App Widget 設計指南」[Resources, 18]。)
- 支援螢幕鎖定畫面的裝置實作必須支援螢幕鎖定畫面上的應用程式小工具。
3.8.3. 通知
Android 包含 API,可讓開發人員使用裝置的硬體和軟體功能,通知使用者重要事件 [Resources, 19]。
有些 API 可讓應用程式使用硬體 (特別是聲音、震動和燈光) 執行通知或吸引注意力。裝置實作必須支援使用硬體功能的通知 (如 SDK 說明文件所述),並盡可能使用裝置實作硬體。舉例來說,如果裝置實作項目包含震動器,則必須正確實作震動 API。如果裝置實作項目缺少硬體,則必須將對應的 API 實作為無操作。請注意,第 7 節會進一步說明這項行為。
此外,實作項目必須正確轉譯 API [Resources, 20] 或狀態/系統列圖示樣式指南 [Resources, 21] 中提供的所有資源 (圖示、音訊檔案等)。裝置導入者可提供與 Android 開放原始碼參考導入方式不同的通知使用者體驗,但這類替代通知系統必須支援現有的通知資源,如上所述。
Android 4.3 支援豐富通知,例如持續性通知的互動式檢視畫面。裝置實作項目必須正確顯示及執行豐富通知,如 Android API 所述。
3.8.4. 搜尋
Android 包含 API [Resources, 22],可讓開發人員將搜尋功能整合至應用程式,並將應用程式資料公開至全域系統搜尋。一般來說,這項功能包含單一系統層級使用者介面,可讓使用者輸入查詢,並在使用者輸入時顯示建議內容和結果。Android API 可讓開發人員重複使用這個介面,在自己的應用程式中提供搜尋功能,並將結果提供給通用全球搜尋使用者介面。
裝置實作功能必須包含單一共用系統層級搜尋使用者介面,能夠根據使用者輸入內容提供即時建議。裝置實作項目必須實作 API,讓開發人員能夠重複使用這個使用者介面,在自己的應用程式中提供搜尋功能。裝置實作項目必須導入 API,讓第三方應用程式在全球搜尋模式下,將建議內容加入搜尋框。如果沒有安裝可使用這項功能的第三方應用程式,預設行為應是顯示網路搜尋引擎結果和建議。
3.8.5. 浮動式訊息
應用程式可以使用「Toast」API (定義於 [Resources, 23]),向使用者顯示短暫的非模態字串,該字串會在短時間後消失。裝置實作項目必須以某種高可見度的方式,向使用者顯示應用程式傳送的 Toast。
3.8.6。主題
Android 提供「主題」機制,讓應用程式在整個活動或應用程式中套用樣式。Android 4.3 包含「Holo」或「holographic」主題,可做為一組定義樣式,供應用程式開發人員使用,以便符合 Android SDK [Resources, 24] 定義的 Holo 主題外觀。裝置實作項目不得變更任何向應用程式公開的 Holo 主題屬性 [Resources, 25]。
Android 4.3 包含新的「裝置預設」主題,可做為一組定義樣式的應用程式開發人員使用,如果他們想配合裝置實作者定義的裝置主題外觀和感受,裝置實作可能會修改向應用程式公開的 DeviceDefault 主題屬性 [Resources, 25]。
3.8.7. 動態桌布
Android 定義了元件類型和對應的 API 和生命週期,讓應用程式可向使用者提供一或多個「動態桌布」[Resources, 26]。動態桌布是指動畫、圖案或類似圖片,具有有限的輸入功能,可顯示為桌布,並在其他應用程式後方運作。
如果硬體可以以合理的幀率執行所有動態桌布,且不會對其他應用程式造成不良影響,就表示硬體可穩定執行動態桌布。如果硬體限制導致桌布和/或應用程式發生異常、耗用過多 CPU 或電池電力,或是以不合理的低畫面更新率執行,則系統會判定硬體無法執行動態桌布。舉例來說,某些動態桌布可能會使用 Open GL 1.0 或 2.0 內容顯示內容。在未支援多個 OpenGL 內容的硬體上,即時桌布無法穩定執行,因為即時桌布使用 OpenGL 內容時,可能會與其他同樣使用 OpenGL 內容的應用程式發生衝突。
裝置實作項目應實作動態桌布,以便可如上所述可靠地執行動態桌布。如果裝置實作項目無法如上述所述可靠地執行動態桌布,則絕對不應實作動態桌布。
3.8.8。最近使用的應用程式畫面
上游 Android 4.3 原始碼包含使用者介面,可使用應用程式縮圖圖片,顯示使用者上次離開應用程式時的圖形狀態。裝置實作可能會變更或移除這個使用者介面;不過,未來的 Android 版本預計會更廣泛地使用這項功能。強烈建議裝置實作項目使用上游 Android 4.3 使用者介面 (或類似的縮圖介面) 來支援近期的應用程式,否則可能無法與未來版本的 Android 相容。
3.8.9。輸入管理
Android 4.3 支援輸入管理功能,並支援第三方輸入法編輯器。允許使用者在裝置上使用第三方輸入法功能的裝置實作,必須宣告平台功能 android.software.input_methods
,並支援 Android SDK 說明文件中定義的 IME API。
宣告 android.software.input_methods
功能的裝置實作項目必須提供使用者可存取的機制,以便新增及設定第三方輸入法。裝置實作項目必須在回應 android.settings.INPUT_METHOD_SETTINGS
意圖時顯示設定介面。
3.8.10。螢幕鎖定畫面媒體遙控器
Android 4.3 支援 Remote Control API,可讓媒體應用程式整合在遠端檢視畫面 (例如裝置螢幕鎖定畫面) 中顯示的播放控制項 [Resources, 74]。支援裝置螢幕鎖定畫面,並允許使用者在主畫面上新增小工具的裝置實作,必須支援在裝置螢幕鎖定畫面中嵌入遙控器 [Resources, 69]。
3.8.11. 夢境
Android 4.3 支援名為 Dreams 的互動式螢幕保護程式 [Resources, 76]。Dreams 可讓使用者在充電裝置閒置或停靠在桌面座架時,與應用程式互動。裝置實作項目必須支援 Dreams,並提供設定選項,讓使用者設定 Dreams。
3.9 裝置管理
Android 4.3 包含多項功能,可讓具備安全性意識的應用程式透過 Android 裝置管理 API [Resources, 27] 在系統層級執行裝置管理功能,例如強制執行密碼政策或遠端清除資料。裝置實作項目必須提供 DevicePolicyManager
類別的實作項目 [Resources, 28]。支援鎖定畫面的裝置實作方式,必須支援 Android SDK 說明文件 [Resources, 27] 中定義的所有裝置管理政策。
3.10 無障礙功能
Android 4.3 提供無障礙層,可協助身心障礙使用者更輕鬆地操作裝置。此外,Android 4.3 提供平台 API,可讓無障礙服務實作接收使用者和系統事件的回呼,並產生其他回饋機制,例如文字轉語音、觸覺回饋和軌跡球/方向鍵導覽 [Resources, 29]。裝置實作項目必須提供與 Android 預設實作項目一致的 Android 無障礙架構實作項目。具體來說,裝置實作必須符合下列規定。
- 裝置實作必須透過
android.accessibilityservice
API [Resources, 30] 支援第三方無障礙服務實作。 - 裝置實作項目必須產生
AccessibilityEvents
,並以與預設 Android 實作項目一致的方式,將這些事件傳送至所有已註冊的AccessibilityService
實作項目。 - 裝置實作項目必須提供使用者可存取的機制,以便啟用及停用無障礙服務,且必須在回應
android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS
意圖時顯示此介面。
此外,裝置實作項目應在裝置上提供無障礙服務的實作項目,並提供機制,讓使用者在設定裝置時啟用無障礙服務。您可以透過 Eyes Free 專案 [資源, 31] 取得無障礙服務的開放原始碼實作項目。
3.11 文字轉語音
Android 4.3 包含 API,可讓應用程式使用文字轉語音 (TTS) 服務,並允許服務供應商提供 TTS 服務的實作項目 [Resources, 32]。裝置實作方式必須符合下列與 Android TTS 架構相關的規定:
- 裝置實作項目必須支援 Android TTS 架構 API,且應包含支援裝置上可用語言的 TTS 引擎。請注意,上游 Android 開放原始碼軟體包含全功能的 TTS 引擎實作項目。
- 裝置實作必須支援安裝第三方 TTS 引擎。
- 裝置實作方式必須提供使用者可存取的介面,讓使用者選取要用於系統層級的 TTS 引擎。
4. 應用程式封裝相容性
裝置實作項目必須安裝並執行由官方 Android SDK 中「aapt」工具產生的 Android「.apk」檔案 [Resources, 33]。
裝置實作不得擴充 .apk [Resources, 34]、Android 資訊清單 [Resources, 35]、Dalvik 位元碼 [Resources, 17] 或轉譯腳本位元碼格式,以免這些檔案無法在其他相容裝置上正確安裝及執行。裝置實作者應使用 Dalvik 的參考上游實作項目,以及參考實作項目的套件管理系統。
5. 多媒體相容性
裝置實作方式必須至少包含一種音訊輸出方式,例如喇叭、耳機插孔、外接喇叭連線等。
5.1. 媒體轉碼器
裝置實作方式必須支援 Android SDK 說明文件 [Resources, 58] 中指定的核心媒體格式,除非本文件明確允許。具體來說,裝置實作必須支援下表中定義的媒體格式、編碼器、解碼器、檔案類型和容器格式。所有這些編解碼都會以軟體實作方式提供,並在 Android 開放原始碼計畫的偏好 Android 實作方式中實作。
請注意,Google 和開放手機聯盟均未表示這些編解碼不受第三方專利約束。若您打算在硬體或軟體產品中使用這個原始碼,請注意,實作這個程式碼 (包括在開放原始碼軟體或共享軟體中) 可能需要相關專利持有人的專利授權。
請注意,這些表格並未列出大部分視訊編碼的特定位元率需求,因為目前的裝置硬體不一定支援與相關標準指定的必要位元率完全對應的位元率。相反地,裝置實作應支援硬體上可行的最高位元率,直到達到規格定義的限制為止。
類型 | 格式 / 編解碼 | 編碼器 | 解碼器 | 詳細說明 | 檔案類型/容器格式 |
---|---|---|---|---|---|
音訊 | MPEG-4 AAC 設定檔 (AAC LC) | 對於包含麥克風硬體並定義 android.hardware.microphone 的裝置實作,這是必要條件。 |
必要 | 支援單聲道/立體聲/5.0/5.1* 內容,標準取樣率介於 8 到 48 kHz 之間。 |
|
MPEG-4 HE AAC 設定檔 (AAC+) | 對於包含麥克風硬體並定義 android.hardware.microphone 的裝置實作,這是必要條件 | 必要 | 支援單聲道/立體聲/5.0/5.1* 內容,標準取樣率介於 16 到 48 kHz 之間。 | ||
MPEG-4 HE AAC v2 設定檔 (增強型 AAC+) | 必要 | 支援單聲道/立體聲/5.0/5.1* 內容,標準取樣率介於 16 到 48 kHz 之間。 | |||
MPEG-4 音訊物件類型 ER AAC ELD (增強型低延遲 AAC) | 對於包含麥克風硬體並定義 android.hardware.microphone 的裝置實作,這是必要條件 | 必要 | 支援標準取樣率 (16 到 48 kHz) 的單聲道/立體聲內容。 | ||
AMR-NB | 對於包含麥克風硬體並定義 android.hardware.microphone 的裝置實作,這是必要條件。 |
必要 | 4.75 至 12.2 kbps,取樣頻率為 8 kHz | 3GPP (.3gp) | |
AMR-WB | 對於包含麥克風硬體並定義 android.hardware.microphone 的裝置實作,這是必要條件。 |
必要 | 9 個速率,從 6.60 kbit/s 到 23.85 kbit/s,取樣率為 16 kHz | 3GPP (.3gp) | |
FLAC | 必填 (Android 3.1 以上版本) |
單聲道/立體聲 (不支援多聲道)。取樣率最高可達 48 kHz (但建議在 44.1 kHz 輸出的裝置上使用 44.1 kHz,因為 48 到 44.1 kHz 的降樣器不包含低通濾波器)。建議使用 16 位元;24 位元不套用抖動。 | 僅限 FLAC (.flac) | ||
MP3 | 必要 | 單聲道/立體聲 8-320 Kbps 固定位元率 (CBR) 或可變位元率 (VBR) | MP3 (.mp3) | ||
MIDI | 必要 | MIDI 類型 0 和 1。DLS 1 和 2 版。XMF 和 Mobile XMF。支援的鈴聲格式包括 RTTTL/RTX、OTA 和 iMelody |
|
||
Vorbis | 必要 |
|
|||
PCM/WAVE | 必要 | 必要 | 8 位元和 16 位元線性 PCM** (取樣率上限為硬體限制)。裝置必須支援以 8000、16000 和 44100 Hz 頻率錄製原始 PCM 的取樣率 | WAVE (.wav) | |
圖片 | JPEG | 必要 | 必要 | 基本 + 漸進式 | JPEG (.jpg) |
GIF | 必要 | GIF (.gif) | |||
PNG | 必要 | 必要 | PNG (.png) | ||
BMP | 必要 | BMP (.bmp) | |||
WEBP | 必要 | 必要 | WebP (.webp) | ||
影片 | H.263 | 對於包含相機硬體並定義 android.hardware.camera 或 android.hardware.camera.front 的裝置實作,這是必要條件。 |
必要 |
|
|
H.264 AVC | 對於包含相機硬體並定義 android.hardware.camera 或 android.hardware.camera.front 的裝置實作,這是必要條件。 |
必要 | 基準設定檔 (BP) |
|
|
MPEG-4 SP | 必要 | 3GPP (.3gp) | |||
VP8 | 必填 (Android 4.3 以上版本) |
必要 (Android 2.3.3 以上版本) |
WebM (.webm) 和 Matroska (.mkv,Android 4.0 以上版本)*** |
- *注意:只需將 5.0/5.1 內容下混,錄製或轉譯多於 2 個聲道則為選用功能。
- **注意:必須使用 16 位元線性 PCM 擷取功能。8 位元線性 PCM 擷取功能並非必要條件。
- ***注意:裝置實作應支援寫入 Matroska WebM 檔案。
5.2 影片編碼
包含後置鏡頭且宣告 android.hardware.camera
的 Android 裝置實作項目應支援下列 H.264 影片編碼設定檔。
SD (低畫質) | SD (高畫質) | HD (如果硬體支援) | |
---|---|---|---|
影片解析度 | 176 x 144 像素 | 480 x 360 像素 | 1280 x 720 像素 |
影片影格速率 | 12 fps | 30 fps | 30 fps |
視訊位元率 | 56 Kbps | 500 Kbps 以上 | 2 Mbps 以上 |
音訊轉碼器 | AAC-LC | AAC-LC | AAC-LC |
音訊頻道 | 1 (單聲道) | 2 (立體聲) | 2 (立體聲) |
音訊位元率 | 24 Kbps | 128 Kbps | 192 Kbps |
包含後置鏡頭且宣告 android.hardware.camera
的 Android 裝置實作項目應支援下列 VP8 影片編碼設定檔
SD (低畫質) | SD (高畫質) | HD 720p (如果硬體支援) |
HD 1080p (硬體支援時) |
|
---|---|---|---|---|
影片解析度 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 |
影片影格速率 | 30 fps | 30 fps | 30 fps | 30 fps |
視訊位元率 | 800 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
5.3 影片解碼
Android 裝置實作應支援下列 VP8 和 H.264 視訊解碼設定檔。
SD (低畫質) | SD (高畫質) | HD 720p (如果硬體支援) |
HD 1080p (硬體支援時) |
|
---|---|---|---|---|
影片解析度 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 |
影片影格速率 | 30 fps | 30 fps | 30 fps | 30 fps |
視訊位元率 | 800 Kbps | 2 Mbps | 8 Mbps | 20 Mbps |
5.4. 音訊錄製
當應用程式使用 android.media.AudioRecord
API 開始錄製音訊串流時,如果裝置實作包含麥克風硬體並宣告 android.hardware.microphone
,則必須使用下列各項行為取樣及錄製音訊:
- 裝置應顯示大致平坦的振幅與頻率特性,具體來說,從 100 Hz 到 4000 Hz 的頻率應為 ±3 dB
- 音訊輸入靈敏度應設為 16 位元樣本的 RMS 為 2500,以便 1000 Hz 的 90 dB 聲音功率 (SPL) 來源產生 RMS。
- PCM 振幅等級應以線性方式追蹤輸入 SPL 變化,至少在麥克風的 90 dB SPL 下,從 -18 dB 到 +12 dB 的範圍內。
- 在 90 dB SPL 輸入音量下,1KHz 的總諧波失真應低於 1%。
除了上述錄音規格外,如果應用程式已開始使用 android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
音訊來源錄製音訊串流,則:
- 如有雜訊抑制處理功能,請務必停用。
- 如果有自動增益控制功能,則必須停用。
注意:雖然上述部分規定在 Android 4.3 中列為「應」(SHOULD),但日後的版本相容性定義預計會將這些規定改為「必須」(MUST)。也就是說,這些規定在 Android 4.3 中為選用項目,但在日後的版本中將會強制規定。對於搭載 Android 4.3 的現有裝置和新裝置,我們強烈建議您遵守 Android 4.3 的這些規定,否則在升級至未來版本時,這些裝置將無法達到 Android 相容性。
5.5. 音訊延遲
音訊延遲是指音訊訊號在系統中傳輸時的延遲時間。許多類型的應用程式都需要短延遲時間,才能實現即時音效。
本節的用詞定義如下:
- 「輸出延遲」是指從應用程式寫入 PCM 編碼資料的框架,到外部收聽器或轉換器可聽見或觀察到對應聲音之間的間隔時間。
- 「冷輸出延遲時間」是指在音訊輸出系統在要求前處於閒置狀態且已關閉電源時,第一個影格的輸出延遲時間
- 「連續輸出延遲時間」是指裝置已播放音訊後,後續影格輸出延遲時間
- 「輸入延遲」是指從外部聲音傳送至裝置,到應用程式讀取相應 PCM 編碼資料影格之間的間隔時間
- 「冷輸入延遲」是指在音訊輸入系統閒置並在要求前關閉電源的情況下,輸入時間損失和第一個影格輸入延遲的總和
- 「持續輸入延遲」是指裝置已擷取音訊時,後續影格輸入的延遲時間
- 「OpenSL ES PCM 緩衝區佇列 API」是 Android NDK 中與 PCM 相關的 OpenSL ES API 集合;請參閱 NDK_root
/docs/opensles/index.html
根據第 5 節的規定,所有相容裝置的導入作業都必須至少包含一種音訊輸出形式。裝置實作應符合或超越下列輸出延遲要求:
- 冷輸出延遲時間為 100 毫秒以下
- 連續輸出延遲時間為 45 毫秒或更短
如果裝置實作在使用 OpenSL ES PCM 緩衝區佇列 API 時,在任何初始校正作業後,針對至少一項支援的音訊輸出裝置,符合本節的規定,以便持續輸出延遲和冷輸出延遲,則可能會透過 android.content.pm.PackageManager
類別回報「android.hardware.audio.low-latency」功能,以便回報低延遲音訊。[Resources, 37] 相反地,如果裝置實作不符合這些要求,則不得回報支援低延遲音訊。
根據第 7.2.5 節,裝置實作可能會省略麥克風硬體。
裝置實作內容包含麥克風硬體,並宣告 android.hardware.microphone
應符合下列輸入音訊延遲要求:
- 冷輸入延遲時間為 100 毫秒以下
- 連續輸入延遲時間為 50 毫秒或更短
5.6. 網路協定
裝置必須支援 Android SDK 說明文件中指定的媒體聯播網協定,以便播放音訊和影片 [Resources, 58]。具體來說,裝置必須支援下列媒體網路通訊協定:
- RTSP (RTP、SDP)
- HTTP(S) 漸進式串流
- HTTP(S) 即時串流草稿協定,第 3 版 [資源,59]
6. 開發人員工具和選項相容性
6.1 開發人員工具
裝置實作方式必須支援 Android SDK 提供的 Android 開發人員工具。具體來說,Android 相容裝置必須與下列項目相容:
- Android Debug Bridge (簡稱 ADB) [Resources, 33]
裝置實作必須支援 Android SDK 中記錄的所有adb
函式。裝置端adb
守護程序預設為停用狀態,且必須提供使用者可存取的機制,以便啟用 Android Debug Bridge。 - Android 4.3 支援安全的 ADB。安全的 ADB 可在已知的已驗證主機上啟用 ADB。裝置實作項目必須支援安全的 ADB。
- Dalvik 偵錯監控服務 (稱為 ddms) [Resources, 33]
裝置實作必須支援 Android SDK 中所述的所有ddms
功能。由於ddms
使用adb
,因此預設情況下應不支援ddms
,但在使用者啟用 Android Debug Bridge 時,必須支援ddms
,如上所述。 - Monkey [Resources, 36]
裝置實作項目必須包含 Monkey 架構,並讓應用程式可使用該架構。 - SysTrace [Resources, 33]
裝置實作項目必須支援 Android SDK 說明中的 systrace 工具。Systrace 必須預設為停用狀態,且必須提供使用者可用的機制來啟用 Systrace。
大多數以 Linux 為基礎的系統和 Apple Macintosh 系統,可使用標準 Android SDK 工具辨識 Android 裝置,無須額外支援;但 Microsoft Windows 系統通常需要新 Android 裝置的驅動程式。(例如,新的供應商 ID 和有時新的裝置 ID 需要 Windows 系統的客製化 USB 驅動程式)。如果裝置實作項目未受標準 Android SDK 提供的 adb
工具辨識,裝置實作者就必須提供 Windows 驅動程式,讓開發人員可透過 adb
通訊協定連線至裝置。這些驅動程式必須提供給 Windows XP、Windows Vista、Windows 7 和 Windows 8,且提供 32 位元和 64 位元版本。
6.2 開發人員選項
Android 4.3 提供開發人員可用的設定,可用於設定應用程式開發相關設定。裝置實作項目必須遵循 android.settings.APPLICATION_DEVELOPMENT_SETTINGS 意圖,才能顯示應用程式開發相關設定 [Resources, 77]。上游 Android 實作項目預設會隱藏「開發人員選項」選單,讓使用者在依序按七 (7) 次「設定」>「關於裝置」>「版本號碼」選單項目後,即可啟動「開發人員選項」。裝置實作項目必須為開發人員選項提供一致的體驗。具體來說,裝置實作項目必須預設隱藏開發人員選項,並提供啟用開發人員選項的機制,與上游 Android 實作項目一致。
7. 硬體相容性
如果裝置包含特定硬體元件,且該元件具有第三方開發人員的對應 API,則裝置實作方式必須按照 Android SDK 說明文件的說明實作該 API。如果 SDK 中的 API 與硬體元件互動,而該硬體元件已明確標示為選用,且裝置實作不含該元件:
- 元件 API 的完整類別定義 (如 SDK 所述) 仍須存在
- API 的行為必須以某種合理的方式實作為無作業
- API 方法必須在 SDK 說明文件允許的情況下傳回空值
- API 方法必須傳回類別的無操作導入方式,因為 SDK 說明文件不允許空值
- API 方法不得擲回 SDK 說明文件未記錄的例外狀況
適用這些規定的典型情境範例是 telephony API:即使是在非手機裝置上,這些 API 也必須以合理的無操作方式實作。
裝置實作項目必須透過 android.content.pm.PackageManager
類別的 getSystemAvailableFeatures()
和 hasSystemFeature(String)
方法,準確回報硬體設定資訊。[資源,37]
7.1. 顯示和圖形
Android 4.3 包含自動調整應用程式資產和 UI 版面配置的設施,可根據裝置自動調整應用程式資產和 UI 版面配置,確保第三方應用程式可在各種硬體設定下順利執行 [Resources, 38]。裝置必須正確實作這些 API 和行為,詳情請參閱本節。
本節中所參照的單位定義如下:
- 「實際對角線尺寸」是指螢幕亮面部分兩個相對角落之間的距離,以英寸為單位。
- 「dpi」(「每英寸點數」) 是指 1 英寸水平或垂直線性跨度的像素數。如果列出 dpi 值,水平和垂直 dpi 都必須在範圍內。
- 「顯示比例」是螢幕長邊與短邊的比例。舉例來說,如果螢幕的解析度為 480x854 像素,則 854 / 480 = 1.779,或大約「16:9」。
- 「密度獨立像素」或「dp」是指經過標準化為 160 dpi 螢幕的虛擬像素單位,計算方式如下:
pixels = dps * (density / 160)
。
7.1.1. 螢幕設定
螢幕大小
Android UI 架構支援各種螢幕尺寸,並允許應用程式透過 SCREENLAYOUT_SIZE_MASK
使用 android.content.res.Configuration.screenLayout
查詢裝置螢幕大小 (又稱為「螢幕版面配置」)。裝置實作項目必須回報正確的螢幕大小,如 Android SDK 說明文件 [資源,38] 所定義,並由上游 Android 平台決定。具體來說,裝置實作必須根據下列邏輯密度獨立像素 (dp) 螢幕尺寸,回報正確的螢幕大小。
- 裝置的螢幕尺寸必須至少為 426 dp x 320 dp (「小」)
- 回報螢幕大小為「正常」的裝置,螢幕大小必須至少為 480 dp x 320 dp
- 回報螢幕大小為「large」的裝置,螢幕大小必須至少為 640 dp x 480 dp
- 回報螢幕大小為「xlarge」的裝置,螢幕大小必須至少為 960 dp x 720 dp
此外,裝置的螢幕尺寸必須至少為 2.5 英寸的實體對角尺寸。
裝置絕對不得隨時變更所回報的螢幕大小。
應用程式可選擇透過 AndroidManifest.xml 檔案中的 <supports-screens>
屬性,指出支援的螢幕大小。裝置實作必須正確遵循應用程式所聲明的支援小、中、大和特大螢幕尺寸,詳情請參閱 Android SDK 說明文件。
螢幕顯示比例
長寬比必須介於 1.3333 (4:3) 和 1.85 (16:9)。
螢幕密度
Android UI 架構定義了一組標準邏輯密度,協助應用程式開發人員指定應用程式資源。裝置實作項目必須透過 android.util.DisplayMetrics
API 回報下列其中一種邏輯 Android 架構密度,並且必須以此標準密度執行應用程式。
- 120 dpi,又稱為「ldpi」
- 160 dpi,稱為「mdpi」
- 213 dpi (稱為「tvdpi」)
- 240 dpi,稱為「hdpi」
- 320 dpi,稱為「xhdpi」
- 480 dpi,又稱為「xxhdpi」
- 640 dpi,又稱為「xxxhdpi」
7.1.2. 顯示指標
裝置實作項目必須針對 android.util.DisplayMetrics
[Resources, 39] 中定義的所有顯示指標回報正確值。
7.1.3. 螢幕方向
裝置必須支援應用程式以直向或橫向螢幕方向變更螢幕方向的動態功能。也就是說,裝置必須遵循應用程式要求的特定螢幕方向。裝置實作項目可能會將直向或橫向方向設為預設值。
無論是透過 android.content.res.Configuration.orientation、android.view.Display.getOrientation() 或其他 API 查詢,裝置都必須回報裝置目前的正確值。
變更螢幕方向時,裝置不得變更回報的螢幕大小或密度。
裝置必須回報支援的螢幕方向 (android.hardware.screen.portrait
和/或 android.hardware.screen.landscape
),且必須回報至少一種支援的方向。舉例來說,如果裝置採用固定方向的橫向螢幕 (例如電視或筆電),則該裝置必須只回報 android.hardware.screen.landscape
。
7.1.4. 2D 和 3D 圖形加速功能
裝置實作方式必須同時支援 OpenGL ES 1.0 和 2.0,如 Android SDK 說明文件所述。在支援 OpenGL ES 3.0 的裝置上,裝置實作應支援 OpenGL ES 3.0。裝置實作也必須支援 Android Renderscript,詳情請參閱 Android SDK 說明文件 [Resources, 8]。
裝置實作項目也必須正確識別自己是否支援 OpenGL ES 1.0、OpenGL ES 2.0 或 OpenGL ES 3.0。也就是:
- 受管理的 API (例如透過
GLES10.getString()
方法) 必須回報支援 OpenGL ES 1.0 和 OpenGL ES 2.0 - 原生 C/C++ OpenGL API (也就是透過 libGLES_v1CM.so、libGLES_v2.so 或 libEGL.so 提供給應用程式的 API) 必須回報支援 OpenGL ES 1.0 和 OpenGL ES 2.0。
- 宣告支援 OpenGL ES 3.0 的裝置實作必須支援 OpenGL ES 3.0 管理 API,並納入原生 C/C++ API 支援。在宣告支援 OpenGL ES 3.0 的裝置實作中,libGLESv2.so 除了匯出 OpenGL ES 2.0 函式符號外,也必須匯出 OpenGL ES 3.0 函式符號。
裝置實作項目可實作任何所需的 OpenGL ES 擴充功能。不過,裝置實作必須透過 OpenGL ES 受管理和原生 API 回報所有支援的擴充功能字串,反之,則不得回報不支援的擴充功能字串。
請注意,Android 4.3 支援應用程式可選擇指定需要特定 OpenGL 紋理壓縮格式。這些格式通常是供應商專用。Android 4.3 不需要裝置實作項目,即可實作任何特定紋理壓縮格式。不過,應透過 OpenGL API 中的 getString()
方法,準確回報支援的任何紋理壓縮格式。
Android 4.3 包含一種機制,可讓應用程式宣告要在應用程式、活動、視窗或 View 層級,透過使用資訊清單標記 android:hardwareAccelerated
或直接 API 呼叫,為 2D 圖形啟用硬體加速功能 [Resources, 9]。
在 Android 4.3 中,裝置實作項目必須預設啟用硬體加速功能,且如果開發人員透過設定 android:hardwareAccelerated="false"
或直接透過 Android View API 停用硬體加速功能,則必須停用硬體加速功能。
此外,裝置實作功能必須符合 Android SDK 說明文件中關於硬體加速的內容 [Resources, 9]。
Android 4.3 包含 TextureView
物件,可讓開發人員直接將硬體加速的 OpenGL ES 材質整合為 UI 階層中的算繪目標。裝置實作項目必須支援 TextureView
API,且必須與上游 Android 實作項目的行為一致。
Android 4.3 支援 EGL_ANDROID_RECORDABLE
,這是 EGLConfig 屬性,用於指出 EGLConfig 是否支援將圖片轉譯至將圖片記錄到影片的 ANativeWindow。裝置實作項目必須支援 EGL_ANDROID_RECORDABLE
擴充功能 [Resources, 79]。
7.1.5. 舊版應用程式相容性模式
Android 4.3 指定了「相容模式」,其中架構會以「一般」螢幕大小等同 (寬度 320 dp) 模式運作,以便支援未針對舊版 Android 開發的舊版應用程式,因為這些舊版 Android 不支援螢幕大小獨立性。裝置實作項目必須支援由上游 Android 開放原始碼實作的舊版應用程式相容性模式。也就是說,裝置實作不得變更觸發條件或相容性模式的啟用門檻,也不得變更相容性模式本身的行為。
7.1.6. 螢幕類型
裝置實作螢幕可分為下列兩種類型:
- 固定像素顯示器實作方式:螢幕是單一面板,僅支援單一像素寬度和高度。螢幕通常會與裝置實體整合。例如手機、平板電腦等。
- 可變像素顯示器實作:裝置實作無內嵌螢幕,並包含 VGA、HDMI 或無線連接埠等視訊輸出埠,用於顯示螢幕;或內嵌螢幕可變更像素尺寸。例如電視、機上盒等。
固定像素裝置實作
固定像素裝置實作項目可使用任何像素尺寸的螢幕,但必須符合本相容性定義的規定。
固定像素實作可能會包含用於外接螢幕的影片輸出連接埠。不過,如果該螢幕曾用於執行應用程式,裝置就必須符合下列規定:
- 裝置必須回報相同的螢幕設定和顯示指標,如第 7.1.1 和 7.1.2 節所述,以固定像素顯示。
- 裝置必須回報與固定像素顯示器相同的邏輯密度。
- 裝置必須回報的螢幕尺寸必須與固定像素顯示畫面相同或非常接近。
舉例來說,如果平板電腦的對角尺寸為 7 吋,解析度為 1024x600 像素,則會視為固定像素大型 mdpi 螢幕實作。如果裝置包含以 720p 或 1080p 顯示的影片輸出埠,則裝置實作必須調整輸出比例,以便應用程式只在大型 mdpi 視窗中執行,無論是否使用固定像素顯示或影片輸出埠。
變化像素裝置實作
變動像素裝置實作必須支援 1280x720 或 1920x1080 (也就是 720p 或 1080p) 其中之一或兩者。採用可變像素顯示器的裝置實作方式不得支援任何其他螢幕設定或模式。採用可變像素螢幕的裝置實作可能會在執行階段或啟動期間變更螢幕設定或模式。舉例來說,機上盒使用者可能會將 720p 螢幕換成 1080p 螢幕,而裝置實作可能會相應調整。
此外,變動像素裝置實作項目必須針對這些像素尺寸回報下列設定值:
- 1280x720 (也稱為 720p):螢幕大小為「large」,密度為「tvdpi」(213 dpi)
- 1920x1080 (也稱為 1080p):螢幕大小為「large」,密度為「xhdpi」(320 dpi)
為方便說明,在 Android 4.3 中,具有可變像素尺寸的裝置實作會限制為 720p 或 1080p,且必須如上所述設定為回報螢幕大小和密度值。
7.1.7. 螢幕技術
Android 平台包含 API,可讓應用程式在螢幕上算繪豐富的圖形。除非本文件特別允許,否則裝置必須支援 Android SDK 定義的所有這些 API。具體違規事項如下:
- 裝置必須支援可算繪 16 位元彩色圖形的螢幕,並應支援可算繪 24 位元彩色圖形的螢幕。
- 裝置必須支援可算繪動畫的螢幕。
- 使用的顯示技術必須具有介於 0.9 和 1.1 之間的像素顯示比例 (PAR)。也就是說,像素顯示比例必須接近正方形 (1.0),容許值為 10%。
7.1.8。外接螢幕
Android 4.3 支援次要螢幕,可啟用媒體分享功能,以及用於存取外部螢幕的開發人員 API。如果裝置支援透過有線、無線或內嵌額外螢幕連線的外接螢幕,則裝置實作必須實作 Android SDK 說明文件中所述的顯示器管理器 API [Resources, 75]。支援安全視訊輸出且能夠支援安全途徑的裝置實作,必須宣告支援 Display.FLAG_SECURE
。具體來說,宣告支援 Display.FLAG_SECURE
的裝置實作必須支援 Miracast 無線螢幕的 HDCP 2.x 以上版本,或有線螢幕的 HDCP 1.2 以上版本。上游 Android 開放原始碼實作項目包括支援無線 (Miracast) 和有線 (HDMI) 顯示器,且符合這項規定。
7.2. 輸入裝置
7.2.1. 鍵盤
裝置實作方式:
- 必須支援輸入管理架構 (可讓第三方開發人員建立輸入管理引擎,例如軟體鍵盤),詳情請參閱 http://developer.android.com
- 必須提供至少一個軟體鍵盤 (無論是否提供硬體鍵盤)
- 可納入其他螢幕鍵盤實作
- 可包含硬體鍵盤
- 請勿加入不符合
android.content.res.Configuration.keyboard
[Resources, 40] 中所述格式 (即 QWERTY 或 12 鍵) 的實體鍵盤
7.2.2. 非觸控導覽
裝置實作方式:
- 可省略非觸控導覽選項 (也就是可省略軌跡球、D-Pad 或滾輪)
- 必須回報
android.content.res.Configuration.navigation
的正確值 [Resources, 40] - 必須提供合理的替代使用者介面機制,用於選取及編輯文字,且必須與輸入管理引擎相容。上游 Android 開放原始碼實作項目包含選取機制,適合用於缺乏非觸控導覽輸入功能的裝置。
7.2.3. 瀏覽鍵
主畫面、選單和返回功能對於 Android 導覽模式至關重要。裝置實作項目必須在執行應用程式時,隨時向使用者提供這些功能。這些功能可透過專屬實體按鈕 (例如機械式或電容式觸控按鈕) 實作,也可以透過專屬軟體按鍵、手勢、觸控面板等實作。Android 4.3 支援這兩種實作方式。
Android 4.3 支援輔助動作 [Resources, 63]。裝置實作項目必須在執行應用程式時,隨時向使用者提供輔助動作。這項功能可透過硬體或軟體鍵實作。
裝置實作可能會使用螢幕的特定部分來顯示導覽鍵,但如果是這種情況,則必須符合下列規定:
- 裝置實作導覽鍵時,必須使用螢幕的獨立部分,且不得供應用程式使用,且不得遮蓋或以其他方式干擾應用程式可用的螢幕部分。
- 裝置實作必須將部分螢幕畫面提供給符合第 7.1.1 節所定義的應用程式。
- 如果應用程式未指定系統 UI 模式,或指定
SYSTEM_UI_FLAG_VISIBLE
,裝置實作項目就必須顯示導覽鍵。 - 當應用程式指定
SYSTEM_UI_FLAG_LOW_PROFILE
時,裝置實作必須以不顯眼的「低調」(例如調低亮度) 模式顯示導覽鍵。 - 應用程式指定
SYSTEM_UI_FLAG_HIDE_NAVIGATION
時,裝置實作項目必須隱藏導覽鍵。 - 當 targetSdkVersion 小於或等於 10 時,裝置實作必須向應用程式顯示選單鍵,但當 targetSdkVersion 大於 10 時,則不應顯示選單鍵。
7.2.4. 觸控螢幕輸入
裝置實作項目應具備某種指標輸入系統 (類似滑鼠或觸控)。不過,如果裝置實作不支援指標輸入系統,則不得回報 android.hardware.touchscreen
或 android.hardware.faketouch
功能常數。裝置實作方式確實包含指標輸入系統:
- 如果裝置輸入系統支援多個指標,應支援完全獨立追蹤的指標
- 必須回報
android.content.res.Configuration.touchscreen
[Resources, 40] 的值,對應至裝置上的特定觸控螢幕類型
Android 4.3 支援各種觸控螢幕、觸控板和假觸控輸入裝置。以觸控螢幕為基礎的裝置實作方式會與螢幕相關聯 [Resources, 81],讓使用者能夠直接操作畫面上的項目。由於使用者是直接觸碰螢幕,系統不需要任何額外的操作元素來指出要操作的物件。相較之下,觸控模擬介面會提供使用者輸入系統,可模擬部分觸控螢幕功能。舉例來說,滑鼠或遙控器會驅動螢幕上的游標,類似於觸控操作,但使用者必須先指向或聚焦,再點選。滑鼠、觸控板、陀螺儀空中滑鼠、陀螺儀指標、搖桿和多點觸控觸控板等許多輸入裝置,都支援觸控模擬互動。Android 4.0 包含功能常數 android.hardware.faketouch
,對應高保真非觸控 (也就是以指標為基礎) 輸入裝置,例如滑鼠或觸控板,可充分模擬以觸控為基礎的輸入 (包括基本手勢支援),並指出裝置支援模擬的觸控螢幕功能子集。宣告假觸控功能的裝置實作方式,必須符合第 7.2.5 節的假觸控需求。
裝置實作項目必須回報正確的功能,對應於所使用的輸入類型。包含觸控螢幕 (單點觸控或更高) 的裝置實作項目,必須回報平台功能常數 android.hardware.touchscreen
。回報平台功能常數 android.hardware.touchscreen
的裝置實作項目,也必須回報平台功能常數 android.hardware.faketouch
。不含觸控螢幕 (且僅依賴指標裝置) 的裝置實作項目不得回報任何觸控螢幕功能,且如果符合第 7.2.5 節的觸控模擬要求,則必須只回報 android.hardware.faketouch
。
7.2.5. 模擬觸控輸入
聲明支援 android.hardware.faketouch
的裝置實作
- 必須回報指標位置的絕對 X 和 Y 螢幕位置,並在螢幕上顯示視覺指標 [Resources, 80]
- 必須使用動作代碼 [Resources, 80] 回報觸控事件,該代碼會指定在螢幕上將指標移至
down
或up
時發生的狀態變更 [Resources, 80] - 必須支援螢幕上物件的指標
down
和up
,讓使用者能夠模擬輕觸螢幕上的物件 - 必須在時間門檻內,支援指標
down
、指標up
、指標down
和指標up
在螢幕上同一個物件上,以便使用者模擬在螢幕上雙擊物件 [Resources, 80] - 必須支援在螢幕上任意位置顯示指標
down
,指標移動至螢幕上任意位置,接著顯示指標up
,讓使用者模擬觸控拖曳動作 - 必須支援指標
down
,讓使用者能夠快速將物件移至螢幕上的不同位置,然後支援螢幕上的指標up
,讓使用者能夠在螢幕上揮動物件
宣告支援 android.hardware.faketouch.multitouch.distinct
的裝置必須符合上述假觸控功能的規定,且必須支援兩個以上獨立指標輸入的不同追蹤。
7.2.6. 麥克風
裝置實作可能會省略麥克風。不過,如果裝置實作省略麥克風,則不得回報 android.hardware.microphone
功能常數,且必須依照第 7 節實作音訊錄音 API 為無操作。相反地,如果裝置實作方式確實有麥克風,則:
7.3. 感應器
Android 4.3 包含用於存取各種感應器類型的 API。裝置實作通常可省略這些感應器,如以下各節所述。如果裝置包含特定感應器類型,且該類型具有對應的第三方開發人員 API,則裝置實作方式必須按照 Android SDK 說明文件所述實作該 API。例如裝置實作:
- 必須根據
android.content.pm.PackageManager
類別準確回報感應器是否存在。[資源,37] - 必須透過
SensorManager.getSensorList()
和類似方法,傳回支援感應器的正確清單 - 必須針對所有其他感應器 API 合理運作 (例如,在應用程式嘗試註冊事件監聽器時,適當地傳回 true 或 false,在沒有對應感應器時不呼叫感應器事件監聽器,等等)。
- 必須使用 Android SDK 說明文件中定義的各感應器類型相關國際單位制 (即公制) 值,回報所有感應器測量值 [Resources, 41]
以上清單並未詳盡列出所有情況;Android SDK 的行為說明應視為權威資訊。
部分感應器類型為合成類型,也就是說,這些感應器可以從一或多個其他感應器提供的資料衍生而來。(例如方向感應器和線性加速度感應器)。裝置實作項目應在包含必要的實體感應器時,實作這些感應器類型。
Android 4.3 包含「串流」感應器的概念,這類感應器會持續傳回資料,而非只在資料變更時才傳回。裝置實作必須持續提供任何 API 的定期資料樣本,這些 API 在 Android 4.3 SDK 說明文件中標示為串流感應器。請注意,裝置實作必須確保感應器串流不得阻止裝置 CPU 進入暫停狀態,或從暫停狀態喚醒。
7.3.1. 加速計
裝置實作應包含 3 軸式加速度計。如果裝置實作包含 3 軸式加速度計,則會:
- 應能以 120 Hz 以上的頻率傳送事件。請注意,雖然上述加速計頻率在 Android 4.3 中列為「應」(SHOULD),但未來版本的相容性定義預計會將這些頻率變更為「必須」(MUST)。也就是說,這些標準在 Android 4.3 中為選用標準,但在日後的版本中將為必要標準。對於搭載 Android 4.3 的現有裝置和新裝置,我們強烈建議符合這些 Android 4.3 要求條件,這樣才能升級至未來的平台版本。
- 必須遵循 Android API 中的 Android 感應器座標系統 (詳見 [Resources, 41])
- 必須能夠在任何三維向量上,從自由落體測量到兩倍重力 (2g) 以上
- 必須有 8 位元以上的精確度
- 標準差必須不超過 0.05 m/s^2
7.3.2. 磁力儀
裝置實作應包含 3 軸磁力儀 (即指南針)。如果裝置內含 3 軸式磁力計,則會:
- 必須能夠以 10 Hz 以上的頻率傳送事件
- 必須遵循 Android API 中的 Android 感應器座標系統 (詳情請參閱 [Resources, 41])。
- 必須能夠擷取一系列場強值,以涵蓋地磁場
- 必須有 8 位元以上的精確度
- 標準差必須不超過 0.5 µT
7.3.3. GPS
裝置實作應包含 GPS 接收器。如果裝置實作方式確實包含 GPS 接收器,則應加入某種形式的「輔助 GPS」技術,以盡可能縮短 GPS 鎖定時間。
7.3.4. 陀螺儀
裝置實作應包含陀螺儀 (即角度變更感應器)。裝置不應包含陀螺儀感應器,除非同時包含 3 軸加速計。如果裝置實作項目包含陀螺儀,則會:
- 必須進行溫度補償
- 必須能夠測量高達 5.5*Pi 弧度/秒 (即每秒約 1,000 度) 的方向變化
- 應能以 200 Hz 以上的頻率傳送事件。請注意,雖然上述陀螺儀頻率在 Android 4.3 中列為「應」(SHOULD),但未來版本的相容性定義預計會將這些項目改為「必須」(MUST)。也就是說,這些標準在 Android 4.3 中為選用標準,但在日後的版本中將為必要標準。對於搭載 Android 4.3 的現有裝置和新裝置,我們強烈建議符合 Android 4.3 的這些要求,這樣才能升級至未來的平台版本。
- 精確度必須為 12 位元以上
- 變化值不得超過每 Hz 1e-7 弧度^2 / 秒^2 (每 Hz 變化值,或弧度^2 / 秒)。變化範圍可隨取樣率而異,但必須受此值限制。換句話說,如果您以 1 Hz 的取樣率測量陀螺儀的變異,其值應不超過 1e-7 rad^2/s^2。
- 時間戳記必須盡可能接近硬體事件發生的時間。必須移除固定延遲時間。
7.3.5. 氣壓計
裝置實作可能會包含氣壓計 (即環境空氣壓力感應器)。如果裝置實作項目包含氣壓計,則會執行以下操作:
- 必須能夠以 5 Hz 以上的頻率傳送事件
- 必須具備足夠的精確度,才能估算高度
- 必須進行溫度補償
7.3.6. 溫度計
裝置實作可能會 (但不應) 包含溫度計 (即溫度感應器)。如果裝置實作項目包含溫度計,則必須測量裝置 CPU 的溫度。絕對不得測量任何其他溫度。(請注意,此感應器類型已在 Android 4.3 API 中淘汰)。
7.3.7. 光度計
裝置實作可能會包含光度計 (即環境光感應器)。
7.3.8. 鄰近感應器
裝置實作可能會包含鄰近感應器。如果裝置實作包含鄰近感應器,則該裝置必須在與螢幕相同方向測量物體的鄰近性。也就是說,鄰近感應器必須以偵測螢幕附近物體為方向,因為這類感應器的主要意圖是偵測使用者正在使用的手機。如果裝置實作項目包含其他方向的鄰近感應器,則絕對不應透過此 API 存取。如果裝置實作有鄰近感應器,則必須具備 1 位元或更高的準確度。
7.4. 資料連線
7.4.1. 電話通訊系統
Android 4.3 API 和本文件所使用的「Telephony」是指與透過 GSM 或 CDMA 網路撥打語音通話和傳送簡訊相關的硬體。雖然這些語音通話可能會或不會以封包交換方式進行,但在 Android 4.3 中,這些通話與任何可能使用相同網路實作的資料連線皆視為獨立。換句話說,Android 的「telephony」功能和 API 專門用於語音通話和簡訊;舉例來說,如果裝置實作無法撥打電話或傳送/接收簡訊,則無論是否使用行動網路進行資料連線,都不得回報「android.hardware.telephony」功能或任何子功能。
您可以在不含電話硬體的裝置上使用 Android 4.3。也就是說,Android 4.3 與非手機裝置相容。不過,如果裝置實作內容包含 GSM 或 CDMA 電話服務,則必須針對該技術的 API 實作完整支援。不含電話服務硬體的裝置實作項目,必須將完整的 API 實作為無操作。
7.4.2. IEEE 802.11 (Wi-Fi)
Android 4.3 裝置實作應支援一或多種 802.11 格式 (b/g/a/n 等)。如果裝置實作確實支援 802.11,則必須實作相應的 Android API。
裝置實作項目必須實作多播 API,如 SDK 說明文件所述 [Resources, 62]。支援 Wi-Fi 的裝置實作必須支援多播 DNS (mDNS)。裝置實作方式不得在任何運作期間篩除 mDNS 封包 (224.0.0.251),包括螢幕未處於活動狀態時。
7.4.2.1. Wi-Fi Direct
裝置實作應支援 Wifi 直連 (Wifi 點對點)。如果裝置實作確實支援 Wifi direct,則必須實作 SDK 說明文件中所述的對應 Android API [Resources, 68]。如果裝置實作項目支援 Wi-Fi 直連,則會:
- 必須支援一般 Wi-Fi 作業
- 應支援同時執行 Wi-Fi 和 Wi-Fi Direct 作業
7.4.3. 藍牙
裝置實作應包含藍牙收發器。包含藍牙收發機的裝置實作項目必須啟用 SDK 說明文件中所述的 RFCOMM 型藍牙 API,並宣告硬體功能 android.hardware.bluetooth [Resources, 42]。裝置實作項目應導入相關的藍牙設定檔,例如 A2DP、AVRCP、OBEX 等,以便根據裝置需求進行調整。
如要支援藍牙 GATT (通用屬性設定檔),以便與 Bluetooth Smart 或 Smart Ready 裝置通訊,裝置實作必須啟用 SDK 說明文件中所述的 GATT 型藍牙 API,並宣告硬體功能 android.hardware.bluetooth_le [資源, 42]。
7.4.4. 近距離無線通訊
裝置實作應包含近距離無線通訊 (NFC) 的收發器和相關硬體。如果裝置實作包含 NFC 硬體,則會:
- 必須從
android.content.pm.PackageManager.hasSystemFeature()
方法回報 android.hardware.nfc 功能。[資源,37] - 必須能夠透過下列 NFC 標準讀取及寫入 NDEF 訊息:
- 必須能夠透過下列 NFC 標準,充當 NFC Forum 讀取器/寫入器 (依 NFC Forum 技術規格 NFCForum-TS-DigitalProtocol-1.0 定義):
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS 6319-4)
- IsoDep (ISO 14443-4)
- NFC Forum 標記類型 1、2、3、4 (由 NFC Forum 定義)
- 必須能夠透過下列 NFC 標準,充當 NFC Forum 讀取器/寫入器 (依 NFC Forum 技術規格 NFCForum-TS-DigitalProtocol-1.0 定義):
- 應能夠透過下列 NFC 標準讀取及寫入 NDEF 訊息。請注意,雖然下列 NFC 標準在 Android 4.3 中列為「應」採用,但日後版本的相容性定義預計會將這些標準改為「必須」採用。也就是說,這些標準在 Android 4.3 中屬於選填選項,但在日後的版本中將會是必要條件。對於搭載 Android 4.3 的現有裝置和新裝置,我們強烈建議您符合 Android 4.3 的這些需求條件,這樣才能升級至日後的平台版本。
- NfcV (ISO 15693)
- 必須能夠透過下列對等端標準和通訊協定傳送及接收資料:
- ISO 18092
- LLCP 1.0 (由 NFC 論壇定義)
- SDP 1.0 (由 NFC 論壇定義)
- NDEF 推送通訊協定 [Resources, 43]
- SNEP 1.0 (由 NFC Forum 定義)
- 必須支援 Android Beam [Resources, 65]:
- 必須實作 SNEP 預設伺服器。預設 SNEP 伺服器收到的有效 NDEF 訊息,必須使用 android.nfc.ACTION_NDEF_DISCOVERED 意圖,傳送至應用程式。在設定中停用 Android Beam 時,請務必不要停用傳送傳入 NDEF 訊息的功能。
- 裝置實作必須遵循 android.settings.NFCSHARING_SETTINGS 意圖,才能顯示 NFC 分享設定 [Resources, 67]。
- 必須實作 NPP 伺服器。NPP 伺服器收到的訊息必須以與 SNEP 預設伺服器相同的方式處理。
- 必須實作 SNEP 用戶端,並在啟用 Android Beam 時嘗試將外寄 P2P NDEF 傳送至預設 SNEP 伺服器。如果找不到預設的 SNEP 伺服器,用戶端就必須嘗試傳送至 NPP 伺服器。
- 必須允許前景活動使用 android.nfc.NfcAdapter.setNdefPushMessage、android.nfc.NfcAdapter.setNdefPushMessageCallback 和 android.nfc.NfcAdapter.enableForegroundNdefPush 設定傳出 P2P NDEF 訊息。
- 在傳送外送 P2P NDEF 訊息前,應使用手勢或畫面上的確認動作 (例如「輕觸即可傳送」)。
- 應預設啟用 Android Beam
- 當裝置支援藍牙物件推送設定檔時,必須支援 NFC 連線轉移至藍牙。使用 android.nfc.NfcAdapter.setBeamPushUris 時,裝置實作項目必須支援連線轉移至藍牙,方法是實作 NFC 論壇的「連線轉移版本 1.2」[Resources, 60] 和「使用 NFC 版本 1.0 進行藍牙安全簡易配對」[Resources, 61] 規格。這類實作應使用 SNEP GET 要求,透過 NFC 交換交接要求 / 選取記錄,且必須使用藍牙物件推送設定檔進行實際的藍牙資料傳輸。
- 在 NFC 探索模式下,必須輪詢所有支援的技術。
- 裝置喚醒、螢幕處於活動狀態且鎖定畫面解鎖時,應處於 NFC 偵測模式。
(請注意,上述 JIS、ISO 和 NFC 論壇規格不適用於公開連結)。
此外,裝置實作項目可能會針對下列 MIFARE 技術提供讀取/寫入器支援。
- MIFARE Classic (NXP MF1S503x [Resources, 44]、MF1S703x [Resources, 45])
- MIFARE Ultralight (NXP MF0ICU1 [Resources, 46], MF0ICU2 [Resources, 47])
- MIFARE Classic 上的 NDEF (NXP AN130511 [Resources, 48]、AN130411 [Resources, 49])
請注意,Android 4.3 包含這些 MIFARE 類型的 API。如果裝置實作項目在讀取/寫入器角色中支援 MIFARE,則會:
- 必須實作 Android SDK 說明文件中的對應 Android API
- 必須從
android.content.pm.PackageManager.hasSystemFeature()
方法回報 com.nxp.mifare 功能。[Resources, 37] 請注意,這不是標準的 Android 功能,因此不會在PackageManager
類別中顯示為常數。 - 除非也實作一般 NFC 支援功能 (如本節所述),否則絕對不得實作對應的 Android API 或回報 com.nxp.mifare 功能
如果裝置實作不包含 NFC 硬體,則絕對不可透過 android.content.pm.PackageManager.hasSystemFeature()
方法 [Resources, 37] 宣告 android.hardware.nfc 功能,且必須將 Android 4.3 NFC API 實作為無操作。
由於 android.nfc.NdefMessage
和 android.nfc.NdefRecord
類別代表不依附通訊協定的資料表示格式,因此即使裝置實作不支援 NFC 或宣告 android.hardware.nfc 功能,也必須實作這些 API。
7.4.5. 最低網路功能
裝置實作必須支援一或多種形式的資料網路。具體來說,裝置實作必須支援至少一種資料標準,且該標準的傳輸速率必須達到 200Kbit/sec 以上。滿足這項規定的技術包括 EDGE、HSPA、EV-DO、802.11g、乙太網路等。
如果裝置實作項目以實體網路標準 (例如乙太網路) 做為主要資料連線,則應同時支援至少一種常見的無線資料標準,例如 802.11 (Wi-Fi)。
裝置可能會實作多種形式的資料連線。
7.5. 相機
裝置實作應包含後置鏡頭,且可能包含前置鏡頭。後置鏡頭是位於裝置螢幕對面側邊的鏡頭,也就是像傳統相機一樣,拍攝裝置遠端的場景。前置鏡頭是位於裝置螢幕同一側的鏡頭,也就是通常用於拍攝使用者圖像的鏡頭,例如視訊會議和類似應用程式。
7.5.1. 後置鏡頭
裝置實作項目應包含後置鏡頭。如果裝置實作包含後置鏡頭,則必須符合下列條件:
- 解析度必須至少為 2000 萬像素
- 應在相機驅動程式中實作硬體自動對焦或軟體自動對焦功能 (對應用程式軟體而言是透明的)
- 可能有固定焦或 EDOF (擴大景深) 硬體
- 可包含閃光效果。如果相機包含閃光燈,在相機預覽途徑註冊 android.hardware.Camera.PreviewCallback 例項時,閃光燈必須處於關閉狀態,除非應用程式已透過啟用
Camera.Parameters
物件的FLASH_MODE_AUTO
或FLASH_MODE_ON
屬性,明確啟用閃光燈。請注意,這項限制不適用於裝置內建的系統相機應用程式,只適用於使用Camera.PreviewCallback
的第三方應用程式。
7.5.2. 前置鏡頭
裝置實作可能包含前置鏡頭。如果裝置實作包含前置鏡頭,則必須符合下列條件:
- 解析度必須至少為 VGA (即 640x480 像素)
- 請勿將前置鏡頭設為 Camera API 的預設值。也就是說,Android 4.3 中的相機 API 有針對前置鏡頭的特定支援功能,而裝置實作方式不得將 API 設為將前置鏡頭視為預設後置鏡頭,即使前置鏡頭是裝置上唯一的相機也是如此。
- 可包含後置鏡頭可用的功能 (例如自動對焦、閃光燈等),如第 7.5.1 節所述。
- 應用程式在 CameraPreview 中顯示的串流必須水平反射 (即鏡像),如下所示:
- 如果裝置實作功能可由使用者旋轉 (例如透過加速計自動旋轉,或透過使用者輸入手動旋轉),相機預覽畫面必須相對於裝置目前的方向水平鏡像。
- 如果目前的應用程式已明確要求透過呼叫
android.hardware.Camera.setDisplayOrientation()
[Resources, 50] 方法旋轉相機螢幕,相機預覽畫面必須根據應用程式指定的方向水平鏡像。 - 否則,預覽畫面必須沿著裝置的預設水平軸鏡像顯示。
- 必須以與攝影機預覽圖片串流相同的方式,鏡像顯示後視鏡顯示的圖片。(如果裝置實作不支援 PostView,則這項規定顯然不適用)。
- 不得鏡像最終擷取的靜態影像或影片串流,這些內容會傳回至應用程式回呼或儲存至媒體儲存空間
7.5.3. Camera API 行為
裝置實作項目必須針對相機相關 API 實作下列行為,包括前置鏡頭和後置鏡頭:
- 如果應用程式從未呼叫
android.hardware.Camera.Parameters.setPreviewFormat(int)
,則裝置必須使用android.hardware.PixelFormat.YCbCr_420_SP
提供給應用程式回呼的預覽資料。 - 如果應用程式註冊
android.hardware.Camera.PreviewCallback
例項,且系統在預覽格式為 YCbCr_420_SP 時呼叫onPreviewFrame()
方法,則傳遞至onPreviewFrame()
的byte[]
中資料必須採用 NV21 編碼格式。也就是說,預設值必須是 NV21。 - 裝置實作必須支援 YV12 格式 (以
android.graphics.ImageFormat.YV12
常數表示),以便預覽前置和後置鏡頭的相機畫面。(硬體影片編碼器和相機可以使用任何原生像素格式,但裝置實作必須支援轉換為 YV12)。
無論裝置是否包含硬體自動對焦或其他功能,裝置實作功能都必須實作 Android 4.3 SDK 說明文件 [Resources, 51] 中包含的完整 Camera API。舉例來說,缺少自動對焦功能的相機仍必須呼叫任何已註冊的 android.hardware.Camera.AutoFocusCallback
例項 (即使這與非自動對焦相機無關)。請注意,這項做法也適用於前置鏡頭;舉例來說,即使大多數前置鏡頭不支援自動對焦,API 回呼仍必須如上所述「偽造」。
如果底層硬體支援這項功能,裝置實作項目就必須辨識並遵循 android.hardware.Camera.Parameters
類別中定義為常數的每個參數名稱。如果裝置硬體不支援某項功能,API 必須依照說明運作。相反地,除了 android.hardware.Camera.Parameters
上記錄為常數的字串常數外,裝置實作不得認可或識別傳遞至 android.hardware.Camera.setParameters()
方法的字串常數。也就是說,如果硬體允許,裝置實作必須支援所有標準相機參數,且不得支援自訂相機參數類型。舉例來說,如果裝置實作支援使用高動態範圍 (HDR) 成像技術拍攝相片,就必須支援相機參數 Camera.SCENE_MODE_HDR
[Resources, 78]。
每當相機拍攝新相片,且相片項目已新增至媒體儲存空間時,裝置實作項目就必須廣播 Camera.ACTION_NEW_PICTURE
意圖。
每當相機錄製新影片,且相片項目已新增至媒體儲存空間時,裝置實作項目就必須廣播 Camera.ACTION_NEW_VIDEO
意圖。
7.5.4. 相機方向
如有前置和後置鏡頭,兩者的方向都必須經過調整,確保相機的長邊與螢幕的長邊對齊。也就是說,當裝置處於橫向方向時,相機就必須以橫向方向拍攝影像。無論裝置的自然方向為何,這項規定都適用,也就是適用於主要為橫向或直向的裝置。
7.6. 記憶體與儲存空間
7.6.1. 記憶體和儲存空間最低需求
裝置實作項目必須至少提供 340 MB 的記憶體給核心和使用者空間使用。除了用於硬體元件 (例如無線電、影片等) 的記憶體 (不在核心控制之下),340 MB 必須是額外的記憶體。
裝置實作項目必須至少有 512 MB 的非揮發性儲存空間,用於應用程式私人資料。也就是說,/data
分區必須至少有 512 MB。對於執行 Android 4.3 的裝置實作,我們強烈建議至少提供 1 GB 的非揮發性儲存空間,用於應用程式私人資料,這樣才能升級至未來的平台版本。
Android API 包含下載管理工具,應用程式可使用該工具下載資料檔案 [Resources, 56]。下載管理員的裝置實作方式必須能夠將大小至少為 100 MB 的個別檔案下載至預設的「快取」位置。
7.6.2. 應用程式共用儲存空間
裝置實作方式必須為應用程式提供共用儲存空間。提供的共用儲存空間大小必須至少為 1 GB。
裝置實作項目必須使用預設的共用儲存空間掛載方式進行設定,也就是「開箱即用」。如果共用儲存空間未掛載至 Linux 路徑 /sdcard
,則裝置必須包含從 /sdcard
到實際掛載點的 Linux 符號連結。
裝置實作項目必須依照文件規定,對這項共用儲存空間強制執行 android.permission.WRITE_EXTERNAL_STORAGE
權限。否則,任何取得該權限的應用程式都必須能寫入共用儲存空間。
裝置實作可能會提供可讓使用者存取的可移除儲存空間硬體,例如 Secure Digital 卡。或者,裝置實作項目可以將內部 (不可移除) 儲存空間分配給應用程式共用儲存空間。
無論使用的共用儲存空間形式為何,裝置實作方式都必須提供某種機制,以便從主機電腦存取共用儲存空間的內容,例如 USB 大量儲存空間 (UMS) 或媒體傳輸通訊協定 (MTP)。裝置實作可能會使用 USB 大量儲存空間,但應使用媒體傳輸通訊協定。如果裝置實作支援媒體傳輸通訊協定:
- 裝置實作項目應與 Android MTP 參考主機 (Android File Transfer) 相容 [Resources, 57]。
- 裝置實作項目應回報
0x00
的 USB 裝置類別。 - 裝置實作項目應回報的 USB 介面名稱為「MTP」。
如果裝置實作項目缺少 USB 連接埠,則必須透過其他方式 (例如網路檔案系統),讓主機電腦存取共用儲存空間的內容。
以下列舉兩個常見的例子說明。如果裝置實作包含 SD 卡插槽,以符合共用儲存空間的規定,則在銷售給使用者的裝置中,必須附上 1 GB 大小或更大的 FAT 格式 SD 卡,且必須預設為已掛載。或者,如果裝置實作使用內部固定儲存空間來滿足這項要求,則該儲存空間的大小必須為 1 GB 以上,且必須掛載至 /sdcard
(如果掛載至其他位置,則 /sdcard
必須是實體位置的符號連結)。
包含多個共用儲存空間路徑 (例如 SD 卡插槽和共用內部儲存空間) 的裝置實作項目應修改核心應用程式 (例如媒體掃描器和 ContentProvider),以便透明地支援儲存在這兩個位置的檔案。
7.7. USB
裝置實作應包含 USB 用戶端連接埠,並應包含 USB 主機連接埠。
如果裝置實作包含 USB 用戶端連接埠,請執行下列操作:
- 連接埠必須可連接至具備標準 USB-A 連接埠的 USB 主機
- 裝置端的連接埠應使用 micro USB 板型規格。對於搭載 Android 4.3 的現有裝置和新裝置,我們強烈建議您滿足這些 Android 4.3 要求條件,以便日後升級至平台新版本。
- 通訊埠應置於邊緣中間。裝置實作項目應將連接埠放在裝置底部 (依照自然方向),或為所有應用程式 (包括主畫面) 啟用軟體螢幕旋轉功能,以便在裝置以連接埠朝下的方式擺放時,正確顯示畫面。對於搭載 Android 4.3 的現有裝置和新裝置,我們強烈建議您滿足 Android 4.3 的這些需求條件,這樣才能升級至日後的平台版本。
- 如果裝置有其他連接埠 (例如非 USB 充電連接埠),則應與 micro-USB 連接埠位於同一側
- 必須允許連接至裝置的主機,使用 USB 大量儲存裝置或媒體傳輸通訊協定存取共用儲存裝置磁碟區的內容
- 必須實作 Android Open Accessory API 和規範,如 Android SDK 說明文件所述,且必須宣告支援硬體功能
android.hardware.usb.accessory
[Resources, 52] - 必須實作 USB 音訊類別,如 Android SDK 說明文件所述 [Resources, 66]
- 應實作 USB 電池充電規格支援功能 [Resources, 64] 強烈建議搭載 Android 4.3 的現有裝置和新裝置符合這些要求,以便日後升級至未來的平台版本
如果裝置實作包含 USB 主機連接埠,請執行下列操作:
- 可能會使用非標準的通訊埠板型規格,但如果是這種情況,必須隨附一條或多條可將通訊埠轉換為標準 USB-A 的傳輸線
- 必須實作 Android USB 主機 API,如 Android SDK 說明文件所述,且必須宣告支援硬體功能
android.hardware.usb.host
[Resources, 53]
裝置實作項目必須實作 Android Debug Bridge。如果裝置實作省略 USB 用戶端埠,則必須透過區域網路 (例如乙太網路或 802.11) 實作 Android 偵錯橋接器
8. 成效相容性
裝置實作項目必須符合下表中定義的 Android 4.3 相容裝置關鍵效能指標:
指標 | 效能門檻 | 備註 |
應用程式啟動時間 | 以下應用程式應在指定時間內啟動。
|
啟動時間是指完成應用程式預設活動載入作業的總時間,包括啟動 Linux 程序、將 Android 套件載入至 Dalvik VM,以及呼叫 onCreate 所需的時間。 |
同時申請 | 啟動多個應用程式後,重新啟動已啟動且正在執行的應用程式,所需時間必須少於原始啟動時間。 |
9. 安全性模型相容性
裝置實作項目必須實作與 Android 平台安全性模型一致的安全性模型,如 Android 開發人員說明文件中「API 中的安全性和權限」參考文件 [Resources, 54] 所定義。裝置實作方式必須支援自行簽署應用程式的安裝作業,且不必向任何第三方/主管機關索取額外的權限/憑證。具體來說,相容裝置必須支援下列子節點所述的安全機制。
9.1. 權限
裝置實作項目必須支援 Android 權限模型,如 Android 開發人員說明文件所定義 [Resources, 54]。具體來說,導入方式必須強制執行 SDK 說明文件中定義的每項權限;不得省略、變更或忽略任何權限。如果新權限 ID 字串不在 android.* 命名空間中,實作可能會新增額外權限。
9.2. UID 和程序隔離
裝置實作項目必須支援 Android 應用程式沙箱模型,其中每個應用程式都會以獨特的 Unix 風格 UID 執行,並在個別程序中執行。裝置實作必須支援以相同 Linux 使用者 ID 執行多個應用程式,前提是應用程式已正確簽署及建構,如安全性和權限參考資料所定義 [資源, 54]。
9.3. 檔案系統權限
裝置實作項目必須支援安全性和權限參考資料中定義的 Android 檔案存取權限模式 [Resources, 54]。
9.4. 替代執行環境
裝置實作項目可能包含執行應用程式的執行階段環境,這些執行階段環境會使用其他軟體或技術 (而非 Dalvik 虛擬機器或原生程式碼) 執行應用程式。不過,這類替代執行環境不得危及 Android 安全性模型或已安裝 Android 應用程式的安全性,如本節所述。
替代執行階段本身必須是 Android 應用程式,並遵守標準 Android 安全性模型,如第 9 節其他部分所述。
替代執行階段不得授予存取權,以便存取透過 <uses-permission>
機制在執行階段的 AndroidManifest.xml 檔案中未要求的權限所保護的資源。
替代執行階段絕對不允許應用程式使用受限於系統應用程式的 Android 權限保護的功能。
替代執行階段必須遵守 Android 沙箱模型。具體違規事項如下:
- 替代執行階段應透過 PackageManager 將應用程式安裝到個別的 Android 沙箱 (也就是 Linux 使用者 ID 等)
- 替代執行階段可提供單一 Android 沙箱,供所有使用替代執行階段的應用程式共用
- 替代執行階段和使用替代執行階段的安裝應用程式,不得重複使用裝置上安裝的任何其他應用程式的沙箱,除非透過共用使用者 ID 和簽署憑證的標準 Android 機制
- 替代執行階段不得啟動、授予或授予其他 Android 應用程式對應的沙箱存取權
替代執行階段不得啟動、授予或授予其他應用程式任何超級使用者 (root) 或其他使用者 ID 的權限。
替代執行階段的 .apk 檔案可納入裝置實作項目的系統映像檔,但必須使用與裝置實作項目中其他應用程式簽署金鑰不同的金鑰進行簽署。
安裝應用程式時,替代執行階段必須針對應用程式使用的 Android 權限,取得使用者的同意。也就是說,如果應用程式需要使用具有對應 Android 權限 (例如相機、GPS 等) 的裝置資源,替代執行階段必須通知使用者,應用程式將可存取該資源。如果執行階段環境未以這種方式記錄應用程式功能,則在安裝使用該執行階段的任何應用程式時,執行階段環境必須列出執行階段本身所持有的所有權限。
9.5. 支援多位使用者
Android 4.3 支援多用戶環境,並提供完整的使用者隔離功能 [Resources, 70]。
裝置實作方式必須符合下列多用戶支援相關規定 [Resources, 71]:
- 由於目前尚未定義多用戶裝置上的通訊 API 行為,因此宣告 android.hardware.telephony 的裝置實作不得啟用多用戶支援功能。
- 裝置實作項目必須為每位使用者實作與 Android 平台安全模型一致的安全模型,如 API 中的「安全性和權限」參考文件所定義 [Resources, 54]
- Android 4.3 支援受限設定檔,這項功能可讓裝置擁有者管理其他使用者及其裝置功能。有了受限制的設定檔,裝置擁有者就能快速設定其他使用者可使用的獨立環境,並在這些環境中管理應用程式的精細限制。支援多位使用者的裝置實作方式,必須支援受限制的設定檔。上游 Android 開放原始碼計畫包含符合這項需求的實作項目。
Android 裝置上的每個使用者例項都必須有獨立且隔離的外部儲存目錄。裝置實作可能會在相同的磁碟區或檔案系統中儲存多位使用者的資料。不過,裝置實作方式必須確保由特定使用者擁有並代為執行的應用程式,無法列出、讀取或寫入任何其他使用者擁有的資料。請注意,可移除式媒體 (例如 SD 卡插槽) 可讓使用者透過主機電腦存取其他使用者的資料。因此,如果使用可移除媒體的裝置實作項目啟用多使用者功能,則必須使用儲存在僅系統可存取的非可移除媒體上的金鑰,加密 SD 卡的內容。由於這會導致主機電腦無法讀取媒體,因此裝置實作必須切換至 MTP 或類似系統,讓主機電腦存取目前使用者的資料。因此,如果裝置實作使用可移除的媒體 [Resources, 72] 做為主要外部儲存空間,則可以啟用多使用者功能,但不應強制啟用。上游 Android 開放原始碼專案包含了針對應用程式外部儲存空間 API 使用裝置內部儲存空間的實作項目;裝置實作項目應使用這項設定和軟體實作項目。包含多個外部儲存空間路徑的裝置實作方式不得允許 Android 應用程式寫入次要外部儲存空間。
9.6. 付費簡訊警告
Android 4.3 支援針對任何傳送的付費簡訊警告使用者 [Resources, 73]。付費簡訊是指傳送至電信業者註冊服務的簡訊,可能會向使用者收費。宣告支援 android.hardware.telephony
的裝置實作項目,必須在傳送簡訊給使用者在裝置 /data/misc/sms/codes.xml
檔案中定義的規則號碼之前,先向使用者發出警告。上游 Android 開放原始碼專案提供符合這項需求的實作方式。
9.7. 核心安全性功能
Android 4.3 中的 Android Sandbox 包含可使用 SELinux 強制存取權控管系統 (MAC) 和 Linux 核心中的其他安全防護功能。裝置實作項目必須支援 SELinux MAC。請注意,上游 Android 開放原始碼計畫提供符合此需求的實作項目。
在 Android 架構下實作的 SELinux 或任何安全防護功能,都必須與現有應用程式相容。使用者和開發人員不應看到這些功能。這些功能不應由使用者或開發人員設定。如果任何用於設定政策的 API 會公開給可能影響其他應用程式的應用程式 (例如 Device Administration API),則 API 不得允許會破壞相容性的設定。為確保持續相容性,參考實作項目允許在寬鬆模式下使用 SELinux,並支援動態政策更新,而無須更新系統映像檔。使用 SELinux 的裝置實作方式必須支援此許可模式,並支援動態政策更新,以及記錄任何違反政策的行為,且不會導致應用程式發生錯誤或影響系統行為。使用 SELinux 的實作項目應從裝置上的 /sepolicy
檔案載入政策。上游 Android 開放原始碼專案提供符合這項需求的實作方式。裝置實作項目應使用 Android 開放原始碼計畫中的參考實作項目,且裝置實作項目必須與上游 Android 開放原始碼計畫相容。
10. 軟體相容性測試
裝置實作項目必須通過本節所述的所有測試。
不過,請注意,沒有任何軟體測試套件是完全全面的。因此,我們強烈建議裝置實作者盡可能減少對 Android 4.3 參考和偏好實作項目的變更次數,這些項目可從 Android 開放原始碼計畫取得。這樣一來,您就能盡量降低引入錯誤的風險,避免出現需要重做及潛在裝置更新的不相容性問題。
10.1. 相容性測試套件
裝置實作項目必須使用裝置上的最終發布軟體,通過 Android 相容性測試套件 (CTS) [Resources, 2] [Resources, 2] Resources, 2]。此外,裝置實作人員應盡可能使用 Android 開放原始碼樹狀結構中的參考實作項目,並務必在 CTS 中出現模糊情況,以及參考原始碼的任何部分重新實作時,確保相容性。
CTS 設計用於在實際裝置上執行。就像任何軟體一樣,CTS 本身可能含有錯誤。CTS 的版本會與此相容性定義獨立,且可能會針對 Android 4.3 發布多個 CTS 修訂版本。裝置實作項目必須在裝置軟體完成時,通過最新的 CTS 版本。
10.2. CTS 驗證器
裝置實作項目必須在 CTS Verifier 中正確執行所有適用的案例。CTS 驗證器包含在相容性測試套件中,並由人工操作人員執行,用於測試自動化系統無法測試的功能,例如相機和感應器的正確運作。
CTS Verifier 可測試多種硬體,包括部分選用硬體。裝置實作必須通過所有硬體測試;舉例來說,如果裝置有加速計,就必須在 CTS Verifier 中正確執行加速計測試案例。針對這份相容性定義文件中標示為選用的功能,測試案例可省略或略過。
如上所述,每部裝置和每個版本都必須正確執行 CTS Verifier。不過,由於許多版本都非常相似,因此裝置實作者不應在僅有細微差異的版本上明確執行 CTS 驗證工具。具體來說,如果裝置實作項目與已通過 CTS 驗證器的實作項目僅在所包含的語言代碼、品牌等方面有所差異,則可省略 CTS 驗證器測試。
10.3. 參考應用程式
裝置導入者必須使用下列開放原始碼應用程式,測試導入相容性:
- 「Apps for Android」應用程式 [Resources, 55]
- Replica Island (可在 Google Play 商店取得)
上述每個應用程式都必須在實作項目上正確啟動及運作,才能視為相容。
11. 可更新軟體
裝置實作項目必須包含替換整個系統軟體的機制。這項機制不必執行「即時」升級,也就是說,可能需要重新啟動裝置。
只要可以取代裝置上預先安裝的軟體,您可以使用任何方法。舉例來說,下列任何一種方法都能滿足這項要求:
- 透過重新啟動進行離線更新的無線更新 (OTA) 下載
- 透過主機電腦的 USB 連線進行「連線」更新
- 透過重新啟動和從可移除儲存空間的檔案更新「離線」更新
使用的更新機制必須支援不清除使用者資料的更新作業。也就是說,更新機制必須保留應用程式私人資料和應用程式共用資料。請注意,上游 Android 軟體包含符合此要求的更新機制。
如果在裝置導入後 (但在與 Android 相容性團隊協商後決定的合理產品壽命期間內) 發現錯誤,導致影響第三方應用程式的相容性,裝置導入者就必須透過可用的軟體更新修正錯誤,且可依照剛剛所述機制套用。
12. 與我們聯絡
如有任何問題,請透過 compatibility@android.com 與文件作者聯絡,以便釐清問題,並提出您認為文件未涵蓋的任何問題。