Stay organized with collections Save and categorize content based on your preferences.

Google Play 會使用應用程式資訊清單中宣告的 <uses-feature> 元素,篩選不符合應用程式硬體和軟體功能要求的裝置。

您可以透過指定應用程式所需的功能,讓 Google Play 僅對裝置符合應用程式功能需求的使用者顯示應用程式,而不要向所有使用者顯示。

如要瞭解 Google Play 如何運用功能做為篩選依據的重要資訊,請參閱「Google Play 與依據功能篩選」一節的內容。

語法:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
包含於:
<manifest>
說明:
宣告應用程式使用的一項硬體或軟體功能。

<uses-feature> 宣告的目的是告知任何外部實體,應用程式需要的硬體和軟體功能集。該元素提供 required 屬性,可讓您指定應用程式是否需要宣告的功能,沒有該功能便無法正常運作;或者只是偏好的功能,沒有該功能仍然可以正常運作。由於功能支援可能因 Android 裝置而異,<uses-feature> 元素在描述隨裝置而異的應用程式使用功能上扮演相當重要的角色。

應用程式宣告的一組可用功能會對應到 Android PackageManager 所提供的一組功能常數。功能常數會列在本文件底部的「功能參考資料」一節中。

每項功能都必須在獨立的 <uses-feature> 元素中指定,因此,如果應用程式需要多項功能,就會宣告多個 <uses-feature> 元素。舉例來說,如果應用程式需要裝置同時具有藍牙和相機功能,會宣告這兩個元素:

<uses-feature android:name="android.hardware.bluetooth" android:required="true" />
<uses-feature android:name="android.hardware.camera.any" android:required="true" />

一般來說,請務必針對應用程式所需的所有功能宣告 <uses-feature> 元素。

宣告的 <uses-feature> 元素僅供參考,這意味著 Android 系統在安裝應用程式前,不會檢查裝置是否提供相應的功能支援。不過,其他服務 (例如 Google Play) 或應用程式可能會在處理您的應用程式或與其互動的過程中檢查應用程式的 <uses-feature> 宣告。因此,請務必宣告應用程式使用的所有功能 (透過下方清單)。

您可以透過特定屬性來定義部分功能的版本,例如所用的 Open GL 版本 (使用 glEsVersion 進行宣告)。裝置具備或不具備的其他功能 (例如相機) 均透過 name 屬性進行宣告。

雖然只有執行 API 級別 4 以上的裝置才能啟用 <uses-feature> 元素,但即使 minSdkVersion 為「3」以下,仍建議您為所有應用程式加入這些元素。搭載舊版平台的裝置會直接忽略該元素。

注意:宣告功能時,也請務必視需要要求權限。舉例來說,您仍然必須先要求 CAMERA 權限,應用程式才能存取相機 API。透過要求權限,應用程式才能獲得授權存取適當的硬體和軟體。宣告應用程式使用的功能,即可確保正確的裝置相容性。

屬性:
android:name
以描述元字串的形式,為應用程式指定一項硬體或軟體功能。如需有效的屬性值清單,請參閱硬體功能軟體功能章節。這些屬性值有大小寫之分。
android:required
布林值,指出應用程式是否需要 android:name 中指定的功能。
  • 當您為某項功能宣告 android:required="true" 時,即是指定應用程式在不具備指定功能的裝置上將「無法正常運作,或未設計為可正常運作」
  • 當您為某項功能宣告 android:required="false" 時,則表示應用程式在具備該功能的裝置上會「優先使用這項功能」,但應用程式「設計為可視需要在不使用該指定功能的情況下正常運作」

如未宣告,則 android:required 的預設值為 "true"

android:glEsVersion
應用程式所需的 OpenGL ES 版本。較高的 16 位元代表主要編號,較低的 16 位元代表次要編號。舉例來說,如要指定 OpenGL ES 2.0 版本,您必須將這個值設為「0x00020000」;如要指定 OpenGL ES 3.2,則應將這個值設為「0x00030002」。

應用程式應該在其資訊清單中最多指定一個 android:glEsVersion 屬性。如果指定多個屬性,系統會使用數值最大的 android:glEsVersion,並忽略所有其他值。

如果應用程式未指定 android:glEsVersion 屬性,系統會假設應用程式只需要 OpenGL ES 1.0,這是所有 Android 裝置都支援的版本。

應用程式會認為,如果平台支援給定的 OpenGL ES 版本,也應該支援所有更低的 OpenGL ES 版本。因此,如果應用程式同時需要 OpenGL ES 1.0 和 OpenGL ES 2.0 兩個版本,則必須指定其需要 OpenGL ES 2.0。

能夠使用任一種 OpenGL ES 版本的應用程式,只需指定 OpenGL ES 的最低版本即可 (會在執行過程中檢查是否有更高版本的 OpenGL ES 可用)。

如要進一步瞭解如何使用 OpenGL ES,包括如何在執行過程中檢查支援的 OpenGL ES 版本,請參閱 OpenGL ES API 指南

導入版本:
API 級別 4
另請參閱:

Google Play 與依據功能篩選

