Android 2.1 相容性定義

著作權所有 © 2010, Google Inc. 保留所有權利。
compatibility@android.com

1. 簡介

本文件列舉了手機必須符合的條件,才能與 Android 2.1 相容。

使用「必須」、「不得」、「必要」、「應」、「應當」、「不得」、「應」、「不得」、「建議」、「可」和「選用」等詞彙,是根據 RFC2119 中定義的 IETF 標準 [資源, 1]。

在這份文件中,「裝置實作者」或「實作者」是指開發搭載 Android 2.1 的硬體/軟體解決方案的個人或機構。「裝置實作」或「實作」是指所開發的硬體/軟體解決方案。

如要與 Android 2.1 相容,裝置實作方式必須符合下列條件:

  • 必須符合本相容性定義中列出的規定,包括透過參照納入的任何文件。
  • 必須在裝置實作軟體完成時,通過最新版本的 Android 相容性測試套件 (CTS)。(CTS 可透過 Android 開放原始碼計畫取得 [資源, 2]。)CTS 會測試本文所述的許多元件,但並非全部。

如果此定義或 CTS 未明確說明、含糊不清或不完整,裝置實作端必須負責確保與現有實作項目相容。因此,Android 開放原始碼計畫 [Resources, 3] 是 Android 的參考和偏好實作項目。強烈建議裝置實作者根據 Android 開放原始碼計畫提供的「上游」原始碼實作。雖然部分元件可假設以其他實作項目取代,但我們強烈建議不要這麼做,因為通過 CTS 測試將變得更加困難。實作者有責任確保與標準 Android 實作項目的完整行為相容性,包括 Compatibility Test Suite 和其他項目。最後,請注意,本文件明文禁止某些元件替換和修改作業。

2. 資源

  1. IETF RFC2119 需求層級: http://www.ietf.org/rfc/rfc2119.txt
  2. Android 相容性計畫總覽: http://source.android.com/compatibility/index.html
  3. Android 開放原始碼計畫: http://source.android.com/
  4. API 定義和說明文件: http://developer.android.com/reference/packages.html
  5. Android 權限參考資料: http://developer.android.com/reference/android/Manifest.permission.html
  6. android.os.Build 參考資料: http://developer.android.com/reference/android/os/Build.html
  7. Android 2.1 允許使用的版本字串: http://source.android.com/docs/compatibility/2.1/versions.html
  8. android.webkit.WebView 類別: http://developer.android.com/reference/android/webkit/WebView.html
  9. HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
  10. Dalvik 虛擬機器規格:可在 Android 原始碼的 dalvik/docs 中找到
  11. App Widget: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
  12. 通知: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
  13. 應用程式資源: http://code.google.com/android/reference/available-resources.html
  14. 狀態列圖示樣式指南: http://developer.android.com/guide/practices/ui_guideline /icon_design.html#statusbarstructure
  15. Search Manager: http://developer.android.com/reference/android/app/SearchManager.html
  16. Toast: http://developer.android.com/reference/android/widget/Toast.html
  17. 動態桌布: https://android-developers.googleblog.com/2010/02/live-wallpapers.html
  18. Android 應用程式: http://code.google.com/p/apps-for-android
  19. 參考工具說明文件 (適用於 ADB、AAPT、DDMS): http://developer.android.com/guide/developing/tools/index.html
  20. Android APK 檔案說明: http://developer.android.com/guide/topics/fundamentals.html
  21. 資訊清單檔案: http://developer.android.com/guide/topics/manifest/manifest-intro.html
  22. Monkey 測試工具: https://developer.android.com/studio/test/other-testing-tools/monkey
  23. 支援多個螢幕: http://developer.android.com/guide/practices/screens_support.html
  24. android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
  25. android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
  26. android.hardware.Camera: http://developer.android.com/reference/android/hardware/Camera.html
  27. 感應器座標空間: http://developer.android.com/reference/android/hardware/SensorEvent.html
  28. Android 安全性和權限參考資料: http://developer.android.com/guide/topics/security/security.html
  29. Bluetooth API: http://developer.android.com/reference/android/bluetooth/package-summary.html

這些資源多半是直接或間接從 Android 2.1 SDK 衍生而來,功能上與該 SDK 說明文件中的資訊相同。無論何時,如果此相容性定義或相容性測試套件與 SDK 說明文件不一致,SDK 說明文件都會視為權威來源。上述參考資料中提供的任何技術細節,都會視為本相容性定義的一部分。

3. 軟體

Android 平台包含一組受管理的 API、一組原生 API,以及一組所謂的「軟體」API,例如 Intent 系統和網路應用程式 API。本節將詳細說明與相容性密切相關的硬式和軟式 API,以及其他相關技術和使用者介面行為。裝置實作項目必須遵守本節中的所有規定。

3.1. 代管 API 相容性

代管 (以 Dalvik 為基礎) 執行環境是 Android 應用程式的主要載具。Android 應用程式設計介面 (API) 是指向在受管理的 VM 環境中執行的應用程式公開的 Android 平台介面組合。裝置實作項目必須提供完整實作項目,包括所有已記錄的行為,以及 Android 2.1 SDK 公開的任何已記錄 API [Resources, 4]。

裝置實作不得省略任何受管理的 API、變更 API 介面或簽章、偏離已記錄的行為,或包含無操作,除非本相容性定義明確允許。

3.2. 軟性 API 相容性

除了第 3.1 節所述的受管理 API 外,Android 也包含了重要的「軟性」API,也就是在執行階段時的「軟性」API,例如 Intent、權限,以及無法在應用程式編譯期間強制執行的 Android 應用程式類似層面。本節將詳細說明與 Android 2.1 相容所需的「軟性」API 和系統行為。裝置實作項目必須符合本節所述的所有規定。

