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>
元素中宣告的功能。如果您要針對 API 級別 5 以上進行編譯,可以在功能宣告中加入 android:required=["true" | "false"]
屬性。
這可讓您指定應用程式必須使用該功能,否則無法正常運作 ("true"
),還是會在可用的情況下使用該功能,但沒有該功能也能正常運作 ("false"
)。
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>
元素),嘗試找出應用程式的隱含功能需求。
如果應用程式要求硬體相關權限,Google Play 會假設應用程式使用基礎硬體功能,因此即使沒有對應的 <uses-feature>
宣告,也會需要這些功能。對於這類權限,Google Play 會將基礎硬體功能加入為應用程式儲存的中繼資料內,並替這些功能設定篩選條件。
舉例來說,如果應用程式要求 CAMERA
權限,Google Play 會假設應用程式需要使用後置鏡頭 (朝向外面),即使應用程式未針對 android.hardware.camera
宣告 <uses-feature>
元素也一樣。因此,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. 對於要求藍牙權限但未在 <uses-feature>
元素中宣告藍牙功能的應用程式,Google Play 判斷藍牙功能需求的方式。
minSdkVersion 為 ... |
targetSdkVersion 為 |
結果 |
---|---|---|
<uses-sdk> |
<=4 | Google Play「不會」根據裝置回報對 android.hardware.bluetooth 功能的支援情況,在任何裝置上篩除該應用程式。 |
<=4 | >=5 | Google Play 會在所有不支援 android.hardware.bluetooth 功能的裝置 (包括較舊的版本) 上,篩除該應用程式。 |
>=5 | >=5 |
下列範例根據 Google Play 處理藍牙功能的方式,說明不同的篩選效果。
-
在第一個範例中,設計為在舊版 API 級別執行的應用程式宣告了藍牙權限,但未在
- 結果:Google Play 不會在任何裝置上篩除該應用程式。 ,瞭解如何調查及移除這項存取權。
<uses-feature>
元素中宣告藍牙功能。
<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>
-
最後,在下例中,同一個應用程式會新增一個
- 結果:Google Play 停用根據藍牙篩選功能 功能支援所有裝置
android:required="false"
屬性。
<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 提供的 aapt2
工具,決定 Google Play 要如何根據應用程式宣告的功能和權限,來篩選應用程式。方法是搭配 dump
badging
指令執行 aapt2
。這樣可以讓 aapt2
剖析應用程式的資訊清單,並套用 Google Play 所用的相同規則,判斷應用程式需要哪些功能。
如要使用這個工具,請按照下列步驟操作:
- 建構應用程式,並匯出為未簽署的 APK。如果您使用 Android Studio 進行開發,請使用 Gradle 建構應用程式,如下所示:
- 開啟專案,依序選取「Run」>「Edit Configurations」。
- 選取「Run/Debug Configurations」視窗左上角附近的加號。
- 選取「Gradle」。
- 在「Name」中輸入「Unsigned APK」。
- 從 「Gradle project」部分選擇您的模組。
- 在「Tasks」中輸入「assemble」。
- 選取「OK」即可完成新設定。
- 確認工具列中的「Unsigned APK」執行設定處於選取狀態,然後依序選取「Run」>「Run 'Unsigned APK'」。
<ProjectName>/app/build/outputs/apk/
目錄中找到未簽署的 APK。 - 如果
aapt2
工具未出現在 PATH 中,請找出這項工具。如果您使用的是 SDK 工具 r8 以上版本,可以在<SDK>/build-tools/<tools version number>
目錄中找到aapt2
。注意:您必須使用為最新可用的 Build-Tools 元件所提供的
aapt2
版本。如果您沒有最新的 Build-Tools 元件,請透過 Android SDK Manager 下載。 - 使用下列語法執行
aapt2
:
$ aapt2 dump badging <path_to_exported_.apk>
以下是前述第二個藍牙範例的指令輸出範例:
$ ./aapt2 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 通常沒有提供後置 (朝向外面) 鏡頭、自動對焦功能或閃光燈,但備有前置 (面向使用者) 鏡頭,且經常會連接外部相機。
如要提供基本相機支援功能,讓應用程式盡可能適用於最多裝置,請將下列相機功能設定加入應用程式資訊清單:
<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.camera
或android.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.transform
、android.colorCorrection.gains
和TRANSFORM_MATRIX
的android.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.type.pc
-
應用程式設計為在 Chromebook 上顯示 UI。這項功能會停用 模擬滑鼠和觸控板的輸入模式,因為 Chromebook 會使用滑鼠和 觸控板硬體。詳情請見 滑鼠 輸入內容
注意:請為此設定
required="false"
element;如果沒有,Google Play 商店就會讓裝置無法取得您的應用程式 。
指紋辨識硬體功能
-
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.hardware.touchscreen
及android:required="false"
,明確宣告應用程式不需要使用觸控螢幕。如果您的應用程式需使用實際的觸控螢幕介面 (但並非必要),請新增這項宣告。所有未明確要求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 發布後,應用程式就能夠使用一些硬體和軟體功能常數。因此,部分應用程式在能夠使用 <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_LOCATION
或 ACCESS_FINE_LOCATION
權限接收來自網路或 GPS 的位置更新通知,您也必須分別明確宣告應用程式使用 android.hardware.location.network
或 android.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 |
|
|
ACCESS_FINE_LOCATION |
|
|
麥克風 | 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 |