Google Play 會篩選向使用者顯示的應用程式,讓使用者只能查看及下載與其個人裝置相容的應用程式。應用程式篩選的方法之一是按功能相容性進行篩選。

為判定應用程式的功能與給定使用者裝置的相容性,Google Play 會進行如下比對:

  • 應用程式所需的功能:應用程式會在其資訊清單
    內的 <uses-feature> 元素中宣告這些功能...
  • 裝置上提供的硬體或軟體功能:裝置會以唯讀系統屬性的形式報告其支援的功能。

為了確保功能比對的準確性,Android 套件管理員會提供一組共用的功能常數,應用程式和裝置均可使用這組常數來宣告功能需求和支援。可用的功能常數列於本文件底部的「功能參考資料」一節及 PackageManager 的類別文件中。

當使用者啟動 Google Play 時,應用程式會透過呼叫 getSystemAvailableFeatures(),向套件管理員查詢裝置的可用功能清單。然後,在為使用者建立工作階段時,Google 商店應用程式會將功能清單向上傳遞給 Google Play。

每次您將應用程式上傳到 Google Play 管理中心時,Google Play 都會掃描應用程式的資訊清單檔案。Google Play 會尋找 <uses-feature> 元素,並在某些情況下結合 <uses-sdk><uses-permission> 等其他元素進行評估。建立好應用程式的必要功能集後,Google Play 會在內部將該清單儲存為與應用程式 .apk 及其版本相關聯的中繼資料。

當使用者使用 Google Play 應用程式搜尋或瀏覽應用程式時,該服務會將每個應用程式所需的功能與使用者裝置上提供的功能進行比較。如果裝置上能夠提供應用程式的所有必要功能,Google Play 會允許使用者查看該應用程式,並可能允許下載。如果裝置不支援任何的必要功能,Google Play 則會篩選該應用程式,讓使用者無法看到和下載。

由於您在 <uses-feature> 元素中宣告的功能會直接影響 Google Play 篩選應用程式的方式,因此請務必瞭解 Google Play 如何評估應用程式的資訊清單以及如何建立必要功能集。下列各節提供更多資訊。

根據明確宣告的功能篩選

應用程式明確宣告的功能意即在 <uses-feature> 元素中宣告的功能。功能宣告可以包含 android:required=["true" | "false"] 屬性 (如果您要針對 API 級別 5 以上的版本編譯),您可以透過此屬性指定應用程式是絕對需要此功能,否則便無法正常運作 ("true"),還是會在有此功能時優先使用此功能,但應用程式本身設計為不使用此功能也能正常運作 ("false")。

Google Play 以下列方式處理明確宣告的功能:

  • 如果某個功能已明確宣告為必要,Google Play 會將該功能新增至應用程式的必要功能清單中。之後,Google Play 會從未提供該功能的裝置上篩選該應用程式,不向使用者顯示。例如:
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • 如果某個功能被明確宣告為「非」必要,Google Play 就「不會」將該功能新增至必要功能清單中。因此,在篩選應用程式時,Google Play 絕對不會考慮明確宣告為非必要的功能。即使裝置未提供宣告的功能,Google Play 仍會將該應用程式視為與裝置相容,並向使用者顯示該應用程式,除非有其他適用的篩選規則。例如:
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    
  • 如果功能已明確宣告,但沒有 android:required 屬性,Google Play 會認為該功能為必要功能,並對其設定篩選條件。

一般來說,如果您的應用程式設計為在 Android 1.6 以下版本上執行,那麼 API 中就不會提供 android:required 屬性,Google Play 會認為所有宣告的 <uses-feature> 均為必要功能。

注意:只要明確宣告功能並加入 android:required="false" 屬性,即可有效防止 Google Play 篩選特定功能。

根據隱含功能篩選

「隱含」功能是指應用程式正常運作所需,但「並未」在資訊清單檔案 <uses-feature> 元素中宣告的功能。嚴格來說,所有應用程式「一律」需要宣告所有使用或必要的功能,因此,如果沒有宣告應用程式所用的某項功能,就應視為錯誤。不過,為了保護使用者和開發人員,Google Play 會尋找每個應用程式中的隱含功能,並為這些功能設定篩選條件,方法與明確宣告的功能相同。

應用程式需要某功能但不予以宣告的原因是:

  • 此應用程式針對舊版 Android 程式庫 (Android 1.5 以下版本) 編譯而成,無法使用 <uses-feature> 元素。
  • 開發人員誤認為這項功能會在所有裝置上提供,不需要宣告。
  • 開發人員不慎遺漏該功能的宣告。
  • 開發人員已明確宣告這項功能,但宣告無效。舉例來說,<uses-feature> 元素名稱中的拼字錯誤或 android:name 屬性中無法辨識的字串值都會使功能宣告失效。

為因應上述情況,Google Play 會透過檢查資訊清單檔案中宣告的「其他元素」(特別是 <uses-permission> 元素),嘗試找出應用程式的隱含功能需求。

如果應用程式要求硬體相關權限,即使沒有對應的 <uses-feature> 宣告,Google Play 也會「假設應用程式使用基礎硬體功能,因此需要使用這些功能」。對於這類權限,Google Play 會將基礎硬體功能加入為應用程式儲存的中繼資料中,並為這些功能設定篩選條件。