3.2.1. 權限

裝置實作者必須支援並強制執行所有權限常數,如「權限參考資料」頁面所述 [資源, 5]。請注意,第 10 節列出與 Android 安全性模型相關的其他規定。

3.2.2. 建構參數

Android API 在 android.os.Build 類別 [Resources, 6] 上包含多個常數,用於描述目前的裝置。為在各裝置實作中提供一致且有意義的值,下表針對這些值的格式列出額外限制,裝置實作必須符合這些限制。

參數 備註
android.os.Build.VERSION.RELEASE 目前執行的 Android 系統版本,以人類可讀的格式表示。這個欄位必須包含 [Resources, 7] 中定義的字串值。
android.os.Build.VERSION.SDK 目前執行的 Android 系統版本,格式可供第三方應用程式程式碼存取。如果是 Android 2.1,這個欄位必須設為整數值 7。
android.os.Build.VERSION.INCREMENTAL 裝置實作者選擇的值,用於指定目前執行中 Android 系統的特定版本,並以人類可讀的格式呈現。這個值絕對不得用於向使用者提供的不同版本。這個欄位的常見用途是指出系統用來產生建構項目的建構編號或來源控管變更 ID。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.BOARD 裝置實作者選擇的值,用來識別裝置使用的特定內部硬體,格式為人類可讀。這個欄位的可能用途是指出為裝置供電的板子特定修訂版本。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.BRAND 裝置實作者選擇的值,用於以人類可讀的格式,標示出裝置製造商的公司、機構、個人等名稱。這個欄位的可能用途是指出販售裝置的原始設備製造商和/或電信業者。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.DEVICE 裝置實作者選擇的值,用於識別裝置主體 (有時稱為「工業設計」) 的特定設定或修訂版本。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.FINGERPRINT 用於唯一識別此版本的字串。應以人類可讀的方式呈現。必須遵循以下範本:
$(BRAND)/$(PRODUCT)/$(DEVICE)/$(BOARD):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)
例如:
acme/mydevice/generic/generic:2.1-update1/ERC77/3359:userdebug/test-keys
指紋不得包含空格。如果上方範本中包含其他欄位,且含有空格,則應在指紋中以 ASCII 底線字元 ("_") 取代。
android.os.Build.HOST 以人類可讀格式,提供可明確識別建構所在主機的字串。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.ID 裝置實作者選擇的 ID,用於參照特定版本,並以人類可讀的格式呈現。這個欄位可以與 android.os.Build.VERSION.INCREMENTAL 相同,但應為使用者區分軟體版本時可充分利用的值。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.MODEL 裝置實作者選擇的值,其中包含使用者所知的裝置名稱。這應與向終端使用者行銷和銷售裝置時使用的名稱相同。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.PRODUCT 裝置實作者選擇的值,其中包含裝置的開發名稱或代碼名稱。必須是人類可讀的形式,但不一定是供使用者查看。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。
android.os.Build.TAGS 裝置實作者選擇的標記清單,以半形逗號分隔,可進一步區分版本。例如「unsigned,debug」。這個欄位不得為空值或空字串 (""),但可以是單一標記 (例如「release」)。
android.os.Build.TIME 代表建構作業發生時間的時間戳記值。
android.os.Build.TYPE 裝置實作者選擇的值,可指定建構作業的執行階段設定。這個欄位應包含下列三種常見 Android 執行階段設定的其中一個值:「user」、「userdebug」或「eng」。
android.os.Build.USER 產生版本的使用者 (或自動化使用者) 的名稱或使用者 ID。這個欄位沒有特定格式規定,但不得為空值或空字串 ("")。

3.2.3. 意圖相容性

Android 會使用意圖,在應用程式之間實現鬆散整合。本節說明與意圖模式相關的規定,裝置實作必須遵守這些規定。「遵循」是指裝置實作者必須提供 Android 活動或服務,指定相符的意圖篩選器,並為每個指定的意圖模式繫結及實作正確的行為。

3.2.3.1. 核心應用程式意圖

Android 上游專案定義了許多核心應用程式,例如電話撥號程式、日曆、聯絡簿、音樂播放器等。裝置導入者可以將這些應用程式替換為其他版本。

不過,任何這類替代版本都必須遵循上游專案提供的相同意圖模式。舉例來說,如果裝置含有其他音樂播放器,則仍須遵循第三方應用程式發出的 Intent 模式,才能選取歌曲。

以下應用程式屬於核心 Android 系統應用程式:

  • 桌上時鐘
  • Browser
  • 日曆
  • 計算機
  • 相機
  • 聯絡人
  • 電子郵件
  • 圖庫
  • GlobalSearch
  • 啟動器
  • LivePicker (即動態桌布挑選器應用程式;如果裝置不支援動態桌布,則可省略) (依據第 3.8.5 節)
  • 訊息 (又稱「Mms」)
  • 音樂
  • 電話
  • 設定
  • 錄音機

核心 Android 系統應用程式包含各種活動或服務元件,這些元件被視為「公開」。也就是說,「android:exported」屬性可能不存在,或可能設為「true」。

對於在某個核心 Android 系統應用程式中定義的每個活動或服務,如果該服務未透過 android:exported 屬性標示為非公開 (值為「false」),則裝置實作必須包含與核心 Android 系統應用程式相同的意圖篩選器模式的相同類型元件。

換句話說,裝置實作項目可以取代核心 Android 系統應用程式;不過,如果是這種情況,裝置實作項目就必須支援所有 Intent 模式,也就是每個核心 Android 系統應用程式所定義的 Intent 模式。

3.2.3.2. 意圖覆寫

