修訂版 1
最後更新時間:2015 年 1 月 12 日
版權所有 © 2015,Google Inc. 保留所有權利。
相容性@android.com
目錄
一、簡介
本文檔列舉了裝置與 Android 5.0 相容必須滿足的要求。
「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」和「OPTIONAL」的使用符合 IETF 標準RFC2119 [參考資料, 1 ] 中定義。
在本文檔中,「裝置實現者」或「實施者」是指開發運行 Android 5.0 的硬體/軟體解決方案的個人或組織。 「設備實現」或「實現」是這樣開發的硬體/軟體解決方案。
若要被視為與 Android 5.0 相容,裝置實作必須符合本相容性定義中提出的要求,包括透過引用納入的任何文件。
如果第 10 節中所述的此定義或軟體測試是沉默的、不明確的或不完整的,則設備實現者有責任確保與現有實現的兼容性。
因此,Android 開源專案 [參考資料, 2 ] 既是 Android 的參考實現,也是首選實現。強烈鼓勵設備實現者最大程度地基於 Android 開源專案提供的「上游」原始程式碼來實現其實現。雖然假設某些組件可以替換為替代實現,但強烈建議不要這樣做,因為通過軟體測試將變得更加困難。實作者有責任確保與標準 Android 實作完全行為相容,包括相容性測試套件。最後,請注意,本文檔明確禁止某些組件替換和修改。
在第 14 節中列出的許多資源直接或間接源自 Android SDK,並且在功能上與該 SDK 文件中的資訊相同。如果本相容性定義或相容性測試套件與 SDK 文件不一致,則 SDK 文件被視為具有權威性。在第 14 節中包含的參考文獻中提供的任何技術細節均被視為包含在本相容性定義中。
2. 設備類型
雖然 Android 開源專案已用於實現各種裝置類型和外形尺寸,但架構和相容性要求的許多方面都針對手持裝置進行了最佳化。從 Android 5.0 開始,Android 開源專案旨在涵蓋本節中所述的更廣泛的裝置類型。
Android 手持裝置是指通常手持使用的 Android 裝置實現,例如 MP3 播放器、手機和平板電腦。 Android 手持裝置實作:
- 設備中必須嵌入觸控螢幕
- 必須有提供移動性的電源,例如電池
Android TV 裝置是指一種Android 裝置實現,它是一個娛樂介面,用於為坐在大約10 英尺外的用戶消費數位媒體、電影、遊戲、應用程式和/或直播電視(「向後靠」或“10 英尺使用者介面”) ”)。 Android 電視裝置:
- 必須具有嵌入式螢幕或包含視訊輸出端口,例如 VGA、HDMI 或用於顯示的無線端口
- 必須聲明 android.software.leanback 和 android.hardware.type.television 功能 [參考資料,3 ]
Android Watch 裝置是指旨在佩戴在身體上(可能戴在手腕上)的 Android 裝置實現,並且:
- 螢幕的物理對角線長度必須在 1.1 到 2.5 吋範圍內
- 必須聲明 android.hardware.type.watch 功能
- 必須支援 uiMode = UI_MODE_TYPE_WATCH [資源,4 ]
所有不適合上述任何裝置類型的 Android 裝置實作仍然必須滿足本文檔中與 Android 5.0 相容的所有要求,除非該要求被明確描述為僅適用於特定的 Android 裝置類型。
2.1 設備配置
這是按設備類型劃分的硬體配置主要差異的摘要。 (空單元格表示“可以”)。此表並未涵蓋所有配置;有關更多詳細信息,請參閱相關硬體部分。
類別 | 特徵 | 部分 | 手持式 | 電視 | 手錶 | 其他 |
輸入 | 方向鍵 | 必須 | ||||
觸控螢幕 | 必須 | 必須 | 應該 | |||
麥克風 | 必須 | 應該 | 必須 | 應該 | ||
感應器 | 加速度計 | 應該 | 應該 | 應該 | ||
全球定位系統 | 應該 | |||||
連接性 | 無線上網 | 應該 | 必須 | 應該 | ||
無線直連 | 應該 | 應該 | 應該 | |||
藍牙 | 應該 | 必須 | 必須 | 應該 | ||
藍牙低功耗 | 應該 | 必須 | 應該 | 應該 | ||
USB 週邊/主機模式 | 應該 | 應該 | ||||
輸出 | 揚聲器和/或音訊輸出端口 | 必須 | 必須 | 必須 |
3、軟體
3.1.託管 API 相容性
託管的 Dalvik 字節碼執行環境是 Android 應用程式的主要工具。 Android 應用程式介面 (API) 是向在託管執行時間環境中運行的應用程式公開的一組 Android 平台介面。裝置實作必須提供 Android SDK [參考資料,5 ] 公開的任何記錄的 API 或上游 Android 原始碼中用「@SystemApi」標記修飾的任何 API 的完整實現,包括所有記錄的行為。
設備實作不得省略任何託管 API、更改 API 介面或簽章、偏離記錄的行為或包含無操作,除非本相容性定義明確允許。
此相容性定義允許裝置實作省略 Android 包含的 API 的某些類型的硬體。在這種情況下,API 必須仍然存在並以合理的方式運行。有關此場景的具體要求,請參閱第 7 節。
3.2.軟 API 相容性
除了第 3.1 節中的託管 API 之外,Android 還包括一個重要的僅運行時「軟」API,其形式為意圖、權限和 Android 應用程式的類似方面,這些方面無法在應用程式編譯時強制執行。
3.2.1.權限
設備實現者必須支援並強制執行權限參考頁 [參考資料,6]中記錄的所有權限常數。請注意,第 9 節列出了與 Android 安全模型相關的其他要求。
3.2.2.建構參數
Android API 在 android.os.Build 類別 [參考資料,7 ] 上包含許多常數,用於描述目前裝置。為了跨裝置實作提供一致、有意義的值,下表包含裝置實作必須遵守的這些值的格式的附加限制。
範圍 | 細節 |
版本.發布 | 目前執行的 Android 系統的版本,採用人類可讀的格式。該欄位必須具有 [ Resources, 8]中定義的字串值之一。 |
版本.SDK | 目前執行的 Android 系統的版本,採用第三方應用程式程式碼可存取的格式。對於 Android 5.0,此欄位必須具有整數值 21。 |
版本.SDK_INT | 目前執行的 Android 系統的版本,採用第三方應用程式程式碼可存取的格式。對於 Android 5.0,此欄位必須具有整數值 21。 |
版本.增量 | 裝置實現者選擇的值,以人類可讀的格式指定目前正在執行的 Android 系統的特定版本。該值不得重複用於提供給最終用戶的不同建置。此欄位的典型用途是指示使用哪個版本號或原始碼控制變更標識符來產生版本。該欄位的具體格式沒有要求,但不能為 null 或空字串 ("")。 |
木板 | 設備實現者選擇的值,以人類可讀的格式標識設備使用的特定內部硬體。此欄位的一個可能用途是指示為設備供電的板的特定版本。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^[a-zA-Z0-9_-]+$」。 |
品牌 | 反映最終用戶所知的與設備相關的品牌名稱的值。必須採用人類可讀的格式,並且應該代表設備的製造商或設備銷售的公司品牌。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^[a-zA-Z0-9_-]+$」。 |
支援_ABIS | 本機程式碼的指令集名稱(CPU 類型 + ABI 約定)。請參閱第 3.3 節。本機 API 相容性。 |
SUPPORTED_32_BIT_ABIS | 本機程式碼的指令集名稱(CPU 類型 + ABI 約定)。請參閱第 3.3 節。本機 API 相容性。 |
SUPPORTED_64_BIT_ABIS | 本機程式碼的第二指令集(CPU 類型 + ABI 約定)的名稱。請參閱第 3.3 節。本機 API 相容性。 |
CPU_ABI | 本機程式碼的指令集名稱(CPU 類型 + ABI 約定)。請參閱第 3.3 節。本機 API 相容性。 |
CPU_ABI2 | 本機程式碼的第二指令集(CPU 類型 + ABI 約定)的名稱。請參閱第 3.3 節。本機 API 相容性。 |
裝置 | 設備實現者選擇的值,包含標識硬體功能配置和設備工業設計的開發名稱或代號。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^[a-zA-Z0-9_-]+$」。 |
指紋 | 唯一標識此建置的字串。它應該是合理的人類可讀的。它必須遵循以下模板: $(品牌)/$(產品)/$(設備):$(版本.發布)/$(ID)/$(版本.增量):$(類型)/$(標籤) 例如: acme/myproduct/mydevice:5.0/LRWXX/3359:userdebug/測試金鑰 指紋不得包含空白字元。如果上述模板中包含的其他字段具有空白字符,則必須在構建指紋中將它們替換為另一個字符,例如下劃線(“_”)字符。此欄位的值必須可編碼為 7 位元 ASCII。 |
硬體 | 硬體的名稱(來自核心命令列或/proc)。它應該是合理的人類可讀的。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^[a-zA-Z0-9_-]+$」。 |
主持人 | 一個字串,以人類可讀的格式唯一標識建構建構的主機。該欄位的具體格式沒有要求,但不能為 null 或空字串 ("")。 |
ID | 設備實現者選擇的標識符,用於引用特定版本,採用人類可讀的格式。該欄位可以與 android.os.Build.VERSION.INCRMENTAL 相同,但應該是一個對於最終用戶區分軟體版本足夠有意義的值。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^[a-zA-Z0-9._-]+$」。 |
製造商 | 產品原始設備製造商 (OEM) 的商品名稱。該欄位的具體格式沒有要求,但不能為 null 或空字串 ("")。 |
模型 | 設備實現者選擇的值,包含最終使用者已知的設備名稱。此名稱應與設備行銷和銷售給最終用戶時使用的名稱相同。該欄位的具體格式沒有要求,但不能為 null 或空字串 ("")。 |
產品 | 設備實施者選擇的值,包含特定產品 (SKU) 的開發名稱或程式碼名稱,該產品在同一品牌中必須是唯一的。必須是人類可讀的,但不一定供最終用戶查看。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^[a-zA-Z0-9_-]+$」。 |
串口 | 必須可用的硬體序號。此欄位的值必須可編碼為 7 位元 ASCII 並符合正規表示式「^([a-zA-Z0-9]{6,20})$」。 |
標籤 | 由設備實現者選擇的以逗號分隔的標籤列表,可進一步區分建置。此欄位必須具有與三種典型 Android 平台簽章配置相對應的值之一:release-keys、dev-keys、test-keys。 |
時間 | 表示建構發生時間的時間戳記的值。 |
類型 | 由設備實現者選擇的值,指定建置的運行時配置。此欄位必須具有與三種典型 Android 運行時配置相對應的值之一:user、userdebug 或 eng。 |
使用者 | 產生建置的使用者(或自動使用者)的名稱或使用者 ID。該欄位的具體格式沒有要求,但不能為 null 或空字串 ("")。 |
3.2.3.意圖相容性
裝置實作必須遵循 Android 的鬆散耦合意圖系統,如下節所述。 「榮幸」意味著裝置實現者必須提供一個 Android Activity 或 Service,指定一個匹配的 Intent 過濾器,該過濾器綁定到每個指定的 Intent 模式並為其實現正確的行為。
3.2.3.1.核心應用意圖
Android 意圖允許應用程式元件向其他 Android 元件請求功能。 Android 上游項目包括被視為核心 Android 應用程式的應用程式列表,這些應用程式實現了多種意圖模式來執行常見操作。 Android 的核心應用程式是:
- 英式鐘
- 瀏覽器
- 日曆
- 聯絡方式
- 畫廊
- 全球搜尋
- 啟動器
- 音樂
- 設定
裝置實作應該包括適當的核心 Android 應用程序,但必須包括一個元件,該元件實現由這些核心 Android 應用程式的所有「公共」活動或服務元件定義的相同意圖模式。請注意,當屬性 android:exported 不存在或值為 true 時,Activity 或 Service 元件被視為「公有」。
3.2.3.2.意圖覆蓋
由於 Android 是一個可擴展平台,裝置實作必須允許第三方應用程式覆蓋第 3.2.3.1 節中引用的每個意圖模式。上游 Android 開源實作預設允許這樣做;設備實現者不得為系統應用程式對這些意圖模式的使用附加特殊權限,或阻止第三方應用程式綁定到這些模式並承擔對這些模式的控制。該禁止具體包括但不限於停用「選擇器」使用者介面,該使用者介面允許使用者在全部處理相同意圖模式的多個應用程式之間進行選擇。
但是,如果預設活動為資料 URI 提供更具體的篩選器,則裝置實作可以為特定 URI 模式(例如 http://play.google.com)提供預設活動。例如,指定資料 URI「http://www.android.com」的 Intent 過濾器比「http://」的瀏覽器過濾器更具體。設備實作必須為使用者提供一個使用者介面來修改意圖的預設活動。
3.2.3.3.意圖命名空間
裝置實作不得包含任何使用 Android.* 或 com.android.* 命名空間中的 ACTION、CATEGORY 或其他鍵字串來支援任何新意圖或廣播意圖模式的 Android 元件。裝置實現者不得包含任何使用 ACTION、CATEGORY 或屬於另一個組織的套件空間中的其他關鍵字串來遵循任何新意圖或廣播意圖模式的 Android 元件。設備實現者不得更改或擴展第 3.2.3.1 節中列出的核心應用程式使用的任何意圖模式。設備實作可以包括使用與其自己的組織明確相關的命名空間的意圖模式。該禁止類似於3.6 節中針對 Java 語言類別指定的禁止。
3.2.3.4.廣播意圖
第三方應用程式依靠平台廣播某些意圖,以通知它們硬體或軟體環境的變化。 Android 相容裝置必須廣播公共廣播意圖以回應適當的系統事件。 SDK 文件中描述了廣播意圖。
3.2.3.5.預設應用程式設定
Android 包含的設定可讓用戶輕鬆選擇預設應用程序,例如主螢幕或簡訊。在有意義的情況下,設備實作必須提供類似的設定選單,並與 SDK 文件中所述的意圖過濾器模式和 API 方法相容,如下所示。
設備實現:
- 如果裝置實作報表 android.software.home_screen [資源,10] ,則必須遵守 android.settings.HOME_SETTINGS 意圖,以顯示主畫面的預設應用程式設定選單
- 如果裝置實作報表 android.hardware.telephony [資源,9 ],則必須提供一個設定選單,該選單將呼叫 android.provider.Telephony.ACTION_CHANGE_DEFAULT 意圖來顯示一個對話框以變更預設 SMS 應用程式
- 如果裝置實作報表 android.hardware.nfc.hce,則必須遵守 android.settings.NFC_PAYMENT_SETTINGS 意圖,以顯示點擊付款的預設應用程式設定選單 [資源,10]
3.3.本機 API 相容性
3.3.1 應用程式二進位介面
託管 Dalvik 字節碼可以呼叫應用程式 .apk 檔案中提供的本機程式碼,作為針對適當裝置硬體架構編譯的 ELF .so 檔案。由於本機程式碼高度依賴底層處理器技術,Android 在 Android NDK 中定義了許多應用程式二進位介面 (ABI)。裝置實作必須與一個或多個定義的 ABI 相容,並且必須實現與 Android NDK 的兼容性,如下所示。
如果裝置實現包含對 Android ABI 的支持,則:
- 必須支援在託管環境中執行的程式碼,以使用標準 Java 本機介面 (JNI) 語義呼叫本機程式碼
- 必須與下面列表中每個所需的庫來源相容(即標頭相容)和二進位相容(對於 ABI)
- 如果支援任何 64 位元 ABI,則必須支援等效的 32 位元 ABI
- 必須透過 android.os.Build.SUPPORTED_ABIS、android.os.Build.SUPPORTED_32_BIT_ABIS 和 android.os.Build.SUPPORTED_64_BIT_ABIS 參數來準確報告裝置支援的本機應用程式二進位介面 (ABI),每個清單都是逗號分隔的ABI 從最受青睞的到最不受青睞的排序
- 必須透過上述參數僅報告最新版本的 Android NDK(《NDK 程式設計師指南 | NDK 程式設計師指南》)中記錄的 ABI。 ABI 管理」位於 docs/ 目錄中
- 應使用上游 Android 開源專案中提供的源代碼和頭文件進行構建
以下本機程式碼 API 必須可用於包含本機程式碼的應用程式:
- libc(C 庫)
- libm(數學庫)
- 對 C++ 的最低支持
- JNI介面
- liblog(Android 日誌記錄)
- libz(Zlib 壓縮)
- libdl(動態連結器)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so(OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libEGL.so(原生 OpenGL 表面管理)
- libjnigraphics.so
- libOpenSLES.so(OpenSL ES 1.0.1 音訊支援)
- libOpenMAXAL.so(OpenMAX AL 1.0.1 支援)
- libandroid.so(原生 Android 活動支援)
- libmediandk.so(原生媒體 API 支援)
- 支援 OpenGL,如下所述
請注意,Android NDK 的未來版本可能會引入對其他 ABI 的支援。如果設備實作與現有的預定義 ABI 不相容,則它根本無法報告對任何 ABI 的支援。
請注意,裝置實作必須包含 libGLESv3.so,並且它必須符號連結(符號連結)到 libGLESv2.so。反過來,必須匯出 NDK 版本 android-21 中定義的所有 OpenGL ES 3.1 和 Android 擴充包 [資源,11 ] 函數符號。儘管所有符號都必須存在,但只有裝置實際支援的 OpenGL ES 版本和擴充功能的相應功能必須完全實作。
本機程式碼相容性具有挑戰性。因此,強烈鼓勵裝置實現者使用上游 Android 開源專案中列出的上述程式庫的實作。
3.4.網路相容性
3.4.1.網頁視圖相容性
android.webkit.Webview API 的完整實作可以在 Android Watch 裝置上提供,但必須在所有其他類型的裝置實作上提供。 |
平台功能 android.software.webview 必須在提供 android.webkit.WebView API 完整實作的任何裝置上報告,且不得在沒有完整 API 實作的裝置上報告。 Android 開源實作使用 Chromium 專案中的程式碼來實作 android.webkit.WebView [參考資料,12 ]。由於為 Web 渲染系統開發全面的測試套件是不可行的,因此設備實作者必須在 WebView 實作中使用 Chromium 的特定上游版本。具體來說:
- 裝置 android.webkit.WebView 實作必須基於 Android 5.0 上游 Android 開源專案的 Chromium 建置。此版本包括一組針對 WebView 的特定功能和安全修復程序 [參考資料,13 ]。
- WebView 報告的用戶代理字串必須採用以下格式:
Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD)) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- $(VERSION) 字串的值必須與 android.os.Build.VERSION.RELEASE 的值相同。
- $(MODEL) 字串的值必須與 android.os.Build.MODEL 的值相同。
- $(BUILD) 字串的值必須與 android.os.Build.ID 的值相同。
- $(CHROMIUM_VER) 字串的值必須是上游 Android 開源專案中 Chromium 的版本。
- 設備實作可以在用戶代理字串中省略 Mobile。
WebView 元件應該包含對盡可能多的 HTML5 功能的支持,並且如果它支援該功能,則應該符合 HTML5 規範 [參考資料,14 ]。
3.4.2.瀏覽器相容性
Android 電視和手錶設備可以省略瀏覽器應用程序,但必須支援第 3.2.3.1 節中所述的公共意圖模式。所有其他類型的裝置實作必須包括用於一般使用者 Web 瀏覽的獨立瀏覽器應用程式。 |
獨立瀏覽器可以基於 WebKit 以外的瀏覽器技術。但是,即使使用備用瀏覽器應用程序,提供給第三方應用程式的 android.webkit.WebView 元件也必須基於 WebKit,如3.4.1 節中所述。
實作可以在獨立的瀏覽器應用程式中提供自訂使用者代理字串。
獨立的瀏覽器應用程式(無論是基於上游 WebKit 瀏覽器應用程式還是第三方替代品)應該盡可能支援 HTML5 [參考資料,14 ]。設備實作至少必須支援與 HTML5 相關的每個 API:
- 應用程式快取/離線操作 [資源,15 ]
- 這
此外,設備實作必須支援 HTML5/W3C webstorage API [參考資料,18 ],並且應該支援 HTML5/W3C IndexedDB API [參考資料,19 ]。請注意,隨著 Web 開發標準機構逐漸轉向支援 IndexedDB 而不是 Webstorage,IndexedDB 預計將成為 Android 未來版本中的必要組件。
3.5. API 行為相容性
每個 API 類型(託管、軟體、本機和 Web)的行為必須與上游 Android 開源專案的首選實作一致 [參考資料, 2 ]。一些特定的兼容性領域是:
- 設備不得更改標準意圖的行為或語意。
- 設備不得更改特定類型的系統元件(例如服務、活動、ContentProvider 等)的生命週期或生命週期語意。
- 設備不得更改標準權限的語意。
上面的列表並不全面。相容性測試套件 (CTS) 測試平台的重要部分(但不是全部)的行為相容性。實作者有責任確保與 Android 開源專案的行為相容性。因此,裝置實現者應該盡可能使用透過 Android 開源專案提供的原始程式碼,而不是重新實作系統的重要部分。
3.6. API命名空間
Android 遵循 Java 程式語言定義的套件和類別命名空間約定。為了確保與第三方應用程式的相容性,裝置實作者不得對這些套件命名空間進行任何禁止的修改(見下文):
- java.*
- javax.*
- 太陽。*
- 安卓。*
- com.android.*
禁止的修改包括:
- 裝置實作不得透過更改任何方法或類別簽名,或刪除類別或類別欄位來修改 Android 平台上公開的 API。
- 設備實作者可以修改 API 的底層實現,但此類修改不得影響任何公開暴露的 API 的規定行為和 Java 語言簽章。
- 設備實作者不得為上述 API 新增任何公開暴露的元素(例如類別或接口,或現有類別或介面的欄位或方法)。
「公開暴露的元素」是指未使用上游 Android 原始碼中使用的「@hide」標記修飾的任何構造。換句話說,裝置實作者不得公開新的 API 或更改上述命名空間中的現有 API。設備實現者可以進行僅限內部的修改,但這些修改不得公佈或以其他方式暴露給開發人員。
設備實作者可以新增自訂 API,但任何此類 API 不得位於另一個組織擁有或引用另一個組織的命名空間中。例如,裝置實作者不得將 API 新增至 com.google.* 或類似的命名空間:只有 Google 可以做到。同樣,Google 不得將 API 新增至其他公司的命名空間。此外,如果裝置實作包含標準 Android 命名空間之外的自訂 API,則這些 API 必須打包在 Android 共用程式庫中,以便只有明確使用它們的應用程式(透過
如果設備實現者建議改進上述包命名空間之一(例如透過向現有 API 添加有用的新功能,或添加新 API),則實現者應該訪問source.android.com並開始貢獻更改和的過程代碼,根據該網站上的信息。
請注意,上述限制對應於 Java 程式語言中命名 API 的標準約定;本節的目的只是為了加強這些約定,並透過將其納入此相容性定義來使其具有約束力。
3.7.運行時相容性
設備實作必須支援完整的 Dalvik 可執行檔 (DEX) 格式以及 Dalvik 字節碼規格和語意 [參考資料, 20 ]。設備實作者應該使用 ART、Dalvik 可執行格式的參考上游實作以及參考實作的套件管理系統。
裝置實作必須配置 Dalvik 運行時以根據上游 Android 平台分配內存,並如下表所示。 (有關螢幕尺寸和螢幕密度定義,請參閱第 7.1.1 節。)
請注意,下面指定的記憶體值被視為最小值,設備實作可以為每個應用程式分配更多記憶體。
螢幕佈局 | 螢幕密度 | 最小應用記憶體 |
小/正常 | 120 dpi(LDPI) | 16MB |
160 dpi (mdpi) | ||
213 dpi(電視dpi) | 32MB | |
240 dpi(高清) | ||
320 dpi(xhdpi) | 64MB | |
400dpi (400dpi) | 96MB | |
480 dpi (xxhdpi) | 128MB | |
560dpi(560dpi) | 192MB | |
640 dpi (xxxhdpi) | 256MB | |
大的 | 120 dpi(LDPI) | 16MB |
160 dpi (mdpi) | 32MB | |
213 dpi(電視dpi) | 64MB | |
240 dpi(高清) | ||
320 dpi(xhdpi) | 128MB | |
400dpi (400dpi) | 192MB | |
480 dpi (xxhdpi) | 256MB | |
560dpi(560dpi) | 384MB | |
640 dpi (xxxhdpi) | 512MB | |
超大 | 160 dpi (mdpi) | 64MB |
213 dpi(電視dpi) | 96MB | |
240 dpi(高清) | ||
320 dpi(xhdpi) | 192MB | |
400dpi (400dpi) | 288MB | |
480 dpi (xxhdpi) | 384MB | |
560dpi(560dpi) | 576MB | |
640 dpi (xxxhdpi) | 768MB |
3.8.使用者介面相容性
3.8.1.啟動器(主螢幕)
Android 包括啟動器應用程式(主畫面)並支援第三方應用程式來取代裝置啟動器(主畫面)。允許第三方應用程式替換裝置主畫面的裝置實作必須聲明平台功能 android.software.home_screen。
3.8.2.小部件
小部件對於所有 Android 裝置實作都是可選的,但 Android 手持裝置應該支援。 |
Android 定義了元件類型以及相應的 API 和生命週期,允許應用程式向最終用戶公開「AppWidget」[參考資料,21 ],強烈建議手持裝置實作支援該功能。支援在主畫面上嵌入小工具的裝置實作必須滿足以下要求並聲明對平台功能 android.software.app_widgets 的支援。
- 裝置啟動器必須包含對 AppWidget 的內建支持,並公開使用者介面功能以直接在啟動器中新增、配置、檢視和刪除 AppWidget。
- 設備實作必須能夠渲染標準網格大小為 4 x 4 的小工具。有關詳細信息,請參閱 Android SDK 文件 [參考資料,21 ] 中的應用程式小工具設計指南。
- 包括鎖定螢幕的支援的裝置實作可以支援鎖定螢幕上的應用程式小工具。
3.8.3.通知
Android 包含的 API 允許開發人員使用裝置的硬體和軟體功能來通知使用者值得注意的事件 [參考資料,22 ]。
某些 API 允許應用程式使用硬體(特別是聲音、振動和燈光)執行通知或吸引註意力。設備實作必須支援使用硬體功能的通知,如 SDK 文件所述,並儘可能支援設備實現硬體。例如,如果裝置實作包含振動器,則它必須正確實作振動 API。如果設備實作缺少硬件,則對應的 API 必須實作為無操作。此行為在第 7 節中有進一步詳細介紹。
此外,實作必須正確呈現 API [資源,23 ] 或狀態/系統列圖示樣式指南 [資源,24 ] 中提供的所有資源(圖示、聲音檔案等)。裝置實現者可以為通知提供替代的使用者體驗,而不是參考 Android 開源實作提供的體驗;然而,如上所述,此類替代通知系統必須支援現有通知資源。
Android 支援各種通知,例如:
- 豐富的通知-持續通知的互動式視圖。
- 提示通知 -互動式視圖使用者可以在不離開目前應用程式的情況下執行或關閉。
- 鎖定螢幕通知- 在鎖定畫面上顯示的通知,可對可見性進行精細控制。
裝置實作必須正確顯示和執行這些通知,包括 Android API [資源,25]中記錄的標題/名稱、圖示、文字。
Android 包含通知偵聽器服務 API,允許應用程式(一旦使用者明確啟用)在發布或更新通知時接收所有通知的副本。裝置實作必須正確、及時地將通知完整傳送至所有此類已安裝和使用者啟用的偵聽器服務,包括附加到通知對象的任何和所有元資料。
3.8.4.搜尋
Android 包含 API [參考資料,26 ],允許開發人員將搜尋合併到他們的應用程式中,並將應用程式的資料公開到全域系統搜尋中。一般來說,此功能由單一系統範圍的使用者介面組成,允許使用者輸入查詢、在使用者鍵入時顯示建議並顯示結果。 Android API 允許開發人員重複使用此介面在自己的應用程式中提供搜索,並允許開發人員向通用全域搜尋使用者介面提供結果。
Android 裝置實作應該包括全域搜索,這是一個單一的、共享的、系統範圍的搜尋使用者介面,能夠響應用戶輸入提供即時建議。設備實作應該實作允許開發人員重複使用此使用者介面以在自己的應用程式中提供搜尋的 API。實作全域搜尋介面的裝置實作必須實作允許第三方應用程式在全域搜尋模式下執行時向搜尋框新增建議的 API。如果沒有安裝使用此功能的第三方應用程序,則預設行為應該是顯示網路搜尋引擎結果和建議。
3.8.5。吐司
應用程式可以使用「Toast」API 向最終使用者顯示短的非模態字串,這些字串會在短暫的時間後消失[參考資料,27 ]。裝置實作必須以某種高可見性的方式向最終使用者顯示應用程式的 Toast。
3.8.6。主題
Android 提供「主題」作為應用程式在整個 Activity 或應用程式中應用樣式的機制。
Android 包含一個「Holo」主題系列,作為一組定義的樣式,供應用程式開發人員在想要匹配 Android SDK 定義的 Holo 主題外觀和感覺時使用[參考資料,28 ]。裝置實作不得更改向應用程式公開的任何 Holo 主題屬性 [參考資料,29 ]。
Android 5.0 包含一個「Material」主題系列,作為一組定義的樣式,供應用程式開發人員在想要在各種不同的 Android 裝置類型上匹配設計主題的外觀和感覺時使用。裝置實作必須支援「Material」主題系列,且不得更改任何 Material 主題屬性或其向應用程式公開的資產 [參考資料,30 ]。
Android 還包含一個「裝置預設」主題系列,作為一組定義的樣式,供應用程式開發人員在想要匹配裝置實現者定義的裝置主題的外觀和風格時使用。設備實作可以修改向應用程式公開的設備預設主題屬性 [參考資料,29 ]。
Android 支援具有半透明系統列的新變體主題,允許應用程式開發人員使用其應用程式內容填充狀態列和導覽列後面的區域。為了在此配置中實現一致的開發人員體驗,在不同的裝置實作中保持狀態列圖示樣式非常重要。因此,Android 裝置實作必須對系統狀態圖示(例如訊號強度和電池電量)和系統發出的通知使用白色,除非圖示指示有問題的狀態 [參考資料,29 ]。
3.8.7.動態壁紙
Android 定義了一種元件類型以及相應的 API 和生命週期,允許應用程式向最終用戶公開一個或多個「動態壁紙」[參考資料,31 ]。動態壁紙是動畫、圖案或具有有限輸入功能的類似圖像,在其他應用程式後面顯示為壁紙。
如果硬體能夠以合理的幀速率運行所有動態壁紙,且沒有功能限制,並且不會對其他應用程式產生不利影響,則該硬體被認為能夠可靠地運行動態壁紙。如果硬體限制導致壁紙和/或應用程式崩潰、故障、消耗過多的 CPU 或電池電量,或以不可接受的低幀速率運行,則該硬體被視為無法運行動態壁紙。例如,某些動態桌布可能使用 OpenGL 2.0 或 3.x 上下文來渲染其內容。動態桌布將無法在不支援多個 OpenGL 上下文的硬體上可靠地運行,因為使用 OpenGL 上下文的動態桌布可能會與也使用 OpenGL 上下文的其他應用程式發生衝突。
如上所述,能夠可靠運行動態壁紙的設備實現應該實現動態壁紙,並且在實現時必須報告平台功能標誌 android.software.live_wallpaper。
3.8.8.活動切換
由於「最近使用」功能導航鍵是可選的,因此對於 Android Television 裝置和 Android Watch 裝置來說,實現概覽螢幕的要求也是可選的。 |
上游 Android 原始程式碼包括概覽畫面 [參考資料,32 ],這是一個系統級使用者介面,用於任務切換並使用使用者上次離開應用程式時應用程式圖形狀態的縮圖來顯示最近訪問的活動和任務。設備實作(包括第 7.2.3 節中詳述的最近功能導航鍵)可能會變更介面,但必須滿足以下要求:
- 必須將關聯的最近內容顯示為一起移動的群組
- 必須支援至少最多 20 個顯示的活動
- 應至少一次顯示 4 個活動的標題
- 應顯示最近的突出顯示顏色、圖示、螢幕標題
- 必須實現螢幕固定行為 [參考資料,33 ] 並為使用者提供一個設定選單來切換該功能
- 應顯示關閉可供性(“x”),但可以延遲顯示,直到使用者與螢幕交互
強烈鼓勵裝置實現使用上游 Android 使用者介面(或類似的基於縮圖的介面)作為概覽畫面。
3.8.9。輸入管理
Android 包括對輸入管理的支援以及對第三方輸入法編輯器的支援 [參考資料,34 ]。允許使用者在裝置上使用第三方輸入法的裝置實作必須聲明平台功能 android.software.input_methods 並支援 Android SDK 文件中定義的 IME API。
聲明 android.software.input_methods 功能的裝置實作必須提供使用者可存取的機制來新增和設定第三方輸入法。裝置實作必須顯示設定介面以回應 android.settings.INPUT_METHOD_SETTINGS 意圖。
3.8.10.鎖定螢幕媒體控制
從 Android 5.0 開始,遠端控制用戶端 API 已被棄用,取而代之的是媒體通知模板,該模板允許媒體應用程式與鎖定螢幕上顯示的播放控制項整合[參考資料,35 ]。支援裝置鎖定畫面的裝置實作必須支援媒體通知範本以及其他通知。
3.8.11.夢
Android 支援稱為 Dreams 的互動式螢幕保護程式 [參考資料,36 ]。 Dreams 允許使用者在連接到電源的裝置空閒或停靠在桌面擴充座時與應用程式互動。 Android Watch 裝置可以實現 Dreams,但其他類型的裝置實作應該包括對 Dreams 的支持,並為使用者提供一個設定選項來配置 Dreams 以回應 android.settings.DREAM_SETTINGS 意圖。
3.8.12.地點
當設備具有能夠提供位置座標的硬體感測器(例如 GPS)時,位置模式必須顯示在「設定」[資源,37 ]內的位置選單中。
3.8.13.統一碼和字體
Android 支援彩色表情符號。當 Android 裝置實作包含 IME 時,裝置必須提供使用者 Unicode 6.1 中定義的表情符號字元的輸入方法 [參考資料,38 ]。所有設備必須能夠以彩色字形呈現這些表情符號字元。
Android 5.0 支援不同粗細的 Roboto 2 字體 — sans-serif-thin、sans-serif-light、sans-serif-medium、sans-serif-black、sans-serif-condensed、sans-serif-condensed-light —必須包含裝置上可用的所有語言以及拉丁語、希臘語和西里爾語的完整Unicode 7.0 涵蓋範圍,包括拉丁語擴展A、B、C 和D 範圍,以及Unicode 7.0 貨幣符號區塊中的所有字形。
3.9.設備管理
Android 包含允許安全感知應用程式在系統層級執行裝置管理功能的功能,例如透過 Android 裝置管理 API 實作密碼原則或執行遠端抹除 [參考資料,39 ]。設備實作必須提供 DevicePolicyManager 類別的實作 [參考資料,40 ]。包含鎖定畫面支援的裝置實作必須支援 Android SDK 文件 [參考資料,39 ] 中定義的全部裝置管理策略,並報告平台功能 android.software.device_admin。
設備實作可以預先安裝執行設備管理功能的應用程序,但該應用程式不得開箱即用地設定為預設設備所有者應用程式 [參考資料,41 ]。
3.10.無障礙
Android 提供了一個輔助功能層,可幫助殘障用戶更輕鬆地導航其裝置。此外,Android 還提供平台 API,使輔助功能服務實現能夠接收使用者和系統事件的回調並產生備用回饋機制,例如文字轉語音、觸覺回饋和軌跡球/方向鍵導航 [參考資料,42 ]。裝置實作必須提供與預設 Android 實作一致的 Android 輔助功能框架的實作。設備實作必須滿足以下要求:
- 必須透過 android.accessibilityservice API 支援第三方無障礙服務實作 [資源,43 ]
- 必須產生 AccessibilityEvents 並以與預設 Android 實作一致的方式將這些事件傳遞給所有已註冊的 AccessibilityService 實現
- 除非 Android Watch 裝置沒有音訊輸出,否則裝置實作必須提供使用者可存取的機制來啟用和停用輔助服務,並且必須顯示此介面以回應 android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS 意圖。
此外,設備實作應該在設備上提供輔助服務的實現,並且應該為使用者提供一種在設備設定期間啟用輔助服務的機制。 Eyes Free 專案提供了無障礙服務的開源實作 [參考資料,44 ]。
3.11.文字轉語音
Android 包含的 API 允許應用程式使用文字轉語音 (TTS) 服務,並允許服務提供者提供 TTS 服務的實作 [參考資料,45 ]。報告功能 android.hardware.audio.output 的裝置實作必須滿足與 Android TTS 框架相關的這些要求。
設備實現:
- 必須支援 Android TTS 框架 API,並且應該包含支援裝置上可用語言的 TTS 引擎。請注意,上游 Android 開源軟體包含功能齊全的 TTS 引擎實作。
- 必須支援安裝第三方 TTS 引擎
- 必須提供使用者可存取的介面,允許使用者選擇在系統層級使用的 TTS 引擎
3.12.電視輸入框架
Android Television 輸入框架 (TIF) 簡化了向 Android Television 裝置交付即時內容的過程。 TIF 提供標準 API 來建立控制 Android Television 裝置的輸入模組。 Android TV 裝置實作必須支援 Television 輸入框架 [參考資料,46 ]。
支援TIF的裝置實作必須聲明平台功能Android.software.live_tv。
4. 應用程式封裝相容性
設備實作必須安裝並執行Android「 .apk」文件,該文件由官方Android SDK中包含的「 AAPT」工具產生[ Resources,47 ]。
設備實作不得擴充.APK [資源,48 ],Android清單[資源,49 ],Dalvik bytecode [ Resources,20 ]或RenderScript字節碼的格式,以防止這些檔案安裝並在其他相容設備
5. 多媒體相容性
5.1.媒體編解碼器
設備實作必須支援Android SDK文件中指定的核心媒體格式[資源,50 ],除非本文檔明確允許。具體而言,設備實作必須支援下表中定義的媒體格式,編碼器,解碼器,檔案類型和容器格式。所有這些編解碼器均作為 Android 開源專案的首選 Android 實作中的軟體實作提供。
請注意,Google和開放手機聯盟都沒有做出任何代碼器,即這些編解碼器沒有第三方專利。打算在硬體或軟體產品中使用此原始碼的人請注意,此程式碼的實現(包括在開源軟體或共享軟體中)可能需要相關專利持有者的專利許可。
5.1.1.音訊編解碼器
格式 /編解碼器 | 編碼器 | 解碼器 | 細節 | 支援的文件類型 /容器格式 |
MPEG-4 AAC設定文件 (AAC LC) | 必需1 | 必需的 | 對單聲道/立體聲/5.0/5.12的支持,其標準取樣率從8到48 kHz。 | •3GPP(.3GP) •MPEG-4(.mp4,.m4a) •ADTS RAW AAC(.AAC,在Android 3.1+中解碼,在Android 4.0+中編碼,不支援ADIF) •mpeg-ts(.ts,不可尋找,Android 3.0+) |
MPEG-4 HE AAC設定檔(AAC+) | 必需1 (Android 4.1+) | 必需的 | 支援單聲道/立體聲/5.0/5.12的內容,其標準取樣率從16到48 kHz。 | |
MPEG-4 HE AACV2 設定檔(增強AAC+) | 必需的 | 支援單聲道/立體聲/5.0/5.12的內容,其標準取樣率從16到48 kHz。 | ||
AAC ELD(增強的低延遲AAC) | 必需1 (Android 4.1+) | 必需的 (Android 4.1+) | 支援單聲道/立體聲含量,標準取樣率從16到48 kHz。 | |
AMR-NB | 必需3 | 必需3 | 8kHz 時取樣率為 4.75 至 12.2 kbps | 3GPP (.3gp) |
AMR-WB | 必需3 | 必需3 | 9 個速率,從 6.60 kbit/s 到 23.85 kbit/s,取樣頻率為 16kHz | |
FLAC | 必需的 (Android 3.1+) | 單聲道/立體聲(無多聲道)。最高48 kHz的樣品速率(但建議在44.1 kHz輸出的設備上使用高達44.1 kHz,因為48至44.1 kHz傾斜的傾角不包括低通濾波器)。建議使用16位;沒有抖動適用於24位。 | 僅FLAC(.flac) | |
MP3 | 必需的 | 單一/立體聲8-320kbps常數(CBR)或可變位元率(VBR) | MP3 (.mp3) | |
MIDI | 必需的 | MIDI 類型 0 和 1。DLS 版本 1 和 2。XMF 和 Mobile XMF。支援鈴聲格式 RTTTL/RTX、OTA 和 iMelody | •類型0和1(.mid,.xmf,.mxmf) •rtttl/rtx(.rtttl,.rtx) •ota(.ota) •iMelody(.imy) | |
沃爾比斯 | 必需的 | •ogg(.ogg) •Matroska(.MKV,Android 4.0+) | ||
PCM/WAVE | 必需4 (Android 4.1+) | 必需的 | 16位元線性PCM(速率達到硬體限制)。設備必須支援8000、11025、16000和44100 Hz頻率的原始PCM記錄的取樣率。 | 波形 (.wav) |
作品 | 必需的 (Android 5.0+) | Matroska(.MKV) |
1定義Android.hardware.microphone但可選的Android Watch設備實現的設備實現所需的1。
2僅需5.0/5.1內容的下降;錄製或渲染超過2個頻道是可選的。
3 Android手持裝置實現所需。
4定義Android.hardware.microphone(包括Android Watch設備實作)所需的設備實作所需。
5.1.2.圖像編解碼器
格式 /編解碼器 | 編碼器 | 解碼器 | 細節 | 支援的文件類型 /容器格式 |
JPEG | 必需的 | 必需的 | 基礎+漸進式 | jpeg(.jpg) |
動圖 | 必需的 | gif(.gif) | ||
巴布亞紐幾內亞 | 必需的 | 必需的 | PNG (.png) | |
骨形態發生蛋白 | 必需的 | BMP(.bmp) | ||
網路P | 必需的 | 必需的 | WebP(.WEBP) |
5.1.3.視訊編解碼器
視訊編解碼器對於Android Watch設備實作是可選的。 |
格式 /編解碼器 | 編碼器 | 解碼器 | 細節 | 支援的文件類型 /容器格式 |
H.263 | 必需1 | 必需2 | •3GPP(.3GP) •MPEG-4(.mp4) | |
H.264AVC | 必需2 | 必需2 | •3GPP(.3GP) •MPEG-4(.mp4) •mpeg-ts(.ts,僅AAC音頻,不可尋找,Android 3.0+) | |
H.265 HEVC | 必需2 | 有關詳細信息,請參見第5.3節 | MPEG-4(.mp4) | |
MPEG-4 sp | 必需2 | 3GPP (.3gp) | ||
VP83 | 必需2 (Android 4.3+) | 必需2 (Android 2.3.3+) | •WebM(.WEBM)[資源,110 ] •Matroska(.MKV,Android 4.0+)4 | |
VP9 | 必需2 (Android 4.4+) | 請參閱第5節。3有關詳細信息 | •WebM(.WEBM)[資源,110 ] •Matroska(.MKV,Android 4.0+)4 |
1設備實現所需的,包括相機硬體並定義Android.hardware.Camera或Android.hardware.Camera.Front。
2設備實現所需的2。
3對於Web視訊串流和視訊會議服務的可接受質量,設備實現應使用符合[資源,51 ]中要求的硬體VP8編解碼器。
4設備實作應支援編寫Matroska WebM文件。
5.2.視訊編碼
視訊編解碼器對於Android Watch設備實作是可選的。 |
具有H.264編解碼器支援的Android設備實現,必須支援基線設定檔等級3和以下SD(標準定義)視訊編碼設定文件,並應支援主配置級4和以下HD(高清)視訊編碼設定檔。強烈建議使用Android電視設備以30 fps編碼HD 1080p視訊。
SD(低品質) | SD(高品質) | HD 720P1 | HD 1080P1 | |
視訊解析度 | 320 x 240 PX | 720 x 480 PX | 1280 x 720 像素 | 1920 x 1080 像素 |
視訊幀率 | 20 幀/秒 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 |
視訊比特率 | 384 kbps | 2Mbps | 4Mbps | 10Mbps |
1當由硬體支援時,但強烈建議用於Android電視設備。
具有VP8編解碼器支援的Android設備實作必須支援SD視訊編碼設定文件,並應支援以下HD(高畫質)視訊編碼設定檔。
SD(低品質) | SD(高品質) | HD 720P1 | HD 1080P1 | |
視訊解析度 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 |
視訊幀率 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 |
視訊比特率 | 800 kbps | 2Mbps | 4Mbps | 10Mbps |
1當硬體支援時。
5.3.視訊解碼
視訊編解碼器對於Android Watch設備實作是可選的。 |
設備實作必須支援VP8,VP9,H.264和H.265編解碼器的同一流中的動態視訊解析度切換。
使用H.264解碼器的Android設備實現,必須支援基線設定檔3和以下SD視訊解碼設定文件,並應支援HD解碼設定檔。 Android電視裝置必須支援高調4.2和HD 1080p解碼設定檔。
SD(低品質) | SD(高品質) | HD 720P1 | HD 1080P1 | |
視訊解析度 | 320 x 240 PX | 720 x 480 PX | 1280 x 720 像素 | 1920 x 1080 像素 |
視訊幀率 | 30 幀/秒 | 30 幀/秒 | 30 fps / 60 fps2 | 30 fps / 60 fps2 |
視訊比特率 | 800 kbps | 2Mbps | 8Mbps | 20Mbps |
1 Android電視設備實現所需的1,但僅在硬體支援時才用於其他設備類型。
2 Android電視裝置實現所需。
如第5.1.3節所述支援VP8編解碼器時,Android設備實作必須支援下列SD解碼設定文件,並應支援HD解碼設定檔。 Android電視裝置必須支援HD 1080p解碼設定檔。
SD(低品質) | SD(高品質) | HD 720P1 | HD 1080P1 | |
視訊解析度 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 |
視訊幀率 | 30 幀/秒 | 30 幀/秒 | 30 fps / 60 fps2 | 30 /60 fps2 |
視訊比特率 | 800 kbps | 2Mbps | 8Mbps | 20Mbps |
Android電視裝置實現所需的1個,但僅在由硬體支援時才用於其他類型的裝置。
2 Android電視裝置實現所需。
如第5.1.3節所述支援VP9編解碼器時,Android設備實作必須支援下列SD視訊解碼設定文件,並應支援HD解碼設定檔。強烈建議使用Android電視設備來支援HD 1080p解碼設定文件,並應支援UHD解碼設定檔。當支援UHD視訊解碼設定檔時,它必須支援8位元顏色深度。
SD(低品質) | SD(高品質) | 高清720p 1 | 高清1080p 2 | UHD 2 | |
視訊解析度 | 320 x 180 像素 | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 | 3840 x 2160 像素 |
視訊幀率 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 |
視訊比特率 | 600 kbps | 1.6 Mbps | 4Mbps | 10Mbps | 20Mbps |
Android電視裝置實現所需的1個,但僅在由硬體支援時才用於其他類型的裝置。
2在由硬體支援時,強烈建議用於Android電視設備實現。
如第5.1.3節所述支援H.265編解碼器時,Android設備實作必須支援主設定檔3主層和以下SD視訊解碼設定文件,並應支援HD解碼設定檔。 Android電視設備必須支援主配置級4.1主層和HD 1080p解碼配置文件,並應支援MAIN10級別5 Main Tier配置檔和UHD解碼配置文件。
SD(低品質) | SD(高品質) | 高清720p 1 | 高清1080p 1 | UHD 2 | |
視訊解析度 | 352 x 288 PX | 640 x 360 像素 | 1280 x 720 像素 | 1920 x 1080 像素 | 3840 x 2160 像素 |
視訊幀率 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 | 30 幀/秒 |
視訊比特率 | 600 kbps | 1.6 Mbps | 4Mbps | 10Mbps | 20Mbps |
1 Android電視設備實現所需的1,但僅在由硬體支援時才用於其他類型的設備。
2 Android電視設備實現需要硬體所需。
5.4.聲音錄製
雖然本節中概述的某些要求是自Android 4.3以來應該說的,但計劃將來版本的兼容性定義將其更改為必須。非常強烈鼓勵現有和新的Android設備滿足這些要求,或者在升級到將來的版本時,它們將無法獲得Android相容性。
5.4.1.原始音訊捕獲
聲明Android.hardware.microphone的裝置實作必須允許擷取具有以下特徵的原始音訊內容:
- 格式:線性PCM,16位
- 取樣率:8000,11025,16000,44100
- 頻道:單聲道
聲明Android.hardware.microphone的裝置實作應允許擷取具有以下特徵的原始音訊內容:
- 格式:線性PCM,16位
- 取樣率:22050,48000
- 頻道:立體聲
5.4.2.捕捉語音識別
除上述記錄規格外,當應用程式開始使用android.media.mediarecorder.audiosource.voice_recognition Audio來源來錄製音訊串流時,
- 該設備應顯示大致平坦的幅度與頻率特徵:具體來說,±3 dB,從100 Hz到4000 Hz。
- 應該設定音頻輸入靈敏度,以使1000 Hz的90 dB聲音源(SPL)源可為16位元樣品產生2500的RMS。
- PCM 幅度電平應在麥克風處的 90 dB SPL 或 -18 dB 至 +12 dB 的至少 30 dB 範圍內線性追蹤輸入 SPL 變化。
- 在麥克風處,在90 dB的SPL輸入水準下,1KHz的總諧波失真應小於1%。
- 降噪處理,如果存在,則必須停用。
- 自動增益控制(如果存在)必須停用
如果該平台支援抑制語音辨識的噪音抑制技術,則該效果必須從android.media.audiofx.noisesuppressor API中控制。此外,噪音抑制器效果描述符的UUID欄位必須唯一確定噪音抑制技術的每個實作。
5.4.3.捕獲重新播放
android.media.mediarecorder.audiosource類別包含遠端_submix音訊來源。宣告Android.hardware.Audio.Output的裝置必須正確實作remote_submix音訊來源,以便應用程式使用android.media.media.audiorecord api從此音訊來源記錄時,它可以擷取所有音訊串流的混音:
- stream_ring
- stream_alarm
- stream_notification
5.5.音訊播放
聲明Android.hardware.audio.Output的裝置實作必須符合本節中的要求。
5.5.1.原始音訊播放
該設備必須允許具有以下特徵的原始音訊內容播放:
- 格式:線性PCM,16位
- 取樣率:8000,11025,16000,22050,32000,44100
- 頻道:單,立體聲
該設備應允許播放具有以下特徵的原始音訊內容:
- 取樣率:24000,48000
5.5.2.音訊效果
Android為裝置實作提供了音訊效果的API [資源,52 ]。聲明功能Android.hardware.audio.Output的裝置實作:
- 必須支援效果_type_equalizer和forvest_type_loudness_enhancer實作可透過Audioeffect子類別均衡器,Loudnessenhancer控制
- 必須支援可視化器API實現,可透過視覺化器類別控制
- 應支援效果_TYPE_BASS_BOOST,forvest_type_env_reverb,forvest_type_preset_reverb和forvest_type_virtualizer實作可透過AudioEffect子級式bassboost,EmovenityAlreReverb,PresetReverbirtVirtirtualizer
5.5.3.音訊輸出量
Android電視設備的實現必須包括對支援輸出的系統主音量和數位音訊輸出量衰減的支持,除了壓縮音訊傳遞輸出(在設備上未完成音訊解碼)。
5.6.音訊延遲
音訊延遲是隨著音訊訊號通過系統的時間延遲。許多類別的應用程式都依賴短延遲來實現即時聲音效果。
出於本節的目的,請使用以下定義:
- 輸出延遲- 應用程式寫入PCM編碼資料的框架與外部偵聽器可以聽到相應的聲音或感測器觀察到相應的聲音之間的間隔。
- 冷輸出延遲- 第一幀的輸出延遲,當音訊輸出系統閒置並在請求之前向下電源時。
- 連續輸出延遲- 裝置播放音訊後,後續影格的輸出延遲。
- 輸入延遲- 何時將外部聲音呈現到裝置和應用程式讀取對應的PCM編碼資料幀之間的間隔。
- 冷輸入延遲- 輸入時間遺失的總和和第一幀的輸入延遲的總和,當音訊輸入系統閒置並在請求之前將其關閉。
- 連續輸入延遲- 後續幀的輸入延遲,設備正在擷取音訊。
- 冷輸出抖動- 冷輸出延遲值的單獨測量值之間的差異。
- 冷輸入抖動- 冷輸入延遲值的單獨測量值之間的差異。
- 連續的往返潛伏期- 連續輸入延遲加連續輸出延遲加5毫秒的總和。
- OpenSL ES PCM緩衝液佇列API - Android NDK中與PCM相關的OPESL ES API的集合;請參閱ndk_root/doc/opensles/index.html。
聲明Android.hardware.audio.Output的裝置實作應滿足或超過以下音訊輸出要求:
- 冷輸出延遲為 100 毫秒或更短
- 連續輸出延遲為 45 毫秒或更短
- 最小化冷輸出抖動
如果裝置實現在使用OpenSL ES PCM緩衝區佇列API時進行任何初始校準後滿足本節的要求,則在至少一個支援的音訊輸出裝置上,對於連續輸出延遲和冷輸出潛伏期,它可能會報告對低延遲音訊的支持,透過報告android.audio.low_latency的功能,透過android.content.pm.packagemanager類別[ Resources,53 ]。相反,如果設備實現不符合這些要求,則不得報告對低延遲音訊的支援。
包括android.hardware.microphone在內的裝置實作應滿足以下輸入音訊要求:
- 冷輸入延遲為 100 毫秒或更短
- 連續輸入潛伏期為30毫秒或更少
- 連續50毫秒或更少的往返潛伏期
- 最大程度地減少冷輸入抖動
5.7.網路協定
設備必須支援Android SDK文件[資源,50 ]中指定的音訊和視訊播放的媒體網路協定。具體而言,設備必須支援以下媒體網路協定:
- RTSP(RTP,SDP)
- HTTP(S)漸進式串流媒體
- HTTP(S)即時串流協議,版本3 [資源,54 ]
5.8.安全媒體
支援安全視訊輸出並且能夠支援安全表面的裝置實作必須聲明對display.flag_secure的支援。聲明支援Display.flag_secure的設備實現,如果它們支援無線顯示協議,則必須使用密碼強的機制(例如HDCP 2.x或更高)來保護鏈接,以供Miracast Wireless顯示器。同樣,如果它們支援有線外部顯示,則設備實作必須支援HDCP 1.2或更高。 Android Television設備實作必須支援HDCP 2.2,用於支援4K解析度和HDCP 1.4或更高的設備,以供較低的解析度。上游Android開源實作包括滿足此要求的無線(Miracast)和有線(HDMI)顯示的支援。
6. 開發者工具和選項相容性
6.1.開發者工具
裝置實作必須支援 Android SDK 中提供的 Android 開發人員工具。 Android相容裝置必須與:
- Android調試橋(ADB) [資源,55 ]
設備實作必須支援Android SDK中記錄的所有ADB功能,包括Dumpsys [資源,56 ]。預設情況下,裝置側ADB守護程式必須不活動,並且必須有一個可存取使用者的機制來開啟Android偵錯橋。如果裝置實作省略了USB週邊模式,則必須透過本地區域網路(例如乙太網路或802.11)實作Android調試橋。
Android包含安全ADB的支援。安全ADB可以在已知身份驗證的宿主上啟用ADB。設備實作必須支援安全的ADB。
- Dalvik調試監視器服務(DDMS) [資源,57 ]
裝置實作必須支援 Android SDK 中記錄的所有 ddms 功能。由於DDMS使用ADB,因此預設情況下,對DDMS的支援應無效,但每當使用者啟動Android Debug Bridge(如上所述)時,必須支援DDMS。
- 猴子[資源,58 ]
裝置實作必須包含 Monkey 框架,並使其可供應用程式使用。
- Systrace [資源,59 ]
設備實作必須支援Android SDK中記錄的Systrace工具。 Systrace預設必須不活動,且必須有一個可存取Systrace的使用者存取機制。
大多數基於Linux的系統和Apple Macintosh系統使用標準Android SDK工具識別Android設備,而無需額外支援;但是,Microsoft Windows系統通常需要新的Android裝置的驅動程式。 (例如,新的供應商ID和有時新設備ID需要Windows系統的自訂USB驅動程式。)如果ADB工具無法按照標準Android SDK中提供的ADB工具識別設備實現,則設備實現者必須為Windows驅動程式提供允許開發人員連接到Windows驅動程式使用ADB協定的裝置。必須為Windows XP,Windows Vista,Windows 7,Windows 8和Windows 9提供這些驅動程序,並在32位元和64位元版本中提供。
6.2.開發者選項
Android 支援開發人員配置應用程式開發相關的設定。裝置實作必須尊重android.settings.application_development_settings意圖顯示與應用程式開發相關的設定[資源,60 ]。預設情況下,上游Android實作會將「開發者選項」選單隱藏起來,並使使用者在設定> 「關於裝置」 > 「建置號碼」選單項目上按7(7)次之後啟動開發人員選項。設備實作必須為開發人員選項提供一致的體驗。具體而言,設備實作必須預設使用開發人員選項,並且必須提供一種機制來啟用與上游Android實作一致的開發人員選項。
7. 硬體相容性
如果裝置包含具有針對第三方開發人員對應的API的特定硬體元件,則裝置實作必須如Android SDK文件中所述實作該API。如果 SDK 中的 API 與指定為可選的硬體元件交互,且裝置實作不擁有該元件:
- 必須介紹組件API的完整類別定義(由SDK記錄)。
- API的行為必須以某種合理的方式實現為無措施。
- 在SDK文件允許的情況下,API方法必須傳回空值。
- API方法必須傳回SDK文件不允許未允許的null值的類別的NO-OP實作。
- API方法不得拋出SDK文件未記錄的例外。
應用這些要求的場景的典型範例是電話 API:即使在非電話設備上,這些 API 也必須以合理的無操作方式實作。
設備實作必須透過getSystemavailableFeatures()()和hassystemfeature(String)方法在Android.content.content.pm.packagemanager類別上始終報告準確的硬體配置資訊。 [資源,53]
7.1.顯示和圖形
Android包括適當適當地調整應用程式資產和UI佈局的設施,以確保第三方應用程式在各種硬體配置上運作良好[ Resources,61 ]。如本節所述,設備必須正確實施這些API和行為。
本節中要求所引用的單位定義如下:
- 物理對角線大小- 顯示器照明部分的兩個相對角的距離。
- 點每英吋(DPI) - 由線性水平或垂直跨度為1英吋的像素的數量。列出了DPI值,水平和垂直DPI都必須落在該範圍內。
- 縱橫比- 螢幕較長維與較短維度的比率。例如,480x854像素的顯示為854 /480 = 1.779,或大致為「 16:9」。
- 密度無關的像素(DP) - 虛擬像素單元歸一化為160 dpi螢幕,計算為:像素= dps *(密度 / 160)。
7.1.1.螢幕配置
7.1.1.1.螢幕尺寸
如本節所述,Android手錶設備(第2節中詳細介紹)可能具有較小的螢幕尺寸。 |
Android UI框架支援各種不同的螢幕尺寸,並允許應用程式透過android.content.res.configuration.configuration.screenaylayout與screenlaylayOut_sizesize_mask查詢裝置螢幕大小(aka「螢幕佈局」)。裝置實作必須報告Android SDK文件[資源,61 ]中定義的正確螢幕大小,並由上游Android平台決定。具體而言,設備實現必須根據以下邏輯密度獨立的像素(DP)螢幕尺寸報告正確的螢幕尺寸。
- 設備必須具有至少426 dp x 320 dp('small')的螢幕尺寸,除非它是Android Watch設備。
- 報告螢幕尺寸「正常」的裝置必須具有至少480 dp x 320 dp的螢幕尺寸。
- 報告螢幕尺寸「大」的裝置必須具有至少640 dp x 480 dp的螢幕尺寸。
- 報告螢幕尺寸「 Xlarge」的裝置必須具有至少960 dp x 720 dp的螢幕尺寸。
此外,
- Android手錶設備必須具有一個物理對角線尺寸在1.1到2.5英吋的螢幕
- 具有物理整合的螢幕的其他類型的Android設備實現必須具有至少2.5英寸的物理對角線尺寸。
設備不得隨時更改其報告的螢幕尺寸。
應用程式可選地指出他們通過
7.1.1.2.螢幕縱橫比
Android Watch裝置的縱橫比可能為1.0(1:1)。 |
螢幕縱橫比必須是1.3333(4:3)到1.86(大約16:9)的值,但是Android Watch設備的縱橫比可能為1.0(1:1),因為該設備實現將使用UI_MODE_MODE_TYPE_WWATCH作為android.content. Res.Configuration.uimode。
7.1.1.3。螢幕密度
Android UI 框架定義了一組標準邏輯密度來幫助應用程式開發人員定位應用程式資源。設備實作只能透過Android.util.displaymetrics API報告以下邏輯Android框架密度之一,並且必須以此標準密度執行應用程序,且不得在預設顯示時隨時更改值。
- 120 dpi(LDPI)
- 160 DPI(MDPI)
- 213 dpi(電視dpi)
- 240 DPI(HDPI)
- 320 DPI(XHDPI)
- 400dpi (400dpi)
- 480 dpi(xxhdpi)
- 560 DPI(560DPI)
- 640 DPI(xxxhdpi)
裝置實現應該定義在數值上最接近螢幕物理密度的標準 Android 框架密度,除非該邏輯密度將報告的螢幕尺寸推至支援的最小值以下。如果在數字上最接近物理密度的標準 Android 框架密度導致螢幕尺寸小於支援的最小相容螢幕尺寸(320 dp 寬度),則裝置實現應該報告下一個最低的標準 Android 框架密度。
7.1.2.顯示指標
裝置實作必須報告android.util.util.displaymetrics [資源,62 ]中所有顯示指標的正確值,並且無論是否將嵌入式或外部螢幕用作預設顯示屏,都必須報告相同的值。
7.1.3.螢幕方向
裝置必須報告他們支援的螢幕方向(android.hardware.screen.portrait和/或android.hardware.screen.landscape),並且必須至少報告一個支援的方向。例如,具有固定取向景觀螢幕的設備,例如電視或筆記型電腦,只能報告Android.hardware.screen.landscape。
報告兩個螢幕方向的裝置必須透過應用程式來支援肖像或景觀螢幕方向的動態方向。也就是說,設備必須尊重應用程式對特定螢幕方向的請求。設備實作可以選擇縱向或橫向作為預設方向。
每當透過 android.content.res.Configuration.orientation、android.view.Display.getOrientation() 或其他 API 查詢時,裝置必須報告裝置目前方向的正確值。
更改方向時,設備不得更改報告的螢幕尺寸或密度。
7.1.4. 2D 和 3D 圖形加速
設備實作必須支援OpenGL ES 1.0和2.0,如Android SDK文件中所體現和詳細介紹。設備實現應支援能夠支援它的設備上的OpenGL ES 3.0或3.1。裝置實作也必須支援Android SDK文件[資源,63 ]中詳細介紹的Android Renderscript。
裝置實作也必須正確辨識自己為支援OpenGL ES 1.0,OpenGL ES 2.0,OpenGL ES 3.0或OpenGL 3.1。那是:
- 託管API(例如透過GLES10.GEGSTRING()方法必須報告對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或3.1支援的設備實作必須支援對應的託管API,並包括對本機C/C ++ API的支援。在聲明對OpenGL ES 3.0或3.1支援的裝置實作上,LibGlesV2。因此,除了OpenGL ES 2.0函數符號外,必須匯出對應的功能符號。
除了OpenGL ES 3.1外,Android還提供了一個具有Java介面[資源,64 ]的擴充包,以及對高級圖形功能(例如Tessellation和ASTC紋理壓縮格式)的本機支援。 Android裝置實作可以支援此擴充包,並且(如果完全實作)可以透過Android.hardware.opengles.AEP功能標誌來識別支援。
此外,裝置實作可以實現任何所需的OpenGL ES擴充。但是,裝置實作必須透過OpenGL ES託管和本機API報告它們所支援的所有擴充字串,相反,不得報告不支援的擴充字串。
請注意,Android包括對應用程式的支持,以指定它們需要特定的OpenGL紋理壓縮格式。這些格式通常是特定於供應商的。 Android不需要裝置實作來實現任何特定的紋理壓縮格式。但是,他們應透過OpenGL API中的getString()方法準確地報告所支援的任何紋理壓縮格式。
Android包括一種機制,用於聲明他們希望透過使用明顯標籤Android:HardWareAccelceLated或Direct api呼叫[資源,65 ],在應用,活動,視窗或視圖層級上啟用硬體加速度的硬體加速度。
裝置實作必須預設啟用硬體加速度,如果開發人員透過設定Android:HardWareAccelerated =「 false」或直接透過Android View API停用硬體加速度,則必須停用硬體加速度。
此外,裝置實作必須表現出與Android SDK有關硬體加速的文件一致的行為[ Resources,65 ]。
Android 包含一個 TextureView 對象,可讓開發人員直接將硬體加速的 OpenGL ES 紋理集成為 UI 層次結構中的渲染目標。設備實作必須支援TextureView API,並且必須透過上游Android實作表現出一致的行為。
Android包括對EGL_ANDROID_RECORDABLE的支持,這是一個EGLConfig屬性,該屬性指示EGLCONFIG是否支援將影像記錄到影片的AnativeWindow。裝置實作必須支援egl_android_recordable副檔名[資源,66 ]。
7.1.5。舊版應用程式相容模式
Android指定了一種“相容性模式”,其中框架以“正常”螢幕尺寸等效(320dp寬度)模式運行,以使未開發的舊版本應用程式的遺產應用程式的利益,該應用程式是針對由舊版本的Android開發的,該應用程式是預先螢幕尺寸的獨立性。設備實作必須包括對上游Android開源程式碼實現的傳統應用程式相容模式的支援。也就是說,設備實作不得更改啟動相容模式的觸發器或閾值,且不得改變相容模式本身的行為。
7.1.6。螢幕技術
Android平台包含允許應用程式將豐富圖形呈現為顯示的API。除非本文檔特別允許,否則裝置必須支援 Android SDK 定義的所有這些 API。
- 設備必須支援能夠渲染16位元顏色圖形的顯示器,並應支援能夠具有24位元顏色圖形的顯示。
- 設備必須支援能夠渲染動畫的顯示器。
- 所使用的顯示技術必須具有0.9至1.15之間的像素縱橫比(PAR)。也就是說,像素縱橫比必須在正方形(1.0)附近,公差為10〜15%。
7.1.7.外部顯示
Android包括對輔助顯示的支持,以啟用媒體共享功能和開發人員API,以存取外部顯示。如果裝置透過有線,無線或嵌入式附加顯示連線來支援外部顯示,則裝置實作必須如Android SDK文件[ Resources,67 ]中所述實作顯示管理器API。
7.2.輸入裝置
7.2.1.鍵盤
Android Watch裝置可能但是其他類型的裝置實作必須實作軟鍵盤。 |
設備實現:
- 必須包含對輸入管理框架的支援(該框架允許第三方開發人員建立輸入方法編輯器(ie軟鍵盤),如http://developer.android.com所詳細介紹。
- 除了Android手錶設備外,必須提供至少一個軟鍵盤實現(無論是否存在硬鍵盤)
- 可能包括額外的軟鍵盤實現
- 可能包括硬體鍵盤
- 不得包含與Android.content.res.configuration.keyboard [ Resources,68 ](Qwerty或12-key)中指定的格式之一的硬體鍵盤
7.2.2.非觸控式導航
Android電視設備必須支援D-Pad。 |
設備實現:
- 如果設備實現不是Android電視設備
- 必須報告Android.content.Res.Configuration.Navigation的正確值[ Resources,68 ]
- 必須提供合理的替代使用者介面機制,以選擇和編輯文本,與輸入管理引擎相容。上游 Android 開源實作包括適合與缺乏非觸控導航輸入的裝置一起使用的選擇機制。
7.2.3.導航鍵
如本節所述,設備類型之間的房屋,恢復和背部功能的可用性和可見性要求有所不同。 |
房屋,後衛和背部功能(分別映射到關鍵事件keycode_home,keyocode_app_switch,keycode_back)對於Android導航範式至關重要。
- Android手持裝置的實現必須提供房屋,恢復和背部功能。
- Android電視裝置實現必須提供家庭和背部功能。
- Android Watch裝置實作必須具備使用者可用的家庭功能,除了在UI_MODE_TYPE_WATCH中使用外部功能。
- 所有其他類型的設備實現都必須提供家庭和背部功能。
這些功能可以透過專用的實體按鈕(例如機械或電容式觸控按鈕)來實現,也可以使用螢幕上不同部分,手勢,觸控面板等的專用軟體金鑰來實現。Android支援這兩個實現。所有這些功能都必須透過單一動作(例如TAP,雙擊或手勢)存取。
Recents功能(如果提供)必須具有可見的按鈕或圖標,除非在全螢幕模式下與其他導航功能一起隱藏。這不適用於從具有用於導航和無恢復鍵的實體按鈕的早期Android版本升級的裝置。
除非提供全螢幕模式或uimode ui_mode_type_mask設定為ui_mode_type_watch時,否則家庭和背部功能(如果提供)必須每個人都有可見的按鈕或圖示。
自Android 4.0以來,將選單功能不建議使用動作列。因此,使用Android 5.0運輸的新裝置實作不得為選單功能實現專用的實體按鈕。較舊的設備實作不應為選單函數實現專用的物理按鈕,但是如果實現了物理選單按鈕並且設備正在運行帶有targetsdkversion> 10的設備應用程序,則設備實現:
- 當可見操作列時,必須在操作列上顯示動作溢位按鈕,且所得的動作溢位選單彈出視窗並非空。對於在Android 4.4之前啟動但升級到Android 5.0之前啟動的裝置實現,建議這樣做。
- 不得選擇「動作列中的溢出」按鈕來修改顯示動作溢位彈出的位置
- 透過選擇“實體選單”按鈕顯示時,可能會在螢幕上的修改位置上渲染動作溢出彈出窗口
為了向後相容,裝置實作必須使選單函數可用於應用程式時,當TargetsDkversion <= 10(透過實體按鈕,軟體金鑰或手勢)時。除非與其他導覽功能一起隱藏,否則應顯示此功能表功能。
Android支援輔助行動[資源,69 ]。 Android設備實現除Android手錶設備外,必須在運行應用程式時始終為使用者提供輔助操作。輔助操作應作為主按鈕上的長壓或軟體主機上的滑動手勢實施。可以透過另一個實體按鈕,軟體金鑰或手勢來實現此功能,但是當可見其他導航鍵時,必須透過單一操作(例如TAP,雙擊或手勢)存取。
裝置實作可以使用螢幕的不同部分顯示導航金鑰,但是如果是,則必須符合以下要求:
- 設備實施導航鍵必須使用螢幕的不同部分,無法使用應用程序,且不得掩蓋或以其他方式乾擾應用程式可用的螢幕部分。
- 設備實作必須使顯示的一部分可用於滿足第7.1.1節中定義的要求的應用程式。
- 當應用程式未指定係統UI模式或指定System_UI_FLAG_VISIBLE時,裝置實作必須顯示導航金鑰。
- 設備實作必須在應用程式指定System_UI_FLAG_LOW_PROFILE時,將導航金鑰顯示在不引人注目的「低調」(例如DIM)模式中。
- 當應用程式指定system_ui_flag_hide_navigation時,裝置實作必須隱藏導覽金鑰。
7.2.4.觸控螢幕輸入
Android掌上電腦和手錶裝置必須支援觸控螢幕輸入。 |
設備實現應具有某種形式的指標輸入系統(類似滑鼠或觸控)。但是,如果裝置實作不支援指標輸入系統,則不得報告android.hardware.touchscreen或android.hardware.faketouch特徵常數。確實包括指針輸入系統的設備實現:
- 如果裝置輸入系統支援多個指針,則應支援完全獨立追蹤的指針
- 必須報告android.content.res.configuration.touchscreen [ Resources,68 ]與裝置上特定觸控螢幕的類型相對應的值
Android包括對各種觸控螢幕,觸控板和假觸控輸入裝置的支援。基於觸控螢幕的裝置實現與顯示[資源,70 ]相關聯,因此使用者的印像是直接在螢幕上操縱項目。由於使用者直接接觸螢幕,因此系統不需要任何其他負擔來指示被操縱的物件。相較之下,假觸控介面提供了一個近似觸控螢幕功能子集的使用者輸入系統。例如,驅動螢幕上遊標的滑鼠或遙控器類似於觸摸,但需要使用者先指向或聚焦,然後按一下。許多輸入裝置(例如滑鼠、觸控板、基於陀螺儀的空中滑鼠、陀螺儀指標、操縱桿和多點觸控觸控板)都可以支援假觸控互動。 Android 5.0包括功能常數Android.hardware.faketouch,對應於高保真性非接觸式(基於指針的)輸入設備,例如滑鼠或觸控板,可以充分模擬基於觸控的輸入(包括基本的手勢支援),即基本的手勢支持,並表明該設備支援觸控螢幕功能的模擬子集。聲明假觸摸功能的設備實作必須符合7.2.5節中的假觸摸要求。
設備實現必須報告與所使用的輸入類型相對應的正確功能。包括觸控螢幕(單觸控或更高)的裝置實作必須報告平台功能Consant Android.hardware.touchscreen。報告該平台功能Constant Android.hardware.touchscreen的設備實作也必須報告平台功能Constant Android.hardware.faketouch。不包含觸控螢幕(且僅依賴指標裝置)的裝置實作不得報告任何觸控螢幕功能,且僅在第7.2.5節中符合假觸控要求,則必須僅報告Android.hardware.faketouch。
7.2.5.假觸摸輸入
聲明支援Android.hardware.faketouch的設備實作:
- 必須報告指針位置的絕對X和Y螢幕位置,並在螢幕上顯示視覺指針[資源,71 ]
- 必須使用指定在螢幕上向下或向上的指定狀態變更的動作代碼來報告觸控事件[資源,71 ]
- MUST support pointer down and up on an object on the screen, which allows users to emulate tap on an object on the screen
- MUST support pointer down, pointer up, pointer down then pointer up in the same place on an object on the screen within a time threshold, which allows users to emulate double tap on an object on the screen [ Resources, 71 ]
- MUST support pointer down on an arbitrary point on the screen, pointer move to any other arbitrary point on the screen, followed by a pointer up, which allows users to emulate a touch drag
- MUST support pointer down then allow users to quickly move the object to a different position on the screen and then pointer up on the screen, which allows users to fling an object on the screen
Devices that declare support for android.hardware.faketouch.multitouch.distinct MUST meet the requirements for faketouch above, and MUST also support distinct tracking of two or more independent pointer inputs.
7.2.6。遊戲控制器支持
Android Television device implementations MUST support button mappings for game controllers as listed below. The upstream Android implementation includes implementation for game controllers that satisfies this requirement.
7.2.6.1.按鈕映射
Android Television device implementations MUST support the following key mappings:
按鈕 | HID 用法2 | 安卓按鈕 |
甲1 | 0x09 0x0001 | KEYCODE_BUTTON_A (96) |
乙1 | 0x09 0x0002 | KEYCODE_BUTTON_B (97) |
X 1 | 0x09 0x0004 | KEYCODE_BUTTON_X (99) |
Y 1 | 0x09 0x0005 | KEYCODE_BUTTON_Y (100) |
D-pad up 1 | 0x01 0x00393 | |
0x01 0x00393 | ||
0x09 0x0007 | KEYCODE_BUTTON_L1 (102) | |
右肩按鈕1 | 0x09 0x0008 | KEYCODE_BUTTON_R1 (103) |
0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) | |
0x09 0x000F | KEYCODE_BUTTON_THUMBR (107) | |
首頁1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
返回1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 [ Resources, 72 ]
2 The above HID usages must be declared within a Game pad CA (0x01 0x0005).
3 This usage must have a Logical Minimum of 0, a Logical Maximum of 7, a Physical Minimum of 0, a Physical Maximum of 315, Units in Degrees, and a Report Size of 4. The logical value is defined to be the clockwise rotation away from the vertical axis; for example, a logical value of 0 represents no rotation and the up button being pressed, while a logical value of 1 represents a rotation of 45 degrees and both the up and left keys being pressed.
4 [ Resources, 71 ]
模擬控制1 | HID 使用 | 安卓按鈕 |
0x02 0x00C5 | AXIS_LTRIGGER | |
0x02 0x00C4 | AXIS_RTRIGGER | |
0x01 0x0030 0x01 0x0031 | AXIS_X AXIS_Y | |
0x01 0x0032 0x01 0x0035 | 軸_Z AXIS_RZ |
1 [ Resources, 71 ]
7.2.7.遙控
Android Television device implementations SHOULD provide a remote control to allow users to access the TV interface. The remote control MAY be a physical remote or can be a software-based remote that is accessible from a mobile phone or tablet. The remote control MUST meet the requirements defined below.
- Search affordance —Device implementations MUST fire KEYCODE_SEARCH when the user invokes voice search either on the physical or software-based remote.
- Navigation —All Android Television remotes MUST include Back, Home, and Select buttons and support for D-pad events [ Resources, 72 ].
7.3.感應器
Android includes APIs for accessing a variety of sensor types. Devices implementations generally MAY omit these sensors, as provided for in the following subsections. If a device includes a particular sensor type that has a corresponding API for third-party developers, the device implementation MUST implement that API as described in the Android SDK documentation and the Android Open Source documentation on sensors [ Resources, 73 ]. For example, device implementations:
- MUST accurately report the presence or absence of sensors per the android.content.pm.PackageManager class [ Resources, 53]
- MUST return an accurate list of supported sensors via the SensorManager.getSensorList() and similar methods
- MUST behave reasonably for all other sensor APIs (for example, by returning true or false as appropriate when applications attempt to register listeners, not calling sensor listeners when the corresponding sensors are not present; etc.)
- MUST report all sensor measurements using the relevant International System of Units (metric) values for each sensor type as defined in the Android SDK documentation [ Resources, 74 ]
- SHOULD report the event time in nanoseconds as defined in the Android SDK documentation, representing the time the event happened and synchronized with the SystemClock.elapsedRealtimeNano() clock. Existing and new Android devices are very strongly encouraged to meet these requirement so they will be able to upgrade to the future platform releases where this might become a REQUIRED component. The synchronization error SHOULD be below 100 milliseconds [ Resources, 75 ].
The list above is not comprehensive; the documented behavior of the Android SDK and the Android Open Source Documentations on Sensors [ Resources, 73 ] is to be considered authoritative.
某些感測器類型是複合的,這意味著它們可以從一個或多個其他感測器提供的數據中導出。 (Examples include the orientation sensor, and the linear acceleration sensor.) Device implementations SHOULD implement these sensor types, when they include the prerequisite physical sensors as described in [ Resources, 76 ]. If a device implementation includes a composite sensor it MUST implement the sensor as described in the Android Open Source documentation on composite sensors [ Resources, 76 ].
Some Android sensor supports a "continuous" trigger mode, which returns data continuously [ Resources, 77 ]. For any API indicated by the Android SDK documentation to be a continuous sensor, device implementations MUST continuously provide periodic data samples that SHOULD have a jitter below 3%, where jitter is definion swas the stand valviues of the 提供 valviue.事件。
Note that the device implementations MUST ensure that the sensor event stream MUST NOT prevent the device CPU from entering a suspend state or waking up from a suspend state.
Finally, when several sensors are activated, the power consumption SHOULD NOT exceed the sum of the individual sensor's reported power consumption.
7.3.1.加速度計
Device implementations SHOULD include a 3-axis accelerometer. Android Handheld devices and Android Watch devices are strongly encouraged to include this sensor. If a device implementation does include a 3-axis accelerometer, it:
- MUST implement and report TYPE_ACCELEROMETER sensor [ Resources, 78 ]
- MUST be able to report events up to a frequency of at least 100 Hz and SHOULD report events up to at least 200 Hz
- MUST comply with the Android sensor coordinate system as detailed in the Android APIs [ Resources, 74 ]
- MUST be capable of measuring from freefall up to four times the gravity (4g) or more on any axis
- MUST have a resolution of at least 8-bits and SHOULD have a resolution of at least 16-bits
- SHOULD be calibrated while in use if the characteristics changes over the life cycle and compensated, and preserve the compensation parameters between device reboots
- SHOULD be temperature compensated
- MUST have a standard deviation no greater than 0.05 m/s^, where the standard deviation should be calculated on a per axis basis on samples collected over a period of at least 3 seconds at the fastest sampling rate
- SHOULD implement the TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER composite sensors as described in the Android SDK document. Existing and new Android devices are very strongly encouraged to implement the TYPE_SIGNIFICANT_MOTION composite sensor. If any of these sensors are implemented, the sum of their power consumption MUST always be less than 4 mW and SHOULD each be below 2 mW and 0.5 mW for when the device is in a dynamic or static condition.
- If a gyroscope sensor is included, MUST implement the TYPE_GRAVITY and TYPE_LINEAR_ACCELERATION composite sensors and SHOULD implement the TYPE_GAME_ROTATION_VECTOR composite sensor. Existing and new Android devices are strongly encouraged to implement the TYPE_GAME_ROTATION_VECTOR sensor.
- SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if a gyroscope sensor and a magnetometer sensor is also included
7.3.2.磁力計
Device implementations SHOULD include a 3-axis magnetometer (compass). If a device does include a 3-axis magnetometer, it:
- MUST implement the TYPE_MAGNETIC_FIELD sensor and SHOULD also implement TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor. Existing and new Android devices are strongly encouraged to implement the TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor.
- MUST be able to report events up to a frequency of at least 10 Hz and SHOULD report events up to at least 50 Hz
- MUST comply with the Android sensor coordinate system as detailed in the Android APIs [ Resources, 74 ]
- MUST be capable of measuring between -900 μT and +900 μT on each axis before saturating
- MUST have a hard iron offset value less than 700 μT and SHOULD have a value below 200 μT, by placing the magnetometer far from dynamic (current-induced) and static (magnet-induced) magnetic fields
- MUST have a resolution equal or denser than 0.6 μT and SHOULD have a resolution equal or denser than 0.2 μT
- SHOULD be temperature compensated
- MUST support online calibration and compensation of the hard iron bias, and preserve the compensation parameters between device reboots
- MUST have the soft iron compensation applied—the calibration can be done either while in use or during the production of the device
- SHOULD have a standard deviation, calculated on a per axis basis on samples collected over a period of at least 3 seconds at the fastest sampling rate, no greater than 0.5 μT
- SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if an accelerometer sensor and a gyroscope sensor is also included
- MAY implement the TYPE_GEOMAGNETIC_ROTATION_VECTOR sensor if an accelerometer sensor is also implemented. However if implemented, it MUST consume less than 10 mW and SHOULD consume less than 3 mW when the sensor is registered for batch mode at 10 Hz.
7.3.3.全球定位系統
Device implementations SHOULD include a GPS receiver. If a device implementation does include a GPS receiver, it SHOULD include some form of "assisted GPS" technique to minimize GPS lock-on time.
7.3.4.陀螺儀
Device implementations SHOULD include a gyroscope (angular change sensor). Devices SHOULD NOT include a gyroscope sensor unless a 3-axis accelerometer is also included. If a device implementation includes a gyroscope, it:
- MUST implement the TYPE_GYROSCOPE sensor and SHOULD also implement TYPE_GYROSCOPE_UNCALIBRATED sensor. Existing and new Android devices are strongly encouraged to implement the SENSOR_TYPE_GYROSCOPE_UNCALIBRATED sensor.
- MUST be capable of measuring orientation changes up to 1,000 degrees per second
- MUST be able to report events up to a frequency of at least 100 Hz and SHOULD report events up to at least 200 Hz
- MUST have a resolution of 12-bits or more and SHOULD have a resolution of 16-bits or more
- MUST be temperature compensated
- MUST be calibrated and compensated while in use, and preserve the compensation parameters between device reboots
- MUST have a variance no greater than 1e-7 rad^2 / s^2 per Hz (variance per Hz, or rad^2 / s). The variance is allowed to vary with the sampling rate, but must be constrained by this value. In other words, if you measure the variance of the gyro at 1 Hz sampling rate it should be no greater than 1e-7 rad^2/s^2.
- SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if an accelerometer sensor and a magnetometer sensor is also included
- If an accelerometer sensor is included, MUST implement the TYPE_GRAVITY and TYPE_LINEAR_ACCELERATION composite sensors and SHOULD implement the TYPE_GAME_ROTATION_VECTOR composite sensor. Existing and new Android devices are strongly encouraged to implement the TYPE_GAME_ROTATION_VECTOR sensor.
7.3.5。晴雨表
Device implementations SHOULD include a barometer (ambient air pressure sensor). If a device implementation includes a barometer, it:
- MUST implement and report TYPE_PRESSURE sensor
- MUST be able to deliver events at 5 Hz or greater
- MUST have adequate precision to enable estimating altitude
- MUST be temperature compensated
7.3.6。溫度計
Device implementations MAY include an ambient thermometer (temperature sensor). If present, it MUST be defined as SENSOR_TYPE_AMBIENT_TEMPERATURE and it MUST measure the ambient (room) temperature in degrees Celsius.
Device implementations MAY but SHOULD NOT include a CPU temperature sensor. If present, it MUST be defined as SENSOR_TYPE_TEMPERATURE, it MUST measure the temperature of the device CPU, and it MUST NOT measure any other temperature. Note the SENSOR_TYPE_TEMPERATURE sensor type was deprecated in Android 4.0.
7.3.7.光度計
設備實現可以包括光度計(環境光感測器)。
7.3.8.接近感測器
設備實現可以包括接近感測器。 Devices that can make a voice call and indicate any value other than PHONE_TYPE_NONE in getPhoneType SHOULD include a proximity sensor. If a device implementation does include a proximity sensor, it:
- MUST measure the proximity of an object in the same direction as the screen.也就是說,接近感測器的方向必須能夠偵測靠近螢幕的物體,因為這種感測器類型的主要目的是偵測使用者正在使用的手機。 If a device implementation includes a proximity sensor with any other orientation, it MUST NOT be accessible through this API.
- MUST have 1-bit of accuracy or more
7.4.數據連接
7.4.1.電話
"Telephony" as used by the Android APIs and this document refers specifically to hardware related to placing voice calls and sending SMS messages via a GSM or CDMA network.雖然這些語音通話可能會也可能不會進行資料包交換,但出於 Android 的目的,它們被視為獨立於可能使用相同網路實現的任何資料連線。 In other words, the Android "telephony" functionality and APIs refer specifically to voice calls and SMS. For instance, device implementations that cannot place calls or send/receive SMS messages MUST NOT report the android.hardware.telephony feature or any subfeatures, regardless of whether they use a cellular network for data connectivity.
Android 可以在不包含電話硬體的裝置上使用。也就是說,Android 相容於手機以外的裝置。 However, if a device implementation does include GSM or CDMA telephony, it MUST implement full support for the API for that technology.不包含電話硬體的設備實作必須將完整的 API 實作為無操作。
7.4.2. IEEE 802.11(無線網路)
Android Television device implementations MUST include Wi-Fi support. |
Android Television device implementations MUST include support for one or more forms of 802.11 (b/g/a/n, etc.) and other types of Android device implementation SHOULD include support for one or more forms of 802.11. If a device implementation does include support for 802.11 and exposes the functionality to a third-party application, it MUST implement the corresponding Android API and:
- MUST report the hardware feature flag android.hardware.wifi
- MUST implement the multicast API as described in the SDK documentation [ Resources, 79 ]
- MUST support multicast DNS (mDNS) and MUST NOT filter mDNS packets (224.0.0.251) at any time of operation including when the screen is not in an active state
7.4.2.1.無線直連
Device implementations SHOULD include support for Wi-Fi Direct (Wi-Fi peer-to-peer). If a device implementation does include support for Wi-Fi Direct, it MUST implement the corresponding Android API as described in the SDK documentation [ Resources, 80 ]. If a device implementation includes support for Wi-Fi Direct, then it:
- MUST report the hardware feature android.hardware.wifi.direct
- MUST support regular Wi-Fi operation
- SHOULD support concurrent Wi-Fi and Wi-Fi Direct operation
7.4.2.2. Wi-Fi Tunneled Direct Link Setup
Android Television device implementations MUST include support for Wi-Fi Tunneled Direct Link Setup (TDLS). |
Android Television device implementations MUST include support for Wi-Fi Tunneled Direct Link Setup (TDLS) and other types of Android device implementations SHOULD include support for Wi-Fi TDLS as described in the Android SDK Documentation [ Resources, 81 ]. If a device implementation does include support for TDLS and TDLS is enabled by the WiFiManager API, the device:
- SHOULD use TDLS only when it is possible AND beneficial
- SHOULD have some heuristic and NOT use TDLS when its performance might be worse than going through the Wi-Fi access point
7.4.3.藍牙
Android Television device implementations MUST support Bluetooth and Bluetooth LE and Android Watch device implementations MUST support Bluetooth. |
Android includes support for Bluetooth and Bluetooth Low Energy [ Resources, 82 ]. Device implementations that include support for Bluetooth and Bluetooth Low Energy MUST declare the relevant platform features (android.hardware.bluetooth and android.hardware.bluetooth_le respectively) and implement the platform APIs. Device implementations SHOULD implement relevant Bluetooth profiles such as A2DP, AVCP, OBEX, etc. as appropriate for the device. Android Television device implementations MUST support Bluetooth and Bluetooth LE.
Device implementations including support for Bluetooth Low Energy:
- MUST declare the hardware feature android.hardware.bluetooth_le
- MUST enable the GATT (generic attribute profile) based Bluetooth APIs as described in the SDK documentation and [ Resources, 82 ]
- SHOULD support offloading of the filtering logic to the bluetooth chipset when implementing the ScanFilter API [ Resources, 83 ], and MUST report the correct value of where the filtering logic is implemented whenever queried via the android.bluetooth.BluetoothAdapter.isOffloadedFilteringSupported() method
- SHOULD support offloading of the batched scanning to the bluetooth chipset, but if not supported, MUST report 'false' whenever queried via the android.bluetooth.BluetoothAdapater.isOffloadedScanBatchingSupported() method.
- SHOULD support multi advertisement with at least 4 slots, but if not supported, MUST report 'false' whenever queried via the android.bluetooth.BluetoothAdapter.isMultipleAdvertisementSupported() method
7.4.4.近場通訊
Device implementations SHOULD include a transceiver and related hardware for Near-Field Communications (NFC). If a device implementation does include NFC hardware and plans to make it available to third-party apps, then it:
- MUST report the android.hardware.nfc feature from the android.content.pm.PackageManager.hasSystemFeature() method [ Resources, 53 ]
- MUST be capable of reading and writing NDEF messages via the following NFC standards:
- MUST be capable of acting as an NFC Forum reader/writer (as defined by the NFC Forum technical specification NFCForum-TS-DigitalProtocol-1.0) via the following NFC standards:
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS 6319-4)
- IsoDep (ISO 14443-4)
- NFC Forum Tag Types 1, 2, 3, 4 (defined by the NFC Forum)
- SHOULD be capable of reading and writing NDEF messages via the following NFC standards. Note that while the NFC standards below are stated as SHOULD, the Compatibility Definition for a future version is planned to change these to MUST. These standards are optional in this version but will be required in future versions. Existing and new devices that run this version of Android are very strongly encouraged to meet these requirements now so they will be able to upgrade to the future platform releases.
- NfcV (ISO 15693)
- MUST be capable of transmitting and receiving data via the following peer-to-peer standards and protocols:
- ISO 18092
- LLCP 1.0 (defined by the NFC Forum)
- SDP 1.0 (defined by the NFC Forum)
- NDEF Push Protocol [ Resources, 84 ]
- SNEP 1.0 (defined by the NFC Forum)
- MUST include support for Android Beam [ Resources, 85 ]:
- MUST implement the SNEP default server. Valid NDEF messages received by the default SNEP server MUST be dispatched to applications using the android.nfc.ACTION_NDEF_DISCOVERED intent. Disabling Android Beam in settings MUST NOT disable dispatch of incoming NDEF message.
- MUST honor the android.settings.NFCSHARING_SETTINGS intent to show NFC sharing settings [ Resources, 86 ]
- MUST implement the NPP server. Messages received by the NPP server MUST be processed the same way as the SNEP default server.
- MUST implement a SNEP client and attempt to send outbound P2P NDEF to the default SNEP server when Android Beam is enabled. If no default SNEP server is found then the client MUST attempt to send to an NPP server.
- MUST allow foreground activities to set the outbound P2P NDEF message using android.nfc.NfcAdapter.setNdefPushMessage, and android.nfc.NfcAdapter.setNdefPushMessageCallback, and android.nfc.NfcAdapter.enableForegroundNdefPush
- SHOULD use a gesture or on-screen confirmation, such as 'Touch to Beam', before sending outbound P2P NDEF messages
- SHOULD enable Android Beam by default and MUST be able to send and receive using Android Beam, even when another proprietary NFC P2p mode is turned on
- MUST support NFC Connection handover to Bluetooth when the device supports Bluetooth Object Push Profile. Device implementations MUST support connection handover to Bluetooth when using android.nfc.NfcAdapter.setBeamPushUris, by implementing the "Connection Handover version 1.2" [ Resources, 87 ] and "Bluetooth Secure Simple Pairing Using NFC version 1.0" [ Resources, 88 ] specs from the NFC Forum. Such an implementation MUST implement the handover LLCP service with service name "urn:nfc:sn:handover" for exchanging the handover request/select records over NFC, and it MUST use the Bluetooth Object Push Profile for the actual Bluetooth data transfer. For legacy reasons (to remain compatible with Android 4.1 devices), the implementation SHOULD still accept SNEP GET requests for exchanging the handover request/select records over NFC. However an implementation itself SHOULD NOT send SNEP GET requests for performing connection handover.
- MUST poll for all supported technologies while in NFC discovery mode
- SHOULD be in NFC discovery mode while the device is awake with the screen active and the lock-screen unlocked
- MUST be capable of acting as an NFC Forum reader/writer (as defined by the NFC Forum technical specification NFCForum-TS-DigitalProtocol-1.0) via the following NFC standards:
(Note that publicly available links are not available for the JIS, ISO, and NFC Forum specifications cited above.)
Android 5.0 includes support for NFC Host Card Emulation (HCE) mode. If a device implementation does include an NFC controller capable of HCE and Application ID (AID) routing, then it:
- MUST report the android.hardware.nfc.hce feature constant
- MUST support NFC HCE APIs as defined in the Android SDK [ Resources, 10 ]
Additionally, device implementations MAY include reader/writer support for the following MIFARE technologies.
- MIFARE Classic
- MIFARE Ultralight
- NDEF on MIFARE Classic
Note that Android includes APIs for these MIFARE types. If a device implementation supports MIFARE in the reader/writer role, it:
- MUST implement the corresponding Android APIs as documented by the Android SDK
- MUST report the feature com.nxp.mifare from the android.content.pm.PackageManager.hasSystemFeature() meth od [Resources, 53] . Note that this is not a standard Android feature and as such does not appear as a constant on the PackageManager class.
- MUST NOT implement the corresponding Android APIs nor report the com.nxp.mifare feature unless it also implements general NFC support as described in this section
If a device implementation does not include NFC hardware, it MUST NOT declare the android.hardware.nfc feature from the android.content.pm.PackageManager.hasSystemFeature() method [ Resources, 53] , and MUST implement the Android NFC API as a no-op.
As the classes android.nfc.NdefMessage and android.nfc.NdefRecord represent a protocol-independent data representation format, device implementations MUST implement these APIs even if they do not include support for NFC or declare the android.hardware.nfc feature.
7.4.5。最低網路能力
Device implementations MUST include support for one or more forms of data networking. Specifically, device implementations MUST include support for at least one data standard capable of 200Kbit/sec or greater. Examples of technologies that satisfy this requirement include EDGE, HSPA, EV-DO, 802.11g, Ethernet, Bluetooth PAN, etc.
Device implementations where a physical networking standard (such as Ethernet) is the primary data connection SHOULD also include support for at least one common wireless data standard, such as 802.11 (Wi-Fi).
Devices MAY implement more than one form of data connectivity.
7.4.6。 Sync Settings
Device implementations MUST have the master auto-sync setting on by default so that the method getMasterSyncAutomatically() returns "true" [ Resources, 89 ].
7.5。相機
Device implementations SHOULD include a rear-facing camera and MAY include a front-facing camera. A rear-facing camera is a camera located on the side of the device opposite the display; that is, it images scenes on the far side of the device, like a traditional camera.前置相機是與顯示器位於裝置同一側的相機;也就是說,通常用於對使用者進行成像的相機,例如用於視訊會議和類似應用。
If a device implementation includes at least one camera, it SHOULD be possible for an application to simultaneously allocate 3 bitmaps equal to the size of the images produced by the largest-resolution camera sensor on the device.
7.5.1.後置攝像頭
Device implementations SHOULD include a rear-facing camera. If a device implementation includes at least one rear-facing camera, it:
- MUST report the feature flag android.hardware.camera and android.hardware.camera.any
- 解析度必須至少為 200 萬像素
- SHOULD have either hardware auto-focus or software auto-focus implemented in the camera driver (transparent to application software)
- 可能有定焦或 EDOF(擴展景深)硬件
- 可能包括閃光燈。如果相機包含閃光燈,則當 android.hardware.Camera.PreviewCallback 實例已在相機預覽表面上註冊時,閃光燈不得點亮,除非應用程式透過啟用 FLASH_MODE_AUTO 或 FLASH_MODE_ON 屬性明確啟用閃光燈。Camera.Parameters 物件。 Note that this constraint does not apply to the device's built-in system camera application, but only to third-party applications using Camera.PreviewCallback.
7.5.2.前置鏡頭
設備實現可能包括前置鏡頭。 If a device implementation includes at least one front-facing camera, it:
- MUST report the feature flag android.hardware.camera.any and android.hardware.camera.front
- MUST have a resolution of at least VGA (640x480 pixels)
- MUST NOT use a front-facing camera as the default for the Camera API. The camera API in Android has specific support for front-facing cameras and device implementations MUST NOT configure the API to to treat a front-facing camera as the default rear-facing camera, even if it is the only camera on the device.
- MAY include features (such as auto-focus, flash, etc.) available to rear-facing cameras as described in section 7.5.1
- MUST horizontally reflect (ie mirror) the stream displayed by an app in a CameraPreview, as follows:
- If the device implementation is capable of being rotated by user (such as automatically via an accelerometer or manually via user input), the camera preview MUST be mirrored horizontally relative to the device's current orientation.
- If the current application has explicitly requested that the Camera display be rotated via a call to the android.hardware.Camera.setDisplayOrientation()[ Resources, 90 ] method, the camera preview MUST be mirrored horizontally relative to the orientation specified by the application.
- Otherwise, the preview MUST be mirrored along the device's default horizontal axis.
- MUST mirror the image displayed by the postview in the same manner as the camera preview image stream. If the device implementation does not support postview, this requirement obviously does not apply.
- MUST NOT mirror the final captured still image or video streams returned to application callbacks or committed to media storage
7.5.3. External Camera
Device implementations with USB host mode MAY include support for an external camera that connects to the USB port. If a device includes support for an external camera, it:
- MUST declare the platform feature android.hardware.camera.external and android.hardware camera.any
- MUST support USB Video Class (UVC 1.0 or higher)
- MAY support multiple cameras
Video compression (such as MJPEG) support is RECOMMENDED to enable transfer of high-quality unencoded streams (ie raw or independently compressed picture streams). Camera-based video encoding MAY be supported. If so, a simultaneous unencoded/ MJPEG stream (QVGA or greater resolution) MUST be accessible to the device implementation.
7.5.4.相機 API 行為
Android includes two API packages to access the camera, the newer android.hardware.camera2 API expose lower-level camera control to the app, including efficient zero-copy burst/streaming flows and per-frame controls of exposure, gain, white balance gains, color conversion, denoising, sharpening, and more.
The older API package, android.hardware.Camera, is marked as deprecated in Android 5.0 but as it should still be available for apps to use Android device implementations MUST ensure the continued support of the API as Android descred in this as thiss in the 。
Device implementations MUST implement the following behaviors for the camera-related APIs, for all available cameras:
- 如果應用程式從未呼叫過 android.hardware.Camera.Parameters.setPreviewFormat(int),則裝置必須使用 android.hardware.PixelFormat.YCbCr_420_SP 來提供給應用程式回呼的預覽資料。
- 如果應用程式註冊了 android.hardware.Camera.PreviewCallback 實例,且當預覽格式為 YCbCr_420_SP 時系統呼叫 onPreviewFrame() 方法,則傳入 onPreviewFrame() 的 byte[] 中的資料也必須是 NV21 編碼格式。 That is, NV21 MUST be the default.
- For android.hardware.Camera, device implementations MUST support the YV12 format (as denoted by the android.graphics.ImageFormat.YV12 constant) for camera previews for both front- and rear-facing cameras. (The hardware video encoder and camera may use any native pixel format, but the device implementation MUST support conversion to YV12.)
- For android.hardware.camera2, device implementations must support the android.hardware.ImageFormat.YUV_420_888 and android.hardware.ImageFormat.JPEG formats as outputs through the android.media.ImageReader API.
Device implementations MUST still implement the full Camera API included in the Android SDK documentation [ Resources, 91 ], regardless of whether the device includes hardware autofocus or other capabilities. For instance, cameras that lack autofocus MUST still call any registered android.hardware.Camera.AutoFocusCallback instances (even though this has no relevance to a non-autofocus camera.) Note that this does apply to front-facing cameras; for instance, even though most front-facing cameras do not support autofocus, the API callbacks must still be "faked" as described.
如果底層硬體支援該功能,則裝置實作必須識別並遵循 android.hardware.Camera.Parameters 類別上定義為常數的每個參數名稱。如果設備硬體不支援某項功能,則 API 的行為必須依照文件記錄。 Conversely, device implementations MUST NOT honor or recognize string constants passed to the android.hardware.Camera.setParameters() method other than those documented as constants on the android.hardware.Camera.Parameters.也就是說,如果硬體允許,設備實作必須支援所有標準相機參數,並且不得支援自訂相機參數類型。 For instance, device implementations that support image capture using high dynamic range (HDR) imaging techniques MUST support camera parameter Camera.SCENE_MODE_HDR [ Resources, 92 ].
Because not all device implementations can fully support all the features of the android.hardware.camera2 API, device implementations MUST report the proper level of support with the android.info.supportedHardwareLevel property as described in the Android SDK [ Resources, 93] and report the appropriate framework feature flags [ Resources, 94] .
Device implementations MUST also declare its Individual camera capabilities of android.hardware.camera2 via the android.request.availableCapabilities property and declare the appropriate feature flags [ Resources, 94] ; a device must define the feature flag if any of its attached camera devices supports the feature.
Device implementations MUST broadcast the Camera.ACTION_NEW_PICTURE intent whenever a new picture is taken by the camera and the entry of the picture has been added to the media store.
Device implementations MUST broadcast the Camera.ACTION_NEW_VIDEO intent whenever a new video is recorded by the camera and the entry of the picture has been added to the media store.
7.5.5。相機方向
Both front- and rear-facing cameras, if present, MUST be oriented so that the long dimension of the camera aligns with the screen's long dimension.也就是說,當設備處於橫向方向時,相機必須以橫向方向捕捉影像。無論設備的自然方向如何,這都適用;也就是說,它適用於橫向主設備以及縱向主設備。
7.6。記憶體和儲存
7.6.1.最小內存和存儲
Android Television devices MUST have at least 5GB of non-volatile storage available for application private data. |
The memory available to the kernel and userspace on device implementations MUST be at least equal or larger than the minimum values specified by the following table. (See section 7.1.1 for screen size and density definitions.)
Density and screen size | 32-bit device | 64-bit device |
Android Watch devices (due to smaller screens) | 416MB | 不適用 |
xhdpi or lower on small/normal screens hdpi or lower on large screens mdpi or lower on extra large screens | 512MB | 832MB |
400dpi or higher on small/normal screens xhdpi or higher on large screens tvdpi or higher on extra large screens | 896MB | 1280MB |
560dpi or higher on small/normal screens 400dpi or higher on large screens xhdpi or higher on extra large screens | 1344MB | 1824MB |
The minimum memory values MUST be in addition to any memory space already dedicated to hardware components such as radio, video, and so on that is not under the kernel's control.
Android Television devices MUST have at least 5GB and other device implementations MUST have at least 1.5GB of non-volatile storage available for application private data. That is, the /data partition MUST be at least 5GB for Android Television devices and at least 1.5GB for other device implementations. Device implementations that run Android are very strongly encouraged to have at least 3GB of non-volatile storage for application private data so they will be able to upgrade to the future platform releases.
The Android APIs include a Download Manager that applications MAY use to download data files [ Resources, 95 ]. The device implementation of the Download Manager MUST be capable of downloading individual files of at least 100MB in size to the default "cache" location.
7.6.2.應用程式共享儲存
Device implementations MUST offer shared storage for applications also often referred as “shared external storage”.
必須使用預設安裝的「開箱即用」安裝的共用儲存配置設備實作。 If the shared storage is not mounted on the Linux path /sdcard, then the device MUST include a Linux symbolic link from /sdcard to the actual mount point.
Device implementations MAY have hardware for user-accessible removable storage, such as a Secure Digital (SD) card slot. If this slot is used to satisfy the shared storage requirement, the device implementation:
- MUST implement a toast or pop-up user interface warning the user when there is no SD card
- MUST include a FAT-formatted SD card 1GB in size or larger OR show on the box and other material available at time of purchase that the SD card has to be separately purchased
- MUST mount the SD card by default
Alternatively, device implementations MAY allocate internal (non-removable) storage as shared storage for apps as included in the upstream Android Open Source Project; device implementations SHOULD use this configuration and software implementation. If a device implementation uses internal (non-removable) storage to satisfy the shared storage requirement, that storage MUST be 1GB in size or larger and mounted on /sdcard (or /sdcard MUST be a symlicion別處)。
裝置實作必須依照記錄的android.permission.write_external_storage在此共用儲存中執行。共享儲存否則必須透過獲得該許可的任何應用程式可寫入。
Device implementations that include multiple shared storage paths (such as both an SD card slot and shared internal storage) MUST allow only pre-installed & privileged Android applications with the WRITE_EXTERNAL_STORAGE permission to write to the secondary external storage, except for the package-specific directories on the secondary external storage, but SHOULD expose content from both storage paths transparently through Android's media scanner service and android.provider.MediaStore.
Regardless of the form of shared storage used, device implementations MUST provide some mechanism to access the contents of shared storage from a host computer, such as USB mass storage (UMS) or Media Transfer Protocol (MTP). Device implementations MAY use USB mass storage, but SHOULD use Media Transfer Protocol. If the device implementation supports Media Transfer Protocol, it:
- SHOULD be compatible with the reference Android MTP host, Android File Transfer [ Resources, 96 ]
- SHOULD report a USB device class of 0x00
- SHOULD report a USB interface name of 'MTP'
If the device implementation lacks USB ports, it MUST provide a host computer with access to the contents of shared storage by some other means, such as a network file system.
7.7. USB
Device implementations SHOULD support USB peripheral mode and SHOULD support USB host mode.
If a device implementation includes a USB port supporting peripheral mode:
- The port MUST be connectable to a USB host that has a standard type-A or type -C USB port.
- The port SHOULD use micro-B, micro-AB or Type-C USB form factor. Existing and new Android devices are STRONGLY RECOMMENDED to meet these requirements so they will be able to upgrade to future platform releases.
- The port SHOULD either be located on the bottom of the device (according to natural orientation) or enable software screen rotation for all apps (including home screen), so that the display draws correctly when the device is oriented with the port at bottom. Existing and new Android devices are STRONGLY RECOMMENDED to meet these requirements so they will be able to upgrade to future platform releases.
- It SHOULD implement the Android Open Accessory (AOA) API and specification as documented in the Android SDK documentation, and if it is an Android Handheld device it MUST implement the AOA API. Device implementations implementing the AOA specification:
- MUST declare support for the hardware feature android.hardware.usb.accessory [ Resources, 97 ]
- MUST implement the USB audio class as documented in the Android SDK documentation [ Resources, 98 ]
- It SHOULD implement support to draw 1.5 A current during HS chirp and traffic as specified in the USB Battery Charging Specification, Revision 1.2 [ Resources, 99 ]. Existing and new Android devices are STRONGLY RECOMMENDED to meet these requirements so they will be able to upgrade to the future platform releases.
- The value of iSerialNumber in USB standard device descriptor MUST be equal to the value of android.os.Build.SERIAL.
If a device implementation includes a USB port supporting host mode, it:
- SHOULD use a type-C USB port, if the device implementation supports USB 3.1
- MAY use a non-standard port form factor, but if so MUST ship with a cable or cables adapting the port to a standard type-A or type-C USB port
- MAY use a micro-AB USB port, but if so SHOULD ship with a cable or cables adapting the port to a standard type-A or type-C USB port
- is very strongly RECOMMENDED to implement the USB audio class as documented in the Android SDK documentation [ Resources, 98 ]
- MUST implement the Android USB host API as documented in the Android SDK, and MUST declare support for the hardware feature android.hardware.usb.host [ Resources, 100 ]
- SHOULD support the Charging Downstream Port output current range of 1.5 A ~ 5 A as specified in the USB Battery Charging Specification, Revision 1.2 [ Resources, 99 ].
7.8。聲音的
7.8.1.麥克風
Android Handheld and Watch devices MUST include a microphone. |
Device implementations MAY omit a microphone. However, if a device implementation omits a microphone, it MUST NOT report the android.hardware.microphone feature constant, and MUST implement the audio recording API at least as no-ops, per section 7 . Conversely, device implementations that do possess a microphone:
- MUST report the android.hardware.microphone feature constant
- MUST meet the audio recording requirements in section 5.4
- MUST meet the audio latency requirements in section 5.6
7.8.2.音訊輸出
Android Watch devices MAY include an audio output. |
Device implementations including a speaker or with an audio/multimedia output port for an audio output peripheral as a headset or an external speaker:
- MUST report the android.hardware.audio.output feature constant
- MUST meet the audio playback requirements in section 5.5
- MUST meet the audio latency requirements in section 5.6
Conversely, if a device implementation does not include a speaker or audio output port, it MUST NOT report the android.hardware.audio output feature, and MUST implement the Audio Output related APIs as no-ops at least.
Android Watch device implementation MAY but SHOULD NOT have audio output, but other types of Android device implementations MUST have an audio output and declare android.hardware.audio.output.
7.8.2.1. Analog Audio Ports
In order to be compatible with the headsets and other audio accessories using the 3.5mm audio plug across the Android ecosystem [ Resources, 101 ], if a device implementation includes one or more analog audio ports, at least one of the audio port(s) SHOULD be a 4 conductor 3.5mm audio jack. If a device implementation has a 4 conductor 3.5mm audio jack, it:
- MUST support audio playback to stereo headphones and stereo headsets with a microphone, and SHOULD support audio recording from stereo headsets with a microphone
- MUST support TRRS audio plugs with the CTIA pin-out order, and SHOULD support audio plugs with the OMTP pin-out order
- MUST support the detection of microphone on the plugged in audio accessory, if the device implementation supports a microphone, and broadcast the android.intent.action.HEADSET_PLUG with the extra value microphone set as 1
- SHOULD support the detection and mapping to the keycodes for the following 3 ranges of equivalent impedance between the microphone and ground conductors on the audio plug:
- 70 ohm or less : KEYCODE_HEADSETHOOK
- 210–290 Ohm : KEYCODE_VOLUME_UP
- 360–680 Ohm : KEYCODE_VOLUME_DOWN
- SHOULD support the detection and mapping to the keycode for the following range of equivalent impedance between the microphone and ground conductors on the audio plug:
- 110–180 Ohm: KEYCODE_VOICE_ASSIST
- MUST trigger ACTION_HEADSET_PLUG upon a plug insert, but only after all contacts on plug are touching their relevant segments on the jack
- MUST be capable of driving at least 150mV +/- 10% of output voltage on a 32 Ohm speaker impedance
- MUST have a microphone bias voltage between 1.8V ~ 2.9V
8. 效能相容性
Some minimum performance criterias are critical to the user experience and impacts the baseline assumptions developers would have when developing an app. Android Watch devices SHOULD and other type of device implementations MUST meet the following criteria:
8.1.使用者體驗一致性
Device implementations MUST provide a smooth user interface by ensuring a consistent frame rate and response times for applications and games. Device implementations MUST meet the following requirements:
- Consistent frame latency Inconsistent frame latency or a delay to render frames MUST NOT happen more often than 5 frames in a second, and SHOULD be below 1 frames in a second.
- User interface latency Device implementations MUST ensure low latency user experience by scrolling a list of 10K list entries as defined by the Android Compatibility Test Suite (CTS) in less than 36 secs.
- Task switching When multiple applications have been launched, re-launching an already-running application after it has been launched MUST take less than 1 second.
8.2.文件 I/O 存取效能
Device implementations MUST ensure file access performance consistency for read and write operations.
- Sequential write Device implementations MUST ensure a sequential write performance of 5MB/s for a 256MB file using 10MB write buffer.
- Random write Device implementations MUST ensure a random write performance of 0.5MB/s for a 256MB file using 4KB write buffer.
- Sequential read Device implementations MUST ensure a sequential read performance of 15MB/s for a 256MB file using 10MB write buffer.
- Random read Device implementations MUST ensure a random read performance of 3.5MB/s for a 256MB file using 4KB write buffer.
9. 安全模型相容性
Device implementations MUST implement a security model consistent with the Android platform security model as defined in Security and Permissions reference document in the APIs [ Resources, 102 ] in the Android developer documentation.設備實作必須支援安裝自簽署的應用程序,而無需任何第三方/當局的任何其他權限/憑證。 Specifically, compatible devices MUST support the security mechanisms described in the follow subsections.
9.1.權限
Device implementations MUST support the Android permissions model as defined in the Android developer documentation [ Resources, 102 ].具體而言,實施必須執行按照SDK文件中所述的每個許可;無法省略,更改或忽略權限。如果新的權限ID字串不在Android中。*名稱空間,則實作可能會增加其他權限。
9.2. UID 和進程隔離
Device implementations MUST support the Android application sandbox model, in which each application runs as a unique Unixstyle UID and in a separate process. Device implementations MUST support running multiple applications as the same Linux user ID, provided that the applications are properly signed and constructed, as defined in the Security and Permissions reference [ Resources, 102 ].
9.3.檔案系統權限
Device implementations MUST support the Android file access permissions model as defined in the Security and Permissions reference [ Resources, 102 ].
9.4.備用執行環境
Device implementations MAY include runtime environments that execute applications using some other software or technology than the Dalvik Executable Format or native code.但是,此類替代執行環境不得妥協,如本節所述,因此安裝了Android應用程式的安全模型或已安裝的Android應用程式的安全性。
Alternate runtimes MUST themselves be Android applications, and abide by the standard Android security model, as described elsewhere in section 9 .
Alternate runtimes MUST NOT be granted access to resources protected by permissions not requested in the runtime's AndroidManifest.xml file via the
替代運行時間不得允許應用程式使用受系統應用程式限制的Android權限保護的功能。
替代運行時必須遵守Android沙盒模型。 Specifically, alternate runtimes:
- SHOULD install apps via the PackageManager into separate Android sandboxes ( Linux user IDs, etc.)
- MAY provide a single Android sandbox shared by all applications using the alternate runtime
- and installed applications using an alternate runtime, MUST NOT reuse the sandbox of any other app installed on the device, except through the standard Android mechanisms of shared user ID and signing certificate
- MUST NOT launch with, grant, or be granted access to the sandboxes corresponding to other Android applications
- MUST NOT be launched with, be granted, or grant to other applications any privileges of the superuser (root), or of any other user ID
備用運行時間的.APK檔案可能包含在裝置實現的系統影像中,但必須以與簽署裝置實作中包含的其他應用程式的金鑰簽署。
安裝應用程式時,替代運行時間必須獲得應用程式使用的Android權限的用戶同意。 If an application needs to make use of a device resource for which there is a corresponding Android permission (such as Camera, GPS, etc.), the alternate runtime MUST inform the user that the application will be able to access that resource.如果運行時環境未以這種方式記錄應用程式功能,則運行時環境必須在使用該運行時安裝任何應用程式時列出運行時本身持有的所有權限。
9.5。 Multi-User Support
This feature is optional for all device types. |
Android includes support for multiple users and provides support for full user isolation [ Resources, 103] . Device implementations MAY enable multiple users, but when enabled MUST meet the following requirements related to multi-user support [ Resources, 104 ]:
- Device implementations that do not declare the android.hardware.telephony feature flag MUST support restricted profiles, a feature that allows device owners to manage additional users and their capabilities on the device. With restricted profiles, device owners can quickly set up separate environments for additional users to work in, with the ability to manage finer-grained restrictions in the apps that are available in those environments.
- Conversely device implementations that declare the android.hardware.telephony feature flag MUST NOT support restricted profiles but MUST align with the AOSP implementation of controls to enable /disable other users from accessing the voice calls and SMS.
- Device implementations MUST, for each user, implement a security model consistent with the Android platform security model as defined in Security and Permissions reference document in the APIs [ Resources, 102 ]
- Device implementations MAY support creating users and managed profiles via the android.app.admin.DevicePolicyManager APIs, and if supported, MUST declare the platform feature flag android.software.managed_users.
- Device implementations that declare the feature flag android.software.managed_users MUST use the upstream AOSP icon badge to represent the managed applications and other badge UI elements like Recents & Notifications.
- Each user instance on an Android device MUST have separate and isolated external storage directories. Device implementations MAY store multiple users' data on the same volume or filesystem. However, the device implementation MUST ensure that applications owned by and running on behalf a given user cannot list, read, or write to data owned by any other user. Note that removable media, such as SD card slots, can allow one user to access another's data by means of a host PC. For this reason, device implementations that use removable media for the primary external storage APIs MUST encrypt the contents of the SD card if multiuser is enabled using a key stored only on non-removable media accessible only to the system. As this will make the media unreadable by a host PC, device implementations will be required to switch to MTP or a similar system to provide host PCs with access to the current user's data. Accordingly, device implementations MAY but SHOULD NOT enable multi-user if they use removable media [ Resources, 105 ] for primary external storage.
9.6. Premium SMS Warning
Android includes support for warning users of any outgoing premium SMS message [ Resources, 106 ] . Premium SMS messages are text messages sent to a service registered with a carrier that may incur a charge to the user. Device implementations that declare support for android.hardware.telephony MUST warn users before sending a SMS message to numbers identified by regular expressions defined in /data/misc/sms/codes.xml file in the device. The upstream Android Open Source Project provides an implementation that satisfies this requirement.
9.7. Kernel Security Features
The Android Sandbox includes features that use the Security-Enhanced Linux (SELinux) mandatory access control (MAC) system and other security features in the Linux kernel. SELinux or any other security features implemented below the Android framework:
- MUST maintain compatibility with existing applications
- MUST NOT have a visible user interface when a security violation is detected and successfully blocked, but MAY have a visible user interface when an unblocked security violation occurs resulting in a successful exploit
- SHOULD NOT be user or developer configurable
If any API for configuration of policy is exposed to an application that can affect another application (such as a Device Administration API), the API MUST NOT allow configurations that break compatibility.
Devices MUST implement SELinux or, if using a kernel other than Linux, an equivalent mandatory access control system. Devices must also meet the following requirements, which are satisfied by the reference implementation in the upstream Android Open Source Project.
設備實現:
- MUST set SELinux to global enforcing mode,
- MUST configure all domains in enforcing mode. No permissive mode domains are allowed, including domains specific to a device/vendor.
- MUST NOT modify, omit, or replace the neverallow rules present within the external/sepolicy folder provided in the upstream Android Open Source Project (AOSP) and the policy MUST compile with all neverallow rules present, for both AOSP SELinux domains as well as device/vendor specific domains.
Device implementations SHOULD retain the default SELinux policy provided in the external/sepolicy folder of the upstream Android Open Source Project and only further add to this policy for their own device-specific configuration. Device implementations MUST be compatible with the upstream Android Open Source Project.
9.8.隱私
If the device implements functionality in the system that captures the contents displayed on the screen and/or records the audio stream played on the device, it MUST continuously notify the user whenever this functionality is enabled and actively capturing/recording.
9.9.全碟加密
Optional for Android device implementations without a lock screen. |
If the device implementation has a lock screen, the device MUST support full-disk encryption of the application private data, (/data partition) as well as the SD card partition if it is a permanent, non-removable part of the device [ Resources, 107 ]. For devices supporting full-disk encryption, the full-disk encryption SHOULD be enabled all the time after the user has completed the out-of-box experience. While this requirement is stated as SHOULD for this version of the Android platform, it is very strongly RECOMMENDED as we expect this to change to MUST in the future versions of Android. Encryption MUST use AES with a key of 128-bits (or greater) and a mode designed for storage (for example, AES-XTS, AES-CBC-ESSIV). The encryption key MUST NOT be written to storage at any time without being encrypted. Other than when in active use, the encryption key SHOULD be AES encrypted with the lockscreen passcode stretched using a slow stretching algorithm (eg PBKDF2 or scrypt). If the user has not specified a lockscreen passcode or has disabled use of the passcode for encryption, the system SHOULD use a default passcode to wrap the encryption key. If the device provides a hardware-backed keystore, the password stretching algorithm MUST be cryptographically bound to that keystore. The encryption key MUST NOT be sent off the device (even when wrapped with the user passcode and/or hardware bound key). The upstream Android Open Source project provides a preferred implementation of this feature based on the linux kernel feature dm-crypt.
9.10。驗證啟動
Device implementations SHOULD support verified boot for device integrity, and if the feature is supported it MUST declare the platform feature flag android.software.verified_boot. While this requirement is stated as SHOULD for this version of the Android platform, it is very strongly RECOMMENDED as we expect this to change to MUST in the future versions of Android. The upstream Android Open Source Project provides a preferred implementation of this feature based on the linux kernel feature dm-verity.
10.軟體相容性測試
Device implementations MUST pass all tests described in this section.
However, note that no software test package is fully comprehensive. For this reason, device implementers are very strongly encouraged to make the minimum number of changes as possible to the reference and preferred implementation of Android available from the Android Open Source Project. This will minimize the risk of introducing bugs that create incompatibilities requiring rework and potential device updates.
10.1.相容性測試套件
Device implementations MUST pass the Android Compatibility Test Suite (CTS) [ Resources, 108 ] available from the Android Open Source Project, using the final shipping software on the device.此外,設備實施者應盡可能使用Android開源樹中的參考實現,並且必須確保在CTS含糊不清以及參考原始碼部分的任何重新實現的情況下相容。
CTS設計為在實際設備上運作。像任何軟體一樣,CTS本身可能包含錯誤。 The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the CTS may be released for Android 5.0.設備實作必須傳遞設備軟體完成時可用的最新CTS版本。
10.2. CTS驗證器
Device implementations MUST correctly execute all applicable cases in the CTS Verifier. The CTS Verifier is included with the Compatibility Test Suite, and is intended to be run by a human operator to test functionality that cannot be tested by an automated system, such as correct functioning of a camera and sensors.
The CTS Verifier has tests for many kinds of hardware, including some hardware that is optional. Device implementations MUST pass all tests for hardware that they possess; for instance, if a device possesses an accelerometer, it MUST correctly execute the Accelerometer test case in the CTS Verifier. Test cases for features noted as optional by this Compatibility Definition Document MAY be skipped or omitted.
Every device and every build MUST correctly run the CTS Verifier, as noted above. However, since many builds are very similar, device implementers are not expected to explicitly run the CTS Verifier on builds that differ only in trivial ways. Specifically, device implementations that differ from an implementation that has passed the CTS Verifier only by the set of included locales, branding, etc. MAY omit the CTS Verifier test.
11. 可更新的軟體
設備實現必須包括替換整個系統軟體的機制。 The mechanism need not perform "live" upgrades—that is, a device restart MAY be required.
只要可以替換設備上預先安裝的整個軟體,就可以使用任何方法。例如,以下任何方法都可以滿足此要求:
- 透過重新啟動的離線更新的直播(OTA)下載
- 主機PC上USB上的「束縛」更新
- 「離線」透過重新啟動進行更新,並在可移動儲存空間上的檔案中更新
However, if the device implementation includes support for an unmetered data connection such as 802.11 or Bluetooth PAN (Personal Area Network) profile, the device MUST support Over-the-air download with offline update via reboot.
所使用的更新機制必須支援更新,而無需擦除使用者資料。 That is, the update mechanism MUST preserve application private data and application shared data.請注意,上游Android軟體包括滿足此要求的更新機制。
For device implementations that are launching with Android 5.0 and later, the update mechanism SHOULD support verifying that the system image is binary identical to expected result following an OTA. The block-based OTA implementation in the upstream Android Open Source Project, added since Android 5.0, satisfies this requirement.
關係 i可根據剛才描述的機制應用的更新。
12. 文件變更日誌
The following table contains a summary of the changes to the Compatibility Definition in this release.
部分 | 變更概要 |
一、簡介 | Updated requirements to refer to SDK documentation as source of truth. |
2. Device Types | Included definitions for device types for handheld, television, and watch devices. |
2.1 Device Configuration | Added non-exhaustive list to illustrate hardware configuration deviation across devices. |
3.1.託管 API 相容性 | MUST also provide complete implementations of APIs with "@SystemApi" marker in the upstream Android source code. |
3.2.2.建構參數 | Included SUPPORTED_ABIS, SUPPORTED_32_BIT_ABIS, and SUPPORTED_64_BIT_ABIS parameters in list, updated PRODUCT to require unique Product SKUs, and updated TAGS. |
3.2.3.1.核心應用意圖 | Clarified language that the compatibility requirement is for mainly the intents pattern |
3.2.3.5. Default App Settings | Included new requirements for home screen, NFC, and default SMS applications. |
3.3.1 應用程式二進位介面 | Added requirements to support equivalent 32-bit ABI if any 64-bit ABI is supported. Updated parameters to reflect this change. |
3.4.1.網頁視圖相容性 | Webview compatibility required for all devices except Android Watch devices. Removed Locale string requirement. |
3.4.2.瀏覽器相容性 | Android Television and Watch Devices MAY omit a browser application, but all other types of device implementations MUST include one. |
3.7. Runtime compatibility | Updated Minimum application memory requirements |
3.8.2.小部件 | Widget support is optional for all device types, but recommended for Handheld Devices. |
3.8.3.通知 | Expanded definitions for types of supported notifications. |
3.8.4.搜尋 | Android Television devices MUST include global search. All other device types SHOULD. |
3.8.6。主題 | Devices MUST support material theme. |
3.8.7.動態壁紙 | Devices that include live wallpaper MUST report the platform feature flag android.software.live_wallpaper. |
3.8.8. Activity Switching | Advised requirement to support new Recents User Interface. SHOULD at least display the title of 4 activities at a time. |
3.8.10. Lock Screen Media Remote Control | Remote Control Client API deprecated in favor of the Media Notification Template |
3.8.11.夢 | Optional for Android Watch devices. Required for all other device types. |
3.8.13 Unicode and font | MUST support Roboto 2 in addition to existing requirements. |
3.12. TV Input Framework | Android Television device implementations MUST support Television Input Framework. |
5.1.媒體編解碼器 | Added 3 sections for Audio, Image, and Video codecs. |
5.4 Audio Recording | Broken into subsections |
5.4.1. Raw audio capture | Defined characteristics for raw audio capture on devices that declare android.hardware.microphone |
5.5.音訊播放 | Added section 5.5. Audio Playback with 2 subsections: 5.5.1 Audio Effects and 5.5.2. Audio Output Volume |
5.6 Audio Latency | Added definitions and requirements for cold output jitter, cold input jitter, and continuous round-trip latency. |
5.8 Secure Media | Included secure media requirements from 7.1.8. External Displays and added requirements for Android Television. |
6.1.開發者工具 | Updated resources. |
6.2.1.實驗性的 | Removed section |
7. 硬體相容性 | Updated to reflect that device implementations MUST consistently report accurate hardware configuration for the same build fingerprint. |
7.1.1.1.螢幕尺寸 | Updated to reflect Android Watch devices screen size and that the value can't change |
7.1.1.2.螢幕縱橫比 | Updated to reflect Android Watch devices screen aspect ratio (1:1). |
7.1.3.螢幕方向 | Updated to reflect that devices with a fixed orientation landscape screen SHOULD only report that orientation. |
7.1.4. 2D 和 3D 圖形加速 | Added that Android devices MAY support the Android extension pack. |
(old) 7.1.6.螢幕類型 | Section Removed |
7.1.6。螢幕技術 | Updated pixel aspect ratio (PAR) to be between 0.9 and 1.15. (~15% tolerance) |
7.1.7. External Displays | Moved part of section to section 5.8. Secure Media. |
7.2.2.非觸控式導航 | Android Television devices MUST support D-pad. |
7.2.3.導航鍵 | Included language for support across different device types. |
7.2.4.觸控螢幕輸入 | Android Watch devices MUST support touchscreen input. |
7.2.6。遊戲控制器支持 | Added section with Android Television requirements. |
7.2.7.遙控 | Added section with Android Television requirements. |
7.3.感應器 | Redefined synthetic sensors as composite sensors and streaming sensors as continuous sensors. Sensors should report event time in nanoseconds. |
7.3.1.加速度計 | Clarified required sensor types and revised requirement thresholds. |
7.3.2.磁力計 | Clarified required sensor types and revised requirement thresholds. |
7.3.4.陀螺儀 | Clarified required sensor types and revised requirement thresholds. |
7.3.5。晴雨表 | Changed from MAY to SHOULD implement barometer. MUST implement and report TYPE_PRESSURE sensor. |
7.3.6。溫度計 | Devices MAY include ambient thermometer. MAY but SHOULD NOT include CPU thermometer. |
7.3.8.接近感測器 | Devices that can make a voice call and indicate any value other than PHONE_TYPE_NONE in getPhoneType SHOULD include a proximity sensor. |
7.4.2. IEEE 802.11(無線網路) | Android Television devices MUST include Wi-Fi support. Devices that DO support wifi must report android.hardware.wifi. |
7.4.2.1.無線直連 | MUST report the hardware feature android.hardware.wifi.direct. |
7.4.2.2. Wi-Fi Tunneled Direct Link Setup | Android Television devices MUST include support for Wi-Fi TDLS. |
7.5。相機 | If a device implementation includes at least one camera, it SHOULD be possible for an application to simultaneously allocate 3 bitmaps equal to the size of the images produced by the largest-resolution camera sensor on the device. |
7.5.3.外接攝影機 | Added requirements that device implementations with USB host mode MAY include support for an external camera. |
7.5.5。 Camera System Features | Added list of camera features and when they should be defined. |
7.6.1.最小內存和存儲 | Updated requirements for 32- and 64-bit devices. SVELTE memory requirement removed. Devices MUST have at least 1.5GB of non-volatile storage |
7.6.2.應用程式共享儲存 | Updated requirements for user-accessible removable storage |
7.6.2.應用程式共享儲存 | Updated requirements that pre-installed system apps may write to secondary external storage. |
7.7. USB | Removed requirements for non-charging ports being on the same edge as the micro-USB port. Updated requirements for Host and Peripheral mode. |
7.7. USB | Fixing typos in the USB section. |
7.8.1.聲音的 | Moved microphone section here. Added requirements for Audio Output and Audio Analog ports. |
8. 效能相容性 | Added requirements for user interface consistency. |
9.5。 Multi-User Support | Multi-user support feature is optional for all device types. Detailed requirements by device type in section. |
9.5。 Multi-User Support | SD card encryption required for the primary external storage. |
9.7. Kernel Security Features | MAY have a visible user interface when an unblocked security violation occurs resulting in a successful exploit. No permissive mode domains allowed. |
9.9.全碟加密 | Devices with a lock screen SHOULD support full-disk encryption. For new devices, full-disk encryption must be enabled out of box. |
9.10 Verified boot | Added section to recommend that Device implementations support verified boot for device integrity. |
10.3.參考應用 | Removed section from CDD. |
11. 可更新的軟體 | If a device supports 802.11 or Bluetooth PAN (Personal Area Network) profile, then it MUST support Over-the-air download with offline update via reboot. |
14. Resources | Resources moved from section 2 to section 14 |
13. 聯絡我們
You can join the android-compatibility forum [Resources, 109 ] and ask for clarifications or bring up any issues that you think the document does not cover.
14. Resources
1. IETF RFC2119 Requirement Levels: http://www.ietf.org/rfc/rfc2119.txt
2. Android Open Source Project: http://source.android.com/
3. Android Television features: http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_LEANBACK
4. Android Watch feature: http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_WATCH
5. API定義與文件: http://developer.android.com/reference/packages.html
6. Android Permissions reference: http://developer.android.com/reference/android/Manifest.permission.html
7. android.os.Build reference: http://developer.android.com/reference/android/os/Build.html
8. Android 5.0 allowed version strings: http://source.android.com//docs/compatibility/5.0/versions
9. Telephony Provider: http://developer.android.com/reference/android/provider/Telephony.html
10. Host-based Card Emulation: http://developer.android.com/guide/topics/connectivity/nfc/hce.html
11. Android Extension Pack: http://developer.android.com/guide/topics/graphics/opengl.html#aep
12. android.webkit.WebView class: http://developer.android.com/reference/android/webkit/WebView.html
13. WebView compatibility: http://www.chromium.org/
14. HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
15. HTML5 offline capabilities: http://dev.w3.org/html5/spec/Overview.html#offline
16. HTML5 video tag: http://dev.w3.org/html5/spec/Overview.html#video
17. HTML5/W3C geolocation API: http://www.w3.org/TR/geolocation-API/
18. HTML5/W3C webstorage API: http://www.w3.org/TR/webstorage/
19. HTML5/W3C IndexedDB API: http://www.w3.org/TR/IndexedDB/
20. Dalvik Executable Format and bytecode specification: available in the Android source code, at dalvik/docs
21. AppWidgets: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
22. Notifications: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
23. Application Resources: https://developer.android.com/guide/topics/resources/available-resources.html
24. Status Bar icon style guide: http://developer.android.com/design/style/iconography.html
25. Notifications Resources: https://developer.android.com/design/patterns/notifications.html
26. Search Manager: http://developer.android.com/reference/android/app/SearchManager.html
27. Toasts: http://developer.android.com/reference/android/widget/Toast.html
28. Themes: http://developer.android.com/guide/topics/ui/themes.html
29. R.style class: http://developer.android.com/reference/android/R.style.html
30. Material design: http://developer.android.com/reference/android/R.style.html#Theme_Material
31. Live Wallpapers: http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
32. Overview screen resources: http://developer.android.com/guide/components/recents.html
33. Screen pinning: https://developer.android.com/about/versions/android-5.0.html#ScreenPinning
34. Input methods: http://developer.android.com/guide/topics/text/creating-input-method.html
35. Media Notification: https://developer.android.com/reference/android/app/Notification.MediaStyle.html
36. Dreams: http://developer.android.com/reference/android/service/dreams/DreamService.html
37. Settings.Secure LOCATION_MODE:
http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE
38. Unicode 6.1.0: http://www.unicode.org/versions/Unicode6.1.0/
39. Android Device Administration: http://developer.android.com/guide/topics/admin/device-admin.html
40. DevicePolicyManager reference: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
41. Android Device Owner App:
42. Android Accessibility Service APIs: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
43. Android Accessibility APIs: http://developer.android.com/reference/android/view/accessibility/package-summary.html
44. Eyes Free project: http://code.google.com/p/eyes-free
45. Text-To-Speech APIs: http://developer.android.com/reference/android/speech/tts/package-summary.html
46. Television Input Framework: /devices/tv/index.html
47. Reference tool documentation (for adb, aapt, ddms, systrace): http://developer.android.com/guide/developing/tools/index.html
48. Android apk file description: http://developer.android.com/guide/components/fundamentals.html
49. Manifest files: http://developer.android.com/guide/topics/manifest/manifest-intro.html
50. Android Media Formats: http://developer.android.com/guide/appendix/media-formats.html
51. RTC Hardware Coding Requirements: http://www.webmproject.org/hardware/rtc-coding-requirements/
52. AudioEffect API: http://developer.android.com/reference/android/media/audiofx/AudioEffect.html
53. Android android.content.pm.PackageManager class and Hardware Features List:
http://developer.android.com/reference/android/content/pm/PackageManager.html
54. HTTP Live Streaming Draft Protocol: http://tools.ietf.org/html/draft-pantos-http-live-streaming-03
55. ADB: http://developer.android.com/tools/help/adb.html
56. Dumpsys: https://developer.android.com/studio/command-line/dumpsys.html
57. DDMS: http://developer.android.com/tools/debugging/ddms.html
58. Monkey testing tool: http://developer.android.com/tools/help/monkey.html
59. SysyTrace tool: http://developer.android.com/tools/help/systrace.html
60. Android Application Development-Related Settings:
61. Supporting Multiple Screens: http://developer.android.com/guide/practices/screens_support.html
62. android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
63. RenderScript: http://developer.android.com/guide/topics/renderscript/
64. Android extension pack for OpenGL ES: https://developer.android.com/reference/android/opengl/GLES31Ext.html
65. Hardware Acceleration: http://developer.android.com/guide/topics/graphics/hardware-accel.html
66. EGL Extension-EGL_ANDROID_RECORDABLE:
http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt
67. Display Manager: http://developer.android.com/reference/android/hardware/display/DisplayManager.html
68. android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
69. Action Assist: http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST
70. Touch Input Configuration: http://source.android.com/docs/core/interaction/input/touch-devices
71. Motion Event API: http://developer.android.com/reference/android/view/MotionEvent.html
72. Key Event API: http://developer.android.com/reference/android/view/KeyEvent.html
73. Android Open Source sensors: http://source.android.com/docs/core/interaction/sensors
74. android.hardware.SensorEvent: http://developer.android.com/reference/android/hardware/SensorEvent.html
75. Timestamp sensor event: http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp
76. Android Open Source composite sensors: http://source.android.com/devices/sensors/composite_sensors.html
77. Continuous trigger mode: http://source.android.com/devices/sensors/base_triggers.html#continuous
78. Accelerometer sensor: http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER
79. Wi-Fi Multicast API: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
80. Wi-Fi Direct (Wi-Fi P2P): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
81. WifiManager API: http://developer.android.com/reference/android/net/wifi/WifiManager.html
82. Bluetooth API: http://developer.android.com/reference/android/bluetooth/package-summary.html
83. Bluetooth ScanFilter API: https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html
84. NDEF Push Protocol: http://source.android.com/docs/compatibility/ndef-push-protocol.pdf
85. Android Beam: http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
86. Android NFC Sharing Settings:
http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
87. NFC Connection Handover: http://www.nfc-forum.org/specs/spec_list/#conn_handover
88. Bluetooth Secure Simple Pairing Using NFC: http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf
89. Content Resolver: http://developer.android.com/reference/android/content/ContentResolver.html
90. Camera orientation API: http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
91. Camera: http://developer.android.com/reference/android/hardware/Camera.html
92. Camera: http://developer.android.com/reference/android/hardware/Camera.Parameters.html
93. Camera hardware level: https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL
94. Camera version support: http://source.android.com/docs/core/camera/versioning
95. Android DownloadManager: http://developer.android.com/reference/android/app/DownloadManager.html
96. Android File Transfer: http://www.android.com/filetransfer
97. Android Open Accessories: http://developer.android.com/guide/topics/usb/accessory.html
98. Android USB Audio: http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
99. USB Battery Charging Specification, Revision 1.2: http://www.usb.org/developers/docs/devclass_docs/BCv1.2_070312.zip
100. USB Host API: http://developer.android.com/guide/topics/usb/host.html
101. Wired audio headset: http://source.android.com/docs/core/interaction/accessories/headset/plug-headset-spec
102. Android Security and Permissions reference: http://developer.android.com/guide/topics/security/permissions.html
103. UserManager reference: http://developer.android.com/reference/android/os/UserManager.html
104. External Storage reference: http://source.android.com/docs/core/storage
105. External Storage APIs: http://developer.android.com/reference/android/os/Environment.html
106. SMS Short Code: http://en.wikipedia.org/wiki/Short_code
107. Android Open Source Encryption: http://source.android.com/devices/tech/encryption/index.html
108. Android Compatibility Program Overview: http://source.android.com/docs/compatibility
109. Android Compatibility forum: https://groups.google.com/forum/#!forum/android-compatibility
110. WebM project: http://www.webmproject.org/
Many of these resources are derived directly or indirectly from the Android SDK, and will be functionally identical to the information in that SDK's documentation.在任何情況下,如果本相容性定義或相容性測試套件與 SDK 文件不一致,則 SDK 文件被視為具有權威性。上述參考文獻中提供的任何技術細節均被視為包含在本相容性定義中。