舉例來說,如果應用程式要求 CAMERA 權限,則即使應用程式並未為 android.hardware.camera 宣告 <uses-feature> 元素,Google Play 也會假定應用程式需要使用後置 (面向世界) 鏡頭。因此,Google Play 會篩除沒有後置鏡頭的裝置。

如果不希望 Google Play 依據特定隱含功能篩選,請透過 <uses-feature> 元素明確宣告該項功能,並加入 android:required="false" 屬性。例如,如要停用 CAMERA 權限隱含的篩選功能,請宣告下列功能:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

注意:透過 <uses-permission> 元素要求的權限可能會直接影響 Google Play 篩選應用程式的方式。隱含功能需求的權限參考章節完整列出了隱含功能需求且因而觸發篩選的權限。

藍牙功能的特殊處理方式

Google Play 在判斷藍牙的篩選時,會採用與上述稍微不同的規則。

如果應用程式在 <uses-permission> 元素中宣告了藍牙權限,但未在 <uses-feature> 元素中明確宣告藍牙功能,Google Play 會依據 <uses-sdk> 元素中指定的內容,檢查設計用於執行應用程式的 Android 平台版本。

如下表所示,只有當應用程式將最低或目標平台宣告為 Android 2.0 (API 級別 5) 以上版本時,Google Play 才會啟用藍牙功能篩選。不過,請注意,如果應用程式在 <uses-feature> 元素中明確宣告藍牙功能,Google Play 會套用一般篩選規則。

表 1. Google Play 如何為要求藍牙權限但未在 <uses-feature> 元素中宣告藍牙功能的應用程式判斷藍牙功能需求。

如果 minSdkVersion 為 ... 或者 targetSdkVersion 結果
<=4 (或未宣告 uses-sdk) <=4 Google Play「不會」根據裝置回報對 android.hardware.bluetooth 功能的支援情況,在任何裝置中篩選該應用程式。
<=4 >=5 Google Play 會在所有不支援 android.hardware.bluetooth 功能的裝置 (包括較舊的版本) 篩選該應用程式。
>=5 >=5

下列範例根據 Google Play 處理藍牙功能的方式,說明了不同的篩選效果。

在第一個例子中,設計在舊版 API 級別執行的應用程式宣告了藍牙權限,但未在 <uses-feature> 元素中宣告藍牙功能。
結果:Google Play 不會任何裝置篩選該應用程式。
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
在第二個例子中,同一應用程式還宣告了目標 API 級別「5」。
結果:Google Play 現在假設這是必要功能,並會在未回報支援藍牙的所有裝置 (包括搭載舊版平台的裝置) 上篩選該應用程式。
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
如下所示,同一個應用程式現已明確宣告藍牙功能。
結果:與先前範例相同 (已套用篩選)。
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
最後,在下列情況中,同一個應用程式新增了 android:required="false" 屬性。
結果:Google Play 對所有裝置停用了根據藍牙功能支援的篩選。
<manifest ...>
    <uses-feature android:name="android.hardware.bluetooth" android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>

測試應用程式所需的功能

您可以使用 Android SDK 中的 aapt 工具,決定 Google Play 如何根據應用程式宣告的功能和權限進行篩選。方法是使用 dump badging 指令執行 aapt。這個指令可以讓 aapt 剖析您應用程式的資訊清單,並套用 Google Play 所採用的相同規則來判斷應用程式所需的功能。

如要使用這個工具,請按照下列步驟操作:

  1. 首先,建構您的應用程式並將其以未簽署的 .apk 匯出。如果您使用 Android Studio 進行開發,請使用 Gradle 建構應用程式:
    1. 開啟專案,然後依序選取「Run」(執行) >「Edit Configurations」(編輯設定)
    2. 選取「Run/Debug Configurations」視窗左上角附近的加號。
    3. 選取「Gradle」
    4. 在「Name」(名稱) 中輸入 Unsigned APK
    5. 從 「Gradle project」(Gradle 專案) 部分選擇您的模組。
    6. 在「Tasks」(工作) 中輸入 assemble
    7. 選取「OK」(確定) 以完成新的設定。
    8. 確認已在工具列中選取「Unsigned APK」(未簽署的 APK) 執行設定,然後依序選取「Run」(執行) >「Run 'Unsigned APK'」(執行「未簽署的 APK」)
    您可以在 <ProjectName>/app/build/outputs/apk/ 目錄中找到未簽署的 .apk
  2. 接著,如果 aapt 工具未出現在您的路徑中,請找到該工具。如果您使用的是 SDK Tools r8 以上版本,可以在 <SDK>/build-tools/<tools version number> 目錄中找到 aapt

    注意:您必須使用為最新可用的 Build-Tools 元件提供的 aapt 版本。如果您沒有最新的 Build-Tools 元件,請使用 Android SDK Manager 下載。

  3. 使用下列語法執行 aapt
$ aapt dump badging <path_to_exported_.apk>

以下是上述第二個藍牙範例的指令輸出範例:

$ ./aapt dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''
uses-permission:'android.permission.BLUETOOTH_ADMIN'
uses-feature:'android.hardware.bluetooth'
sdkVersion:'3'
targetSdkVersion:'5'
application: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name='com.example.android.btexample.MyActivity'label='' icon=''
uses-feature:'android.hardware.touchscreen'
main
supports-screens: 'small' 'normal' 'large'
locales: '--_--'
densities: '160'

功能參考資料

下列各節針對硬體功能、軟體功能以及隱含特定功能需求的權限組合提供參考資訊。

硬體功能

本節介紹最新平台版本支援的硬體功能。如要指明應用程式使用或需要特定硬體功能,請在 android:name 屬性中宣告相應的值 (以 "android.hardware" 開頭)。每次宣告一個硬體功能時,都請使用一個單獨的 <uses-feature> 元素。

音訊硬體功能

android.hardware.audio.low_latency
應用程式使用裝置的低延遲音訊管道,從而縮短處理音訊輸入或輸出時的延隔和延遲時間。
android.hardware.audio.output
應用程式使用裝置的喇叭、耳機插孔、藍牙串流功能或其他類似的機制來傳輸音訊。
android.hardware.audio.pro
應用程式使用裝置的高階音訊功能與效能功能。
android.hardware.microphone
應用程式使用裝置的麥克風來錄音。

藍牙硬體功能

android.hardware.bluetooth
應用程式使用裝置的藍牙功能,通常用於與其他支援藍牙的裝置通訊。
android.hardware.bluetooth_le
應用程式使用裝置的藍牙低功耗無線電功能。

相機硬體功能

注意:為了防止 Google Play 對應用程式進行不必要的篩選,如果應用程式可在沒有某項相機功能的情況下正常運作,請在該項相機功能中加入 android:required="false"。否則,Google Play 會假定這是必要功能,因而禁止不支援該項功能的裝置存取應用程式。

支援大螢幕

部分大螢幕裝置不支援所有相機功能。Chromebook 通常沒有提供後置 (面向世界) 鏡頭、自動對焦或閃光燈。不過,Chromebook 具有前置 (面向使用者) 鏡頭,且經常連接外接式相機。

如要提供基本相機支援功能,並盡可能讓更多裝置使用您的應用程式,請在應用程式資訊清單中新增下列相機功能設定:

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />

您可以調整功能設定來支援應用程式的用途。不過,為了讓最多數的裝置使用您的應用程式,請一律加入 required 屬性,明確指定是否為必要功能。

功能清單
android.hardware.camera.any

應用程式使用裝置的其中一個鏡頭或與裝置連接的外接式相機。如果應用程式不「需要」面向後方 (世界) 或前方 (使用者) 的鏡頭,請使用這項功能分別取代 android.hardware.cameraandroid.hardware.camera.front

使用 CAMERA 權限意味著應用程式也會使用 android.hardware.camera。除非您使用 android:required="false" 宣告 android.hardware.camera,否則系統會將後置鏡頭視為必要功能。

android.hardware.camera

應用程式使用裝置的後置 (面向世界) 鏡頭。

注意:Chromebook 等只有前置 (面向使用者) 鏡頭的裝置不支援這項功能。如果應用程式可以使用任何鏡頭,則無論鏡頭面向為何都一律使用 android.hardware.camera.any

注意:使用 CAMERA 權限意味著後置鏡頭是必要功能。為確保 Google Play 能在應用程式資訊清單包含 CAMERA 權限時正確進行篩選,請明確指定應用程式使用 camera 功能並指明是否為必要功能,例如:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

應用程式使用裝置的前置 (面向使用者) 鏡頭。

使用 CAMERA 權限意味著應用程式也會使用 android.hardware.camera。除非您使用 android:required="false" 宣告 android.hardware.camera,否則系統會將後置鏡頭視為必要功能。

注意:如果應用程式使用 android.hardware.camera.front 但未使用 android.required="false" 明確宣告 android.hardware.camera,Google Play 會篩除 Chromebook 等沒有後置鏡頭的裝置。如果應用程式僅支援前置鏡頭,請使用 android.required="false" 宣告 android.hardware.camera,以防止不必要的篩選。

android.hardware.camera.external

應用程式與使用者為裝置連接的外接式相機進行通訊。這項功能並不保證您的應用程式可以使用外接式相機。

使用 CAMERA 權限意味著應用程式也會使用 android.hardware.camera。除非您使用 android:required="false" 宣告 android.hardware.camera,否則系統會將後置鏡頭視為必要功能。

android.hardware.camera.autofocus

應用程式使用裝置相機支援的自動對焦功能。

注意:使用 CAMERA 權限意味者自動對焦是必要功能。為確保 Google Play 能在應用程式資訊清單包含 CAMERA 權限時正確進行篩選,請明確指定應用程式使用自動對焦功能並指明是否為必要功能,例如:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

android.hardware.camera.flash

應用程式使用裝置相機支援的閃光燈功能。

android.hardware.camera.capability.manual_post_processing

應用程式使用裝置相機支援的 MANUAL_POST_PROCESSING 功能。