由於 Android 是可擴充的平台,裝置導入者必須允許第三方應用程式覆寫核心系統應用程式中定義的每個 Intent 模式。上游 Android 開放原始碼專案預設允許這項功能;裝置實作者不得為系統應用程式使用這些意圖模式而附加特殊權限,或禁止第三方應用程式繫結至這些模式並接管控制權。這項禁止行為包括但不限於停用「選擇器」使用者介面,因為這類介面可讓使用者在多個應用程式之間進行選擇,而這些應用程式都會處理相同的意圖模式。

注意:此部分經過 Erratum EX6580 修訂。

3.2.3.3. 意圖命名空間

裝置實作者不得納入任何 Android 元件,因為這些元件會使用 android.* 命名空間中的 ACTION、CATEGORY 或其他關鍵字串,遵循任何新的意圖或廣播意圖模式。裝置實作者不得納入任何 Android 元件,這些元件會在屬於其他機構的套件空間中,使用 ACTION、CATEGORY 或其他關鍵字串來遵循任何新的 Intent 或廣播意圖模式。裝置實作者不得變更或擴充第 3.2.3.1 節所列核心應用程式使用的任何 Intent 模式。

這項禁止規定與第 3.6 節中針對 Java 語言類別所指定的規定類似。

3.2.3.4. 廣播意圖

第三方應用程式會依賴平台發布特定意圖,以便通知硬體或軟體環境的變更。相容的 Android 裝置必須廣播公開廣播意圖,以回應適當的系統事件。如要瞭解廣播意圖,請參閱 SDK 說明文件。

3.3. 原生 API 相容性

在 Dalvik 中執行的受管理程式碼可以呼叫應用程式 .apk 檔案中提供的機器碼,做為為適當裝置硬體架構編譯的 ELF .so 檔案。裝置實作必須支援在受管理環境中執行的程式碼,以便使用標準 Java Native Interface (JNI) 語意呼叫原生程式碼。下列 API 必須可供原生程式碼使用:

  • libc (C 程式庫)
  • libm (數學程式庫)
  • JNI 介面
  • libz (Zlib 壓縮)
  • liblog (Android 記錄)
  • 對 C++ 提供最精簡的支援
  • 支援 OpenGL,如下所述

裝置實作項目必須支援 OpenGL ES 1.0。缺乏硬體加速功能的裝置,必須使用軟體轉譯器實作 OpenGL ES 1.0。裝置實作項目應盡可能實作裝置硬體支援的 OpenGL ES 1.1 功能。如果硬體能夠在這些 API 上提供合理的效能,則裝置實作項目應提供 OpenGL ES 2.0 的實作項目。

這些程式庫必須與 Android 開放原始碼專案在 Bionic 中提供的版本相容,包括原始碼相容性 (即標頭相容性) 和二進位元相容性 (針對特定處理器架構)。由於 Bionic 實作方式與其他實作方式 (例如 GNU C 程式庫) 不完全相容,因此裝置實作者應使用 Android 實作方式。如果裝置導入者使用這些程式庫的不同實作方式,則必須確保標頭、二進位檔和行為相容性。

裝置實作項目必須透過 android.os.Build.CPU_ABI API 準確回報裝置支援的原生應用程式二進位介面 (ABI)。ABI 必須是最新版 Android NDK 中 docs/CPU-ARCH-ABIS.txt 檔案中記錄的項目之一。請注意,Android NDK 的其他版本可能會支援其他 ABI。

原生程式碼的相容性很難處理。因此,我們再次強調,強烈建議裝置實作者使用上述程式庫的上游實作項目,以確保相容性。

3.4. Web API 相容性

許多開發人員和應用程式都會在使用者介面中使用 android.webkit.WebView 類別 [Resources, 8] 的行為,因此 WebView 實作必須與各 Android 實作相容。Android 開放原始碼實作項目會使用 WebKit 算繪引擎來實作 WebView。

由於無法為網路瀏覽器開發完整的測試套件,因此裝置實作者必須在 WebView 實作中使用 WebKit 的特定上游版本。具體違規事項如下:

  • WebView 必須使用 Android 2.1 上游 Android 開放原始碼樹狀結構的 530.17 WebKit 版本。這個版本包含 WebView 的特定功能和安全性修正項目。
  • WebView 回報的使用者代理程式字串必須採用下列格式:
    Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
    • $(VERSION) 字串的值必須與 android.os.Build.VERSION.RELEASE 的值相同
    • $(LOCALE) 字串的值應遵循 ISO 國家/地區代碼和語言代碼慣例,且應參照裝置目前設定的語言代碼
    • $(MODEL) 字串的值必須與 android.os.Build.MODEL 的值相同
    • $(BUILD) 字串的值必須與 android.os.Build.ID 的值相同

實作可能會在獨立的瀏覽器應用程式中提供自訂使用者代理程式字串。此外,獨立瀏覽器可能會以其他瀏覽器技術 (例如 Firefox、Opera 等) 為基礎。不過,即使您提供替代瀏覽器應用程式,提供給第三方應用程式的 WebView 元件仍必須以 WebKit 為基礎,如上所述。

WebView 設定必須支援 HTML5 資料庫、應用程式快取和地理位置 API [Resources, 9]。WebView 必須在某種形式下支援 HTML5 <video> 標記。獨立的瀏覽器應用程式 (無論是基於上游 WebKit 瀏覽器應用程式,還是第三方替換程式) 都必須支援 WebView 所列的 HTML5 功能。

3.5. API 行為相容性

每種 API 類型 (受管理、軟體、原生和網路) 的行為都必須與上游 Android 開放原始碼專案的偏好實作相符 [Resources, 3]。以下是一些特定的相容性問題:

  • 裝置不得變更標準意圖的行為或意義
  • 裝置不得變更特定類型的系統元件 (例如服務、活動、ContentProvider 等) 的生命週期或生命週期語意
  • 裝置不得變更特定權限的語意