這項功能可讓應用程式覆寫相機的自動白平衡功能。請使用 android.colorCorrection.transformandroid.colorCorrection.gainsTRANSFORM_MATRIXandroid.colorCorrection.mode

android.hardware.camera.capability.manual_sensor

應用程式使用裝置相機支援的 MANUAL_SENSOR 功能。

這項功能意味著支援自動曝光鎖定 (android.control.aeLock),這可讓相機的曝光時間和感光度維持在特定值。

android.hardware.camera.capability.raw

應用程式使用裝置相機支援的 RAW 功能。

這項功能意味著裝置可儲存 DNG (原始) 檔案,且裝置的相機會提供應用程式直接處理這些原始圖片所需的 DNG 相關中繼資料。

android.hardware.camera.level.full
應用程式使用裝置至少一個鏡頭所提供的 FULL 等級的圖像拍攝支援。FULL 支援包括連拍功能、影格控制項,以及手動後置處理控制項。詳情請參閱 INFO_SUPPORTED_HARDWARE_LEVEL_FULL

裝置 UI 硬體功能

android.hardware.type.automotive

應用程式設計為在車輛內的一組螢幕上顯示 UI。使用者透過實體按鈕、觸控、旋轉控制器和類似滑鼠的介面與應用程式互動。車輛的螢幕通常會顯示在中央主控台或車輛的儀表板上。這類螢幕的尺寸和解析度通常有限。

注意:請務必留意,因為使用者是在駕車時使用這類應用程式 UI,因此應用程式必須盡量避免讓駕駛人分心。

android.hardware.type.television

(已淘汰;請改用 android.software.leanback)。

應用程式設計為在電視上顯示 UI。這項功能將「電視」定義為一般客廳電視體驗:顯示在大螢幕上,使用者坐在遠處,主要輸入形式是類似於 D-pad 的裝置,通常不使用滑鼠、指示器或觸控裝置。

android.hardware.type.watch
應用程式設計為在智慧手錶上顯示其 UI。使用者會將手錶戴在身上 (例如手腕處)。使用者非常近距離地與裝置互動。

指紋辨識硬體功能

android.hardware.fingerprint
應用程式使用裝置的生物特徵辨識硬體讀取指紋。

遊戲手把硬體功能

android.hardware.gamepad
應用程式會從裝置本身或已連結的遊戲手把擷取遊戲控制器的輸入內容。

紅外線硬體功能

android.hardware.consumerir
應用程式使用裝置的紅外線 (IR) 功能,通常用於與其他消費性 IR 裝置進行通訊。

定位硬體功能

android.hardware.location
應用程式使用裝置的一或多項功能來確定位置,例如 GPS 定位、網路訂位或行動數據定位。
android.hardware.location.gps

應用程式使用透過裝置的全球定位系統 (GPS) 接收器取得的精確位置座標。

使用此功能,即表示應用程式會使用 android.hardware.location 功能,除非使用屬性 android:required="false" 宣告這項父功能。

android.hardware.location.network

應用程式使用裝置支援的網路型地理位置系統取得粗略的位置座標。

使用此功能,即表示應用程式會使用 android.hardware.location 功能,除非使用屬性 android:required="false" 宣告這項父功能。

NFC 硬體功能

android.hardware.nfc
應用程式使用裝置的近距離無線通訊 (NFC) 無線電功能。
android.hardware.nfc.hce

應用程式使用裝置上代管的 NFC 卡模擬功能。

OpenGL ES 硬體功能

android.hardware.opengles.aep
應用程式使用裝置上安裝的 OpenGL ES Android 擴充套件

感應器硬體功能

android.hardware.sensor.accelerometer
應用程式使用裝置加速計的動作讀數來偵測裝置目前的螢幕方向。舉例來說,應用程式可利用加速計讀數,來判斷在直向和橫向螢幕方向之間切換的時間。
android.hardware.sensor.ambient_temperature
應用程式使用裝置的周邊 (環境) 溫度感應器。舉例來說,天氣應用程式可以報告室內或室外溫度。
android.hardware.sensor.barometer
應用程式使用裝置的氣壓計。舉例來說,天氣應用程式可以報告氣壓。
android.hardware.sensor.compass
應用程式使用裝置的磁力儀 (指南針)。舉例來說,導航應用程式可以顯示使用者目前面朝的方向。
android.hardware.sensor.gyroscope
應用程式使用裝置的陀螺儀偵測旋轉和扭轉,建立一個六軸定向系統。透過使用這個感應器,應用程式可以更加流暢地偵測出是否需要在直向和橫向螢幕方向之間切換。
android.hardware.sensor.hifi_sensors
應用程式使用裝置的高傳真 (Hi-Fi) 感應器。舉例來說,遊戲應用程式可以偵測使用者的高精確度動作。
android.hardware.sensor.heartrate
應用程式使用裝置的心率監測器。舉例來說,健身應用程式可以報告使用者心率隨時間的變化趨勢。
android.hardware.sensor.heartrate.ecg
應用程式使用裝置的心電圖 (ECG) 心率感應器。舉例來說,健身應用程式可以報告更詳細的使用者心率資訊。
android.hardware.sensor.light
應用程式使用裝置的光度感應器。舉例來說,應用程式可根據環境亮度條件,顯示兩種不同色彩配置中的一種。
android.hardware.sensor.proximity
應用程式使用裝置的鄰近感應器。舉例來說,當應用程式偵測到使用者將裝置貼近身體時,電話應用程式可以關閉裝置的螢幕。
android.hardware.sensor.relative_humidity
應用程式使用裝置的相對濕度感應器。舉例來說,天氣應用程式可利用濕度計算並報告目前的露點。
android.hardware.sensor.stepcounter
應用程式使用裝置的計步器。舉例來說,健身應用程式可以報告使用者需要走多少步,才能達成每日步數目標。
android.hardware.sensor.stepdetector
應用程式使用裝置的步測器。舉例來說,健身應用程式可以利用每步的時間間隔來推算使用者正在進行的運動類型。