上述清單僅列舉部分內容,裝置實作者必須負責確保行為相容性。因此,裝置實作者應盡可能使用 Android 開放原始碼計畫提供的原始碼,而非重新實作系統的重要部分。

Compatibility Test Suite (CTS) 會測試平台的大部分行為相容性,但並非全部。實作者有責任確保與 Android 開放原始碼專案的行為相容性。

3.6. API 命名空間

Android 遵循 Java 程式設計語言定義的套件和類別命名空間慣例。為確保與第三方應用程式相容,裝置導入者不得對下列套件命名空間進行任何禁止的修改 (請見下文):

  • java.*
  • javax.*
  • sun.*
  • android.*
  • com.android.*

禁止的修改包括:

  • 裝置實作項目不得透過變更任何方法或類別簽章,或移除類別或類別欄位,修改 Android 平台上公開公開的 API。
  • 裝置實作者可以修改 API 的基礎實作項目,但此類修改不得影響任何公開 API 的已知行為和 Java 語言簽章。
  • 裝置實作者不得在上述 API 中加入任何公開的元素 (例如類別或介面、欄位或方法)。

「公開暴露元素」是指在上游 Android 原始碼中未加上「@hide」標記的任何結構。換句話說,裝置實作者不得在上述命名空間中公開新的 API,或變更現有的 API。裝置導入者可以進行僅限內部使用的修改,但這些修改不得向開發人員宣傳或以其他方式公開。

裝置實作人員可以新增自訂 API,但任何這類 API 不得位於由其他機構擁有或參照的命名空間。舉例來說,裝置實作人員不得將 API 新增至 com.google.* 或類似的命名空間;只有 Google 可以這麼做。同樣地,Google 不得將 API 新增至其他公司的命名空間。

如果裝置實作人員建議改善上述其中一個套件命名空間 (例如在現有 API 中新增實用的新功能,或新增 API),則應前往 source.android.com,並根據該網站上的資訊,開始提供變更和程式碼的程序。

請注意,上述限制與 Java 程式設計語言中 API 命名的標準慣例相符;本節只是為了強化這些慣例,並透過納入這個相容性定義來使其具約束力。

3.7. 虛擬機器相容性

裝置實作必須支援完整的 Dalvik 執行檔 (DEX) 位元碼規格和 Dalvik 虛擬機器語意 [Resources, 10]。

裝置實作必須設定 Dalvik,讓系統在螢幕密度屬於中等或低密度的裝置上,為每個應用程式分配至少 16 MB 的記憶體。裝置實作必須設定 Dalvik,以便在螢幕畫素密度為高密度的裝置上,為每個應用程式分配至少 24 MB 的記憶體。請注意,裝置實作可能會分配比這些數字更多的記憶體,但並非必要。

3.8. 使用者介面相容性

Android 平台包含一些開發人員 API,可讓開發人員鉤掛至系統使用者介面。裝置實作項目必須將這些標準 UI API 納入開發的自訂使用者介面,如下所述。

3.8.1. 小工具

Android 定義了元件類型和對應的 API 與生命週期,讓應用程式可向使用者公開「AppWidget」[Resources, 11]。Android 開放原始碼參考版本包含啟動器應用程式,其中包含使用者介面元素,可讓使用者在主畫面上新增、查看及移除 AppWidget。

裝置實作者可以替換參考啟動器 (即主畫面) 的替代方案。替代啟動器應內建 AppWidget 支援功能,並提供使用者介面元素,以便直接在啟動器中新增、設定、查看及移除 AppWidget。替代啟動器可省略這些使用者介面元素;不過,如果省略這些元素,裝置實作者必須提供可從啟動器存取的獨立應用程式,讓使用者新增、設定、查看及移除 AppWidget。

3.8.2. 通知

Android 包含 API,可讓開發人員通知使用者重要事件 [Resources, 12]。裝置實作者必須支援每個已定義的通知類別,具體來說就是聲音、震動、燈光和狀態列。

此外,實作方式必須正確轉譯 API [Resources, 13] 或狀態列圖示樣式指南 [Resources, 14] 中提供的所有資源 (圖示、音訊檔案等)。裝置導入者可以提供其他通知使用者體驗,而非參考 Android 開放原始碼導入作業所提供的體驗;不過,這類其他通知系統必須支援現有的通知資源,如上所述。

Android 包含 API [Resources, 15],可讓開發人員將搜尋功能整合至應用程式,並將應用程式資料公開至全球系統搜尋。一般來說,這項功能包含單一系統層級使用者介面,可讓使用者輸入查詢,並在使用者輸入時顯示建議內容和結果。Android API 可讓開發人員重複使用這個介面,在自己的應用程式中提供搜尋功能,並將結果提供給常見的全域搜尋使用者介面。

裝置實作功能必須包含單一共用系統層級搜尋使用者介面,能夠根據使用者輸入內容提供即時建議。裝置實作項目必須實作 API,讓開發人員能夠重複使用這個使用者介面,在自己的應用程式中提供搜尋功能。裝置實作項目必須導入 API,讓第三方應用程式在全球搜尋模式下,將建議內容加入搜尋框。如果沒有安裝可使用這項功能的第三方應用程式,預設行為應是顯示網路搜尋引擎結果和建議。

裝置實作可能會提供其他搜尋使用者介面,但應包含硬式或軟式專用搜尋按鈕,可在任何應用程式中隨時用於叫用搜尋架構,並提供 API 說明文件中提供的行為。

3.8.4. 浮動式訊息