螢幕硬體功能

android.hardware.screen.landscape
android.hardware.screen.portrait

應用程式要求裝置使用直向或橫向螢幕方向。如果您的應用程式同時支援這兩種螢幕方向,則不必宣告這兩項功能。

舉例來說,如果應用程式需要直向螢幕方向,您應宣告以下功能,只讓支援直向螢幕方向 (固定或依使用者選擇) 的裝置執行應用程式:

<uses-feature android:name="android.hardware.screen.portrait" />

根據預設,系統不會將這兩個螢幕方向視為必要,因此應用程式可以安裝在支援一種或兩種螢幕方向的裝置上。但是,如果應用程式的任何活動要求使用 android:screenOrientation 屬性在特定方向上執行,則這項宣告表示您的應用程式需要該螢幕方向。舉例來說,如果您使用 "landscape""reverseLandscape""sensorLandscape" 宣告 android:screenOrientation,您的應用將只能安裝在支援橫向螢幕方向的裝置上。

最佳做法是,仍然使用 <uses-feature> 元素來宣告對此螢幕方向的需求。如果您使用 android:screenOrientation 宣告活動的螢幕方向,但實際上並不需要,您可以使用 <uses-feature> 元素並加入 android:required="false" 來宣告該方向,從而停用該需求。

為了兼顧回溯相容性,所有搭載 Android 3.1 (API 級別 12) 以下的裝置皆同時支援橫向和直向兩種螢幕方向。

電話硬體功能

android.hardware.telephony
應用程式使用裝置的電話功能,例如提供資料通訊服務的無線電話。
android.hardware.telephony.cdma

應用程式使用分碼多重進接 (CDMA) 無線電話系統。

使用此功能,即表示應用程式會使用 android.hardware.telephony 功能,除非使用 android:required="false" 宣告這項父功能。

android.hardware.telephony.gsm

應用程式使用全球行動通訊系統 (GSM) 無線電話系統。

使用此功能,即表示應用程式會使用 android.hardware.telephony 功能,除非使用 android:required="false" 宣告這項父功能。

觸控螢幕硬體功能

android.hardware.faketouch

應用程式使用基本的輕觸互動事件,例如輕觸和拖曳。

如此功能宣告為必要,表示只有當裝置模擬觸控螢幕 (「觸控模擬」介面) 或設有實際觸控螢幕時,應用程式才能與裝置相容。

如果裝置帶有觸控模擬介面,會為使用者提供模擬部分觸控螢幕功能的使用者輸入系統。舉例來說,滑鼠或遙控器可以觸發螢幕遊標。如果您的應用程式需要基本的點擊式互動 (也就是說,應用程式無法僅與 D-Pad 控制器搭配運作),那麼您必須宣告這項功能。由於這是最低程度的觸控互動,因此您也可以在提供較複雜觸控介面的裝置上使用宣告此功能的應用程式。

注意:根據預設,應用程式需要 android.hardware.faketouch 功能。如果想將應用程式限定為僅供配備觸控螢幕的裝置使用,您必須明確宣告需要使用觸控螢幕,如下所示:

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

所有未明確要求 android.hardware.touchscreen 的應用程式也可以在帶有 android.hardware.faketouch 的裝置上執行。

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

應用程式在觸控模擬介面上區分兩根或更多「手指」的觸控軌跡。這是 android.hardware.faketouch 功能的超集。宣告為必要功能時,表示只有當裝置能模擬兩根以上手指的不同觸控軌跡或配備實際觸控螢幕時,應用程式才能視為與裝置相容。

android.hardware.touchscreen.multitouch.distinct 所定義的區分式多點觸控不同,透過觸控模擬介面支援區分式多點觸控的輸入裝置不支援所有的雙指手勢,因為輸入內容會轉換成螢幕上的滑鼠遊標移動。換句話說,在這類裝置上,單指手勢會移動遊標,雙指滑動會觸發單指觸控事件,而其他雙指手勢則會觸發相應的雙指觸控事件。

如果裝置提供雙指觸控板來進行游標移動,則可支援這項功能。

android.hardware.faketouch.multitouch.jazzhand

應用程式在觸控模擬介面上追蹤五根以上「手指」的觸控軌跡。這是 android.hardware.faketouch 功能的超集。宣告為必要功能時,表示只有當裝置能模擬五根以上手指的不同觸控軌跡或配備實際觸控螢幕時,應用程式才能視為與裝置相容。

android.hardware.touchscreen.multitouch.jazzhand 所定義的區分式多點觸控不同,透過觸控模擬介面支援五指式多點觸控的輸入裝置並不支援部分五指手勢,因為輸入內容會轉換成螢幕上的滑鼠遊標動作。換句話說,在這類裝置上,單指手勢會移動遊標,多指手勢會觸發單指觸控事件,而其他多指手勢則會觸發相應的多指觸控事件。

如果裝置提供五指觸控板來進行游標移動,則其可支援這項功能。

android.hardware.touchscreen

應用程式利用裝置的觸控螢幕功能,支援比基本觸控事件更具互動性的手勢,例如快速滑過。這是 android.hardware.faketouch 功能的超集。

根據預設,您的應用程式需要這項功能。因此,如果裝置預設只提供模擬觸控介面 (「觸控模擬」),則該裝置無法使用您的應用程式。如果想要在提供觸控模擬介面的裝置 (甚至是僅提供 D-pad 控制器的裝置上) 上使用您的應用程式,您必須透過用 android:required="false" 宣告 android.hardware.touchscreen 來明確宣告應用程式不需要觸控螢幕。如果您的應用程式使用真實的觸控螢幕介面 (但並非必要),您應該新增這個宣告。所有未明確要求 android.hardware.touchscreen 的應用程式也都能在帶有 android.hardware.faketouch 的裝置上使用。

如果應用程式確實需要使用觸控介面 (例如執行快速滑過等進階觸控手勢),則您不必宣告任何觸控介面功能,因為系統預設會使用這類功能。不過,建議您還是明確宣告應用程式使用的所有功能。

如果需要使用更複雜的觸控互動功能 (例如多指手勢),則應宣告您的應用程式要使用進階觸控螢幕功能。

android.hardware.touchscreen.multitouch

應用程式使用裝置的基本雙點式多點觸控功能 (例如雙指撥動手勢),但不需要獨立追蹤觸控軌跡。這是 android.hardware.touchscreen 功能的超集。

使用此功能,即表示應用程式會使用 android.hardware.touchscreen 功能,除非使用 android:required="false" 宣告這項父功能。

android.hardware.touchscreen.multitouch.distinct

應用程式使用裝置的進階多點觸控功能,獨立追蹤兩個或多個點的軌跡。這項功能是 android.hardware.touchscreen.multitouch 功能的超集。

使用此功能,即表示應用程式會使用 android.hardware.touchscreen.multitouch 功能,除非使用 android:required="false" 宣告這項父功能。

android.hardware.touchscreen.multitouch.jazzhand

應用程式使用裝置的進階多點觸控功能,獨立追蹤五個或更多點的軌跡。這項功能是 android.hardware.touchscreen.multitouch 功能的超集。

使用此功能,即表示應用程式會使用 android.hardware.touchscreen.multitouch 功能,除非使用 android:required="false" 宣告這項父功能。

USB 硬體功能

android.hardware.usb.accessory
應用程式的行為會像是 USB 裝置,並連線至 USB 主機。
android.hardware.usb.host
應用程式使用連接到裝置的 USB 配件。裝置的功能是 USB 主機。

Vulkan 硬體功能

android.hardware.vulkan.compute
應用程式使用 Vulkan 運算功能。這項功能表示應用程式需要硬體加速的 Vulkan 實作。功能版本指明應用程式在 Vulkan 1.0 之外所需的選用運算功能層級。舉例來說,如果應用程式需要 Vulkan 運算層級 0 的支援,您應宣告下列功能:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
如要進一步瞭解功能版本,請參閱 FEATURE_VULKAN_HARDWARE_COMPUTE
android.hardware.vulkan.level
應用程式使用 Vulkan 層級的功能。這項功能表示應用程式需要硬體加速的 Vulkan 實作。功能版本指明應用程式需要的選用硬體功能層級。舉例來說,如果應用程式需要 Vulkan 硬體層級 0 的支援,您應宣告下列功能:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
如要進一步瞭解功能版本,請參閱 FEATURE_VULKAN_HARDWARE_LEVEL
android.hardware.vulkan.version
應用程式使用 Vulkan。這項功能表示應用程式需要硬體加速的 Vulkan 實作。功能版本指出應用程式所需的最低版本的 Vulkan API 支援。舉例來說,如果應用程式需要 Vulkan 1.0 的支援,您應宣告下列功能:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
如要進一步瞭解功能版本,請參閱 FEATURE_VULKAN_HARDWARE_VERSION

Wi-Fi 硬體功能

android.hardware.wifi
應用程式使用裝置上的 802.11 網路 (Wi-Fi) 功能。
android.hardware.wifi.direct
應用程式使用裝置上的 Wi-Fi Direct 網路功能。

軟體功能

本節介紹最新平台版本支援的軟體功能。如要指出您的應用程式使用或需要一種軟體功能,請在 android:name 屬性中宣告相應的值 (以 "android.software" 開頭)。每次宣告一個軟體功能時,都請使用一個單獨的 <uses-feature> 元素。