應用程式可以使用「Toast」API (定義於 [Resources, 16]),向使用者顯示短短的非模態字串,該字串會在短時間後消失。裝置實作項目必須以某種高可見度的方式,向使用者顯示應用程式傳送的 Toast。

3.8.5. 動態桌布

Android 定義了元件類型和對應的 API 與生命週期,讓應用程式可向使用者提供一或多個「動態桌布」[Resources, 17]。動態桌布是指動畫、圖案或類似圖片,具有有限的輸入功能,可顯示為桌布,並在其他應用程式後方運作。

如果硬體可以以合理的幀率執行所有動態桌布,且不會對其他應用程式造成不良影響,就表示硬體可穩定執行動態桌布。如果硬體限制導致桌布和/或應用程式發生異常、耗用過多 CPU 或電池電力,或是以不合理的低畫面更新率執行,則系統會判定硬體無法執行動態桌布。舉例來說,某些動態桌布可能會使用 Open GL 1.0 或 2.0 內容顯示內容。在未支援多個 OpenGL 內容的硬體上,即時桌布無法穩定執行,因為即時桌布使用 OpenGL 內容時,可能會與其他同樣使用 OpenGL 內容的應用程式發生衝突。

裝置實作項目應實作動態桌布,以便可如上所述可靠地執行動態桌布。如果裝置實作項目無法如上述所述可靠地執行動態桌布,則絕對不應實作動態桌布。

4. 參考軟體相容性

裝置導入者必須使用下列開放原始碼應用程式,測試導入相容性:

  • 計算機 (已納入 SDK)
  • Lunar Lander (已納入 SDK)
  • 「Apps for Android」應用程式 [Resources, 18]。

上述每個應用程式都必須在實作項目上正確啟動及運作,才能視為相容。

此外,裝置實作必須測試每個模擬測試應用程式的每個選單項目 (包括所有子選單):

  • ApiDemos (已包含在 SDK 中)
  • 手動模擬測試 (包含在 CTS 中)

上述應用程式中的每個測試案例都必須在裝置實作中正確執行。

5. 應用程式封裝相容性

裝置實作項目必須安裝並執行由官方 Android SDK [Resources, 19] 中「aapt」工具產生的 Android「.apk」檔案。

裝置實作不得擴充 .apk [Resources, 20]、Android 資訊清單 [Resources, 21] 或 Dalvik 位元碼 [Resources, 10] 格式,以免這些檔案無法在其他相容的裝置上正確安裝及執行。裝置實作人員應使用 Dalvik 的參考上游實作項目,以及參考實作項目的套件管理系統。

6. 多媒體相容性

裝置實作方式必須支援下列多媒體編解碼器。所有這些編解碼都會以軟體實作方式提供,並在 Android 開放原始碼計畫的偏好 Android 實作方式中實作。

請注意,Google 和開放手持裝置聯盟均未聲明這些編解碼不受第三方專利限制。如要在硬體或軟體產品中使用這個原始碼,請注意,這段程式碼的實作方式 (包括在開放原始碼軟體或共享軟體中) 可能需要相關專利持有人的專利授權。

音訊
名稱 編碼器 解碼器 詳細資料 檔案/容器格式
AAC LC/LTP   X 單聲道/立體聲內容,標準位元率最高 160 kbps,取樣率介於 8 至 48 kHz 之間的任何組合 3GPP (.3gp) 和 MPEG-4 (.mp4、.m4a)。不支援原始 AAC (.aac)
HE-AACv1 (AAC+)   X
HE-AACv2 (增強型 AAC+)   X
AMR-NB X X 4.75 至 12.2 kbps,取樣頻率為 8 kHz 3GPP (.3gp)
AMR-WB   X 9 個速率,從 6.60 kbit/s 到 23.85 kbit/s,取樣率為 16 kHz 3GPP (.3gp)
MP3   X 單聲道/立體聲 8-320 Kbps 固定位元率 (CBR) 或可變位元率 (VBR) MP3 (.mp3)
MIDI   X 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 Vorbis   X   Ogg (.ogg)
PCM   X 8 位元和 16 位元線性 PCM (速率上限為硬體限制) WAVE (.wav)
Image
JPEG X X 基本 + 漸進式  
GIF   X    
PNG X X    
BMP   X    
影片
H.263 X X   3GPP (.3gp) 檔案
H.264   X   3GPP (.3gp) 和 MPEG-4 (.mp4) 檔案
MPEG4 簡易設定檔   X   3GPP (.3gp) 檔案

請注意,上表並未列出大多數影片編碼器的特定位元率需求。原因是,實際上,目前的裝置硬體不一定支援與相關標準指定的必要位元率完全對應的位元率。相反地,裝置實作應支援硬體上可行的最高位元率,上限為規格定義的限制。

7. 開發人員工具相容性

裝置實作項目必須支援 Android SDK 中提供的 Android 開發人員工具。具體來說,Android 相容裝置必須與下列項目相容:

  • Android Debug Bridge (簡稱 ADB) [Resources, 19]
    裝置實作必須支援 Android SDK 中記錄的所有 adb 函式。裝置端 adb 守護程序應預設為停用,但必須提供使用者可存取的機制,才能開啟 Android Debug Bridge。
  • Dalvik 偵錯監視器服務 (稱為 ddms) [Resources, 19]
    裝置實作必須支援 Android SDK 說明中的所有 ddms 功能。由於 ddms 使用 adb,因此預設情況下應不支援 ddms,但在使用者啟用 Android Debug Bridge 時,必須支援 ddms,如上所述。
  • Monkey [Resources, 22]
    裝置實作項目必須包含 Monkey 架構,並讓應用程式可使用該架構。

8. 硬體相容性

Android 旨在協助裝置導入者打造創新的板型規格和設定。同時,Android 開發人員也期望所有 Android 裝置都能提供特定硬體、感應器和 API。本節列出所有 Android 2.1 相容裝置必須支援的硬體功能。

如果裝置包含特定硬體元件,且該元件具有第三方開發人員的對應 API,則裝置實作方式必須按照 Android SDK 說明文件中定義的做法實作該 API。如果 SDK 中的 API 與硬體元件互動,而該硬體元件已明確標示為選用,且裝置實作不含該元件:

  • 元件 API 的類別定義必須存在
  • API 的行為必須以某種合理的方式實作為無操作
  • API 方法必須在 SDK 說明文件允許的情況下傳回空值
  • API 方法必須傳回類別的無操作實作項目,因為 SDK 說明文件不允許空值

適用這些規定的典型情境範例是 telephony API:即使是在非手機裝置上,這些 API 也必須以合理的無操作方式實作。

裝置實作項目必須透過 android.content.pm.PackageManager 類別的 getSystemAvailableFeatures()hasSystemFeature(String) 方法,準確回報硬體設定資訊。

8.1. 螢幕

Android 2.1 包含在某些情況下執行特定自動縮放和轉換作業的設施,以確保第三方應用程式可在各種硬體設定下順利運作 [Resources, 23]。裝置必須正確實作這些行為,詳情請參閱本節。

以下是 Android 2.1 最常見的顯示設定:

螢幕類型 寬度 (像素) 高度 (像素) 對角長度範圍 (英寸) 螢幕大小群組 螢幕密度群組
QVGA 240 320 2.6 - 3.0
WQVGA 240 400 3.2 - 3.5 一般
FWQVGA 240 432 3.5 - 3.8 一般
HVGA 320 480 3.0 - 3.5 一般
WVGA 480 800 3.3 - 4.0 一般
FWVGA 480 854 3.5 - 4.0 一般
WVGA 480 800 4.8 - 5.5
FWVGA 480 854 5.0 - 5.8

與上述任一標準設定相對應的裝置實作,必須設為透過 android.content.res.Configuration [Resources, 24] 類別,向應用程式回報指定的螢幕大小。

部分 .apk 套件資訊清單並未指出支援特定密度範圍。執行這類應用程式時,適用下列限制:

  • 裝置實作項目必須將缺少密度限定詞的 .apk 中的資源,解讀為預設為「medium」(在 SDK 說明文件中稱為「mdpi」)。
  • 在「低」密度螢幕上運作時,裝置實作項目必須將中等/mdpi 素材資源縮小 0.75 倍。
  • 在「高」密度螢幕上運作時,裝置實作項目必須將中等/mdpi 素材資源縮放 1.5 倍。
  • 裝置實作項目不得在像素密度範圍內縮放資產,且必須在像素密度範圍之間,以這些因素精確縮放資產。

8.1.2. 非標準顯示設定

如果顯示設定不符合第 8.1.1 節所列的標準設定,就需要額外考量和調整,才能確保相容性。裝置實作者必須按照第 12 節的規定,與 Android 相容性團隊聯絡,取得螢幕大小分類、密度和縮放比例係數。提供這項資訊時,裝置實作項目必須依照指定方式實作。

請注意,某些顯示設定 (例如超大或超小螢幕,以及某些顯示比例) 與 Android 2.1 基本上不相容;因此,建議裝置實作人員在開發過程中盡早與 Android 相容性團隊聯絡。

8.1.3. 顯示指標

裝置實作項目必須針對 android.util.DisplayMetrics [Resources, 25] 中定義的所有顯示指標回報正確值。

8.2. 鍵盤

裝置實作方式:

  • 必須支援輸入管理架構 (可讓第三方開發人員建立輸入管理引擎,例如軟體鍵盤),詳情請參閱 developer.android.com
  • 必須提供至少一個軟體鍵盤 (無論是否有實體鍵盤)
  • 可納入其他螢幕鍵盤實作
  • 可包含硬體鍵盤
  • 請勿加入不符合 android.content.res.Configuration.keyboard [Resources, 24] 中所述格式 (即 QWERTY 或 12 鍵) 的實體鍵盤

8.3.非觸控導覽

裝置實作方式:

  • 可省略非觸控導覽選項 (也就是可省略軌跡球、D-Pad 或滾輪)
  • 必須回報 android.content.res.Configuration.navigation 的正確值 [Resources, 24]

8.4. 螢幕方向

相容的裝置必須支援應用程式以直向或橫向螢幕方向變更動態方向。也就是說,裝置必須遵循應用程式要求的特定螢幕方向。裝置實作項目可能會將直向或橫向方向設為預設值。

無論是透過 android.content.res.Configuration.orientation、android.view.Display.getOrientation() 或其他 API 查詢,裝置都必須回報裝置目前的正確值。

8.5. 觸控螢幕輸入

裝置實作方式:

  • 必須具備觸控螢幕
  • 可能具備電容式或電阻式觸控螢幕
  • 必須回報 android.content.res.Configuration [Resources, 24] 的值,反映裝置上特定觸控螢幕的類型

8.6. USB

裝置實作方式:

  • 必須實作 USB 用戶端,可透過標準 USB-A 連接埠連線至 USB 主機
  • 必須透過 USB 實作 Android Debug Bridge (如第 7 節所述)
  • 必須實作 USB 大量儲存裝置規格,允許連線至裝置的主機存取 /sdcard 音量中的內容
  • 應在裝置端使用 micro USB 板型規格
  • 裝置端可納入非標準連接埠,但如果納入,則必須隨附可將自訂針腳連接至標準 USB-A 連接埠的傳輸線

8.7. 瀏覽鍵

主畫面、選單和返回功能對於 Android 導覽模式至關重要。無論應用程式狀態為何,裝置實作項目都必須隨時向使用者提供這些功能。這些功能應透過專用按鈕實作。您可以使用軟體、手勢、觸控面板等方式實作,但必須確保使用者一律可存取,且不會遮蔽或干擾可用的應用程式顯示區域。

裝置實作者也應提供專屬搜尋鍵。裝置實作者也可能提供電話的傳送和結束鍵。

8.8. 無線資料網路

裝置實作方式必須支援無線高速資料網路。具體來說,裝置實作必須支援至少一種無線資料標準,且該標準的傳輸速度必須達到 200Kbit/sec 以上。符合這項規定的技術包括 EDGE、HSPA、EV-DO、802.11g 等。

如果裝置實作包含 Android SDK 的 API 所支援的特定模式 (例如 WiFi、GSM 或 CDMA),則實作方式必須支援該 API。

裝置可能會實作多種無線資料連線。裝置可以實作有線資料連線 (例如乙太網路),但仍須包含至少一種無線連線,如上所述。

8.9. 相機

裝置實作項目必須包含相機。隨附的相機:

  • 解析度必須至少為 2000 萬像素
  • 應在相機驅動程式中實作硬體自動對焦或軟體自動對焦功能 (對應用程式軟體而言是透明的)
  • 可能有固定焦或 EDOF (擴大景深) 硬體
  • 可包含閃光效果。如果相機包含閃光燈,在相機預覽途徑註冊 android.hardware.Camera.PreviewCallback 例項時,閃光燈必須處於關閉狀態,除非應用程式已透過啟用 Camera.Parameters 物件的 FLASH_MODE_AUTOFLASH_MODE_ON 屬性,明確啟用閃光燈。請注意,這項限制不適用於裝置內建的系統相機應用程式,只適用於使用 Camera.PreviewCallback 的第三方應用程式。

裝置實作項目必須針對相機相關 API 實作下列行為:

  1. 如果應用程式從未呼叫 android.hardware.Camera.Parameters.setPreviewFormat(int),則裝置必須使用 android.hardware.PixelFormat.YCbCr_420_SP 提供給應用程式回呼的預覽資料。
  2. 如果應用程式註冊 android.hardware.Camera.PreviewCallback 例項,且系統在預覽格式為 YCbCr_420_SP 時呼叫 onPreviewFrame() 方法,則傳遞至 onPreviewFrame() 的 byte[] 中的資料必須採用 NV21 編碼格式。(這是 7k 硬體系列原生使用的格式)。也就是說,預設值必須是 NV21。

無論裝置是否包含硬體自動對焦或其他功能,裝置實作項目都必須實作 Android 2.1 SDK 文件 [Resources, 26] 中包含的完整 Camera API。舉例來說,缺少自動對焦功能的相機仍必須呼叫任何已註冊的 android.hardware.Camera.AutoFocusCallback 例項 (即使這與非自動對焦相機無關)。

如果底層硬體支援這項功能,裝置實作項目就必須辨識並遵循 android.hardware.Camera.Parameters 類別中定義為常數的每個參數名稱。如果裝置硬體不支援某項功能,API 必須依照說明運作。相反地,除了 android.hardware.Camera.Parameters 中記錄為常數的常數以外,裝置實作不得承認或辨識傳遞至 android.hardware.Camera.setParameters() 方法的字串常數,除非常數前面有字串,表示裝置實作端的名稱。也就是說,如果硬體允許,裝置實作必須支援所有標準相機參數,且不得支援自訂相機參數類型,除非參數名稱透過字串前置字元明確標示為非標準。

8.10. 加速計

裝置實作必須包含 3 軸加速計,且必須能夠以 50 Hz 以上的頻率傳送事件。加速計使用的座標系統必須符合 Android 感應器座標系統,詳情請參閱 Android API (請參閱 [Resources, 27])。

8.11. 指南針

裝置實作必須包含 3 軸指南針,且必須能夠以 10 Hz 以上的頻率傳送事件。指南針使用的座標系統必須符合 Android API 中定義的 Android 感應器座標系統 (請參閱 [Resources, 27])。

8.12. GPS

裝置實作方式必須包含 GPS,且應納入某種形式的「輔助 GPS」技術,以盡可能縮短 GPS 鎖定時間。

8.13. 電話通訊系統

您可以在不含電話硬體的裝置上使用 Android 2.1。也就是說,Android 2.1 與非手機裝置相容。不過,如果裝置實作包含 GSM 或 CDMA 電話服務,則必須實作該技術的 API 完整支援功能。不含電話服務硬體的裝置實作項目,必須將完整的 API 實作為無操作。

另請參閱第 8.8 節「無線資料網路」。

8.14. 記憶體與儲存空間

裝置實作項目必須至少提供 92 MB 的記憶體給核心和使用者空間使用。除了用於硬體元件 (例如無線電、記憶體等) 的記憶體 (不受核心控制),92 MB 記憶體必須是額外的記憶體。

裝置實作項目必須提供至少 150 MB 的非揮發性儲存空間,供使用者資料使用。也就是說,/data 分區必須至少有 150 MB。

注意:此部分經過 Erratum EX6580 修訂。

8.15. 應用程式共用儲存空間

裝置實作方式必須為應用程式提供共用儲存空間。提供的共用儲存空間大小必須至少為 2 GB。

裝置實作項目必須使用預設的共用儲存空間掛載方式進行設定,也就是「開箱即用」。如果共用儲存空間未掛載至 Linux 路徑 /sdcard,則裝置必須包含從 /sdcard 到實際掛載點的 Linux 符號連結。

裝置實作項目必須依照文件規定,對這項共用儲存空間強制執行 android.permission.WRITE_EXTERNAL_STORAGE 權限。否則,任何取得該權限的應用程式都必須能寫入共用儲存空間。

裝置實作可能會提供可讓使用者存取的可移除儲存空間硬體,例如 Secure Digital 卡。或者,裝置實作項目可以將內部 (不可移除) 儲存空間分配給應用程式共用儲存空間。

無論使用的共用儲存空間形式為何,共用儲存空間都必須實作 USB 大量儲存空間,如第 8.6 節所述。在出貨時,共用儲存空間必須使用 FAT 檔案系統掛接。

以下列舉兩個常見的例子說明。如果裝置實作內容包含 SD 卡插槽,以符合共用儲存空間的規定,則必須在向使用者販售的裝置中,附上大小為 2 GB 或更大的 FAT 格式 SD 卡,並且預設為已掛載。或者,如果裝置實作使用內部固定儲存空間來滿足這項要求,則該儲存空間的大小必須為 2GB 以上,且必須掛載至 /sdcard (如果掛載至其他位置,/sdcard 必須是指向實體位置的符號連結)。

注意:這個部分是由 Erratum EX6580 新增。

8.16. 藍牙

裝置實作項目必須包含藍牙收發器。裝置實作項目必須啟用以 RFCOMM 為基礎的 Bluetooth API,如 SDK 說明文件所述 [Resources, 29]。裝置實作項目應導入相關的藍牙設定檔,例如 A2DP、AVRCP、OBEX 等,以便根據裝置需求進行調整。

注意:這個部分是由 Erratum EX6580 新增。

9. 成效相容性

Android 相容性計畫的目標之一,就是為消費者提供一致的應用程式體驗。相容的實作項目必須確保應用程式不僅能正確執行,還能提供合理的效能和整體良好的使用者體驗。裝置實作項目必須符合下表中定義的 Android 2.1 相容裝置關鍵效能指標:

指標 效能門檻 備註
應用程式啟動時間 以下應用程式應在指定時間內啟動。
  • 瀏覽器:少於 1300 毫秒
  • 多媒體訊息/簡訊:小於 700 毫秒
  • AlarmClock:小於 650 毫秒
啟動時間是指完成應用程式預設活動載入作業的總時間,包括啟動 Linux 程序、將 Android 套件載入至 Dalvik VM,以及呼叫 onCreate 所需的時間。
同時申請 啟動多個應用程式後,重新啟動已啟動且正在執行的應用程式,所需時間必須少於原始啟動時間。  

10. 安全性模型相容性

裝置實作項目必須實作與 Android 平台安全性模型一致的安全性模型,如 Android 開發人員說明文件中「API 中的安全性和權限」參考文件 [Resources, 28] 所定義。裝置實作方式必須支援自行簽署應用程式的安裝作業,且不必向任何第三方/主管機關索取額外的權限/憑證。具體來說,相容裝置必須支援下列子節點所述的安全機制。

10.1. 權限

裝置實作項目必須支援 Android 權限模型,如 Android 開發人員說明文件中所定義 [Resources, 28]。具體來說,導入方式必須強制執行 SDK 說明文件中定義的每項權限;不得省略、變更或忽略任何權限。如果新權限 ID 字串不在 android.* 命名空間中,實作可能會新增額外權限。

10.2. UID 和程序隔離

裝置實作項目必須支援 Android 應用程式沙箱模型,其中每個應用程式都會以獨特的 Unix 風格 UID 執行,並在個別程序中執行。裝置實作必須支援以相同的 Linux 使用者 ID 執行多個應用程式,前提是應用程式已正確簽署及建構,如「安全性和權限」參考資料所定義 [Resources, 28]。

10.3. 檔案系統權限

裝置實作項目必須支援 Android 檔案存取權限模式,如「安全性和權限」參考資料 [Resources, 28] 所定義。

11. 相容性測試套件

裝置實作項目必須使用裝置上的最終發布軟體,通過 Android 相容性測試套件 (CTS) [Resources, 2] [Resources, 2] Resources, 2]。此外,裝置實作人員應盡可能使用 Android 開放原始碼樹狀結構中的參考實作項目,並務必在 CTS 中出現模糊情況,以及參考原始碼的任何部分重新實作時,確保相容性。

CTS 設計用於在實際裝置上執行。就像任何軟體一樣,CTS 本身可能含有錯誤。CTS 的版本會與此相容性定義無關,且 Android 2.1 可能會發布多個 CTS 修訂版本。裝置實作項目必須在裝置軟體完成時,通過最新的 CTS 版本。

12. 可更新軟體

裝置實作項目必須包含替換整個系統軟體的機制。這項機制不必執行「即時」升級,也就是說,可能需要重新啟動裝置。

只要可以取代裝置上預先安裝的軟體,您可以使用任何方法。舉例來說,下列任何一種方法都能滿足這項要求:

  • 透過重新啟動進行離線更新的無線更新 (OTA) 下載
  • 透過主機電腦的 USB 連線進行「連線」更新
  • 透過重新啟動和從可移除儲存空間的檔案更新「離線」更新

使用的更新機制必須支援不清除使用者資料的更新作業。請注意,上游 Android 軟體包含符合此要求的更新機制。

如果在裝置推出後,但在與 Android 相容性團隊協商後判斷的合理產品壽命期間內,發現裝置導入作業出現錯誤,導致影響第三方應用程式的相容性,則裝置導入者必須透過可依照上述機制套用的軟體更新,修正該錯誤。

13. 與我們聯絡

如有任何問題,請透過 compatibility@android.com 與文件作者聯絡,以便釐清問題,並提出您認為文件未涵蓋的任何問題。