通訊軟體功能

android.software.sip
應用程式使用工作階段啟動協定 (SIP) 服務。透過使用 SIP,應用程式可支援網際網路電話作業,如視訊會議和即時通訊。
android.software.sip.voip

應用程式使用以 SIP 為基礎的 IP 網路語音傳遞技術 (VoIP) 服務。透過使用 VoIP,應用程式可支援即時網際網路電話作業,如雙向視訊會議。

使用此功能,即表示應用程式會使用 android.software.sip 功能,除非使用 android:required="false" 宣告這項父功能。

android.software.webview
應用程式顯示來自網際網路的內容。

自訂輸入軟體功能

android.software.input_methods
應用程式使用新的輸入法,該輸入法由開發人員在 InputMethodService 中定義。

裝置管理軟體功能

android.software.backup
應用程式提供處理備份和還原作業的邏輯。
android.software.device_admin
應用程式透過裝置管理員強制執行裝置政策。
android.software.managed_users
應用程式支援次要使用者和受管理的設定檔。
android.software.securely_removes_users
應用程式可以永久移除使用者及相關聯的資料。
android.software.verified_boot
應用程式包含可處理裝置驗證開機程序功能結果的邏輯,該邏輯可偵測裝置的設定在重新啟動作業期間是否有所變更。

媒體軟體功能

android.software.midi
應用程式使用樂器數位介面 (MIDI) 通訊協定連線至樂器或輸出聲音。
android.software.print
應用程式提供列印裝置上所顯示文件的指令。
android.software.leanback
應用程式設計為在 Android TV 裝置上運作。
android.software.live_tv
應用程式串流播放電視直播節目。

螢幕介面軟體功能

android.software.app_widgets
應用程式使用或提供應用程式小工具,且只能安裝在設有主畫面或類似位置,允許使用者嵌入應用程式小工具的裝置上。
android.software.home_screen
應用程式可以取代裝置的主畫面。
android.software.live_wallpaper
應用程式使用或提供包含動畫的桌布。

隱含功能需求的權限

部分硬體和軟體功能常數會在對應的 API 發布之後才提供給應用程式使用;舉例來說,Android 2.2 (API 級別 8) 新增了 android.hardware.bluetooth 功能,但 Android 2.0 (API 級別 5) 已經加入這項功能所參照的藍牙 API。因此,一些應用程式在能夠利用 <uses-feature> 系統來宣告需要某個 API 之前,便已具備使用該 API 的能力。

為了避免在無意間提供這些應用程式,Google Play 會假設某些硬體相關權限規定,預設需要使用基礎硬體功能。舉例來說,使用藍牙的應用程式必須透過 <uses-permission> 元素要求 BLUETOOTH 權限;如果是舊版應用程式,Google Play 會假設權限宣告意味著應用程式需要使用基礎的 android.hardware.bluetooth 功能,並會根據該功能設定篩選條件。表 2 列出權限隱含的功能需求等同於 <uses-feature> 元素中宣告的功能。

請注意,<uses-feature> 宣告 (包括任何宣告的 android:required 屬性) 一律優先於表 2 所列權限隱含的功能。針對這些權限,您可以透過 <uses-feature> 元素將 required 屬性設為 false,明確宣告隱含的功能,藉此根據該項功能停用篩選功能。舉例來說,如要根據 CAMERA 權限停用篩選功能,請在資訊清單檔案中加入下列 <uses-feature> 宣告:

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

注意:如果應用程式指定的是 Android 5.0 (API 級別 21) 以上版本,並使用 ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION 權限分別接收來自網路或 GPS 的位置更新,您也必須明確宣告應用程式使用 android.hardware.location.networkandroid.hardware.location.gps 硬體功能。

表 2. 隱含裝置硬體使用行為的裝置權限。

類別 權限 隱含功能需求
藍牙 BLUETOOTH android.hardware.bluetooth

(詳情請參閱藍牙功能的特殊處理方式。)

BLUETOOTH_ADMIN android.hardware.bluetooth
相機 CAMERA android.hardware.camera
android.hardware.camera.autofocus
位置 ACCESS_MOCK_LOCATION android.hardware.location
ACCESS_LOCATION_EXTRA_COMMANDS android.hardware.location
INSTALL_LOCATION_PROVIDER android.hardware.location
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network(目標 API 級別為 20 以下時。)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps(目標 API 級別為 20 以下時。)

麥克風 RECORD_AUDIO android.hardware.microphone
電話通訊系統 CALL_PHONE android.hardware.telephony
CALL_PRIVILEGED android.hardware.telephony
MODIFY_PHONE_STATE android.hardware.telephony
PROCESS_OUTGOING_CALLS android.hardware.telephony
READ_SMS android.hardware.telephony
RECEIVE_SMS android.hardware.telephony
RECEIVE_MMS android.hardware.telephony
RECEIVE_WAP_PUSH android.hardware.telephony
SEND_SMS android.hardware.telephony
WRITE_APN_SETTINGS android.hardware.telephony
WRITE_SMS android.hardware.telephony
Wi-Fi ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi