Android官方文件—APP清單(uses-feature)
<uses-feature>
語法:
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" />
包含於:
說明:
宣告應用程式使用的單個硬體或軟體功能。
<uses-feature>宣告的目的是通知任何外部實體您的應用程式所依賴的硬體和軟體功能集。該元素提供了一個必需屬性,允許您指定應用程式是否需要,並且在沒有宣告的功能的情況下無法執行,或者它是否更喜歡具有該功能但可以在沒有它的情況下執行。由於功能支援可能因Android裝置而異,因此<uses-feature>元素在讓應用程式描述其使用的裝置變數功能方面發揮著重要作用。
應用程式宣告的可用功能集對應於Android PackageManager提供的功能常量集,這些功能常量列在本文件底部的“功能參考”部分中。
您必須在單獨的<uses-feature>元素中指定每個要素,因此,如果您的應用程式需要多個要素,則會宣告多個<uses-feature>元素。例如,需要裝置中的藍芽和相機功能的應用程式將宣告這兩個元素:
<uses-feature android:name="android.hardware.bluetooth" /> <uses-feature android:name="android.hardware.camera" />
Google Play過濾
Google Play使用應用清單中宣告的<uses-feature>元素,從不符合其硬體和軟體功能要求的裝置中過濾您的應用。
通過指定應用程式所需的功能,您可以啟用Google Play,僅將應用程式呈現給裝置符合應用程式功能要求的使用者,而不是將其呈現給所有使用者。
有關Google Play如何使用功能作為過濾基礎的重要資訊,請參閱下面的Google Play和基於功能的過濾。
通常,您應始終確保為應用程式所需的所有功能宣告<uses-feature>元素。
宣告的<uses-feature>元素僅供參考,這意味著Android系統本身在安裝應用程式之前不會檢查裝置上的匹配功能支援。但是,其他服務(例如Google Play)或應用程式可能會檢查您的應用程式的<uses-feature>宣告,作為處理或與您的應用程式互動的一部分。因此,宣告應用程式使用的所有功能(從下面的列表中)非常重要。
對於某些功能,可能存在一個特定屬性,允許您定義功能的版本,例如使用的Open GL版本(使用glEsVersion宣告)。使用name屬性宣告裝置(例如攝像機)存在或不存在的其他功能。
雖然<uses-feature>元素僅對執行API級別4或更高級別的裝置啟用,但建議將所有應用程式包含這些元素,即使minSdkVersion為“3”或更低。執行舊版本平臺的裝置將忽略該元素。
注意:宣告功能時,請記住您還必須根據需要請求許可權。例如,在應用程式可以訪問攝像頭API之前,您仍必須請求CAMERA許可權。請求許可權授予您的應用程式訪問相應硬體和軟體的許可權,同時宣告應用程式使用的功能可確保正確的裝置相容性。
屬性:
android:name
指定應用程式使用的單個硬體或軟體功能,作為描述符字串。 “硬體功能和軟體功能”部分中列出了有效的屬性值。這些屬性值區分大小寫。
android:required
布林值,指示應用程式是否需要android:name中指定的功能。
- 當您為某個功能宣告android:required =“true”時,您指定當裝置上沒有指定的功能時,該應用程式無法執行或無法執行。
- 當您為某個功能宣告android:required =“false”時,表示該應用程式更喜歡使用該功能(如果存在於裝置上),但如果需要,它可以在沒有指定功能的情況下執行。
android:預設值如果未宣告則為“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 Level 4
參閱:
Google Play和基於功能的過濾
Google Play會過濾使用者可見的應用程式,以便使用者只能檢視和下載與其裝置相容的應用程式。過濾應用程式的方法之一是功能相容性。
要確定應用程式與給定使用者裝置的功能相容性,Google Play會比較:
- 應用程式所需的功能 - 應用程式在其清單中的<uses-feature>元素中宣告功能與...
- 裝置上可用的功能,硬體或軟體 - 裝置將其支援的功能報告為只讀系統屬性。
為確保準確比較功能,Android Package Manager提供了一組共享的功能常量,應用程式和裝置都使用這些功能常量來宣告功能要求和支援。可用的功能常量列在本文件底部的“功能參考”部分以及PackageManager的類文件中。
當用戶啟動Google Play時,應用程式會通過呼叫getSystemAvailableFeatures()向程式包管理器查詢裝置上可用功能的列表。然後,Store應用程式在為使用者建立會話時將功能列表傳遞到Google Play。
每次將應用程式上傳到Google Play開發者控制檯時,Google Play都會掃描應用程式的清單檔案。它查詢<uses-feature>元素並在某些情況下與其他元素一起評估它們,例如<uses-sdk>和<uses-permission>元素。在建立應用程式的所需功能集之後,它將該列表內部儲存為與應用程式.apk和應用程式版本關聯的元資料。
當用戶使用Google Play應用程式搜尋或瀏覽應用程式時,該服務會將每個應用程式所需的功能與使用者裝置上可用的功能進行比較。如果裝置上存在所有應用程式所需的功能,Google Play允許使用者檢視該應用程式並可能下載該應用程式。如果裝置不支援任何所需功能,Google Play會過濾應用程式,以使使用者看不到該應用程式且無法下載。
由於您在<uses-feature>元素中宣告的功能直接影響Google Play過濾應用的方式,因此瞭解Google Play如何評估應用的清單並建立所需功能集非常重要。以下部分提供了更多資訊。
基於顯式宣告的功能進行過濾
顯式宣告的功能是應用程式在<uses-feature>元素中宣告的功能。功能宣告可以包含android:required = [“true”| “false”]屬性(如果您正在針對API級別5或更高級別進行編譯),它允許您指定應用程式是否絕對需要該功能,並且在沒有它的情況下無法正常執行(“true”),或者應用程式是否更喜歡使用該功能如果可用,但設計為在沒有它的情況下執行(“假”)。
Google Play以這種方式處理顯式宣告的功能:
- 如果明確宣告某項功能是必需的,Google Play會將該功能新增到該應用程式所需功能列表中。然後,它會在不提供該功能的裝置上過濾使用者的應用程式。例如:
<uses-feature android:name="android.hardware.camera" android:required="true" />
- 如果明確宣告某項功能不是必需的,則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許可權但未為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-permission>元素中請求的許可權可以直接影響Google Play過濾您的應用程式的方式。參考部分許可權暗示要素要求列出了暗示要素要求並因此觸發過濾的完整許可權集。
藍芽功能的特殊處理
在確定藍芽過濾時,Google Play應用的規則與上述規則略有不同。
如果應用程式在<uses-permission>元素中聲明瞭藍芽許可權,但未在<uses-feature>元素中明確宣告藍芽功能,則Google Play會檢查應用程式所在的Android平臺的版本。旨在執行,如<uses-sdk>元素中指定的那樣。
如下表所示,僅當應用程式將其最低或目標平臺宣告為Android 2.0(API級別5)或更高版本時,Google Play才會啟用對藍芽功能的過濾。但請注意,當應用程式在<uses-feature>元素中明確宣告藍芽功能時,Google Play會應用常規規則進行過濾。
表1. Google Play如何確定請求藍芽許可權但未在<uses-feature>元素中宣告藍芽功能的應用程式的藍芽功能要求。
如果minSdkVersion是... | 或者targetSdkVersion是 | Result |
<= 4(或未使用-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構建應用程式:
a.開啟專案,然後選擇“執行”>“編輯配置”。
b.選擇“執行/除錯配置”視窗左上角附近的加號。
c.選擇Gradle。
d.在名稱中輸入未簽名的APK。
e.從Gradle專案部分選擇您的模組。
f.在任務中輸入彙編。
g.選擇“確定”以完成新配置。
h.確保在工具欄中選擇了未簽名的APK執行配置,然後選擇執行>執行'未簽名的APK'。
2.接下來,找到aapt工具(如果它尚未在您的PATH中)。如果您使用的是SDK Tools r8或更高版本,則可以在<SDK> / platform-tools /目錄中找到aapt。
注意:您必須使用為最新的Platform-Tools元件提供的aapt版本。如果您沒有最新的Platform-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
該應用程式使用該裝置的藍芽低功耗無線電功能。
相機硬體功能
android.hardware.camera
該應用程式使用該裝置的後置攝像頭。只有前置攝像頭的裝置不會列出此功能,因此如果您的應用可以與任何攝像頭通訊,請使用android.hardware.camera.any功能,無論攝像頭朝哪個方向。
android.hardware.camera.any
該應用程式使用裝置的一個攝像頭,或使用者連線到裝置的外部攝像頭。如果您的應用不需要相機作為背面相機,請使用此值而不是android.hardware.camera。
android.hardware.camera.autofocus
該應用程式使用裝置相機支援的自動對焦功能。
通過使用此功能,應用程式暗示它還使用android.hardware.camera功能,除非使用android:required =“false”宣告此父功能。
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.external
該應用程式與使用者連線到裝置的外部攝像頭通訊。但是,此功能不保證外部相機可供您的應用使用。
android.hardware.camera.flash
該應用程式使用裝置相機支援的閃光燈功能。
通過使用此功能,應用程式暗示它還使用android.hardware.camera功能,除非使用android:required =“false”宣告此父功能。
android.hardware.camera.front
該應用程式使用該裝置的前置攝像頭。
通過使用此功能,應用程式暗示它還使用android.hardware.camera功能,除非使用android:required =“false”宣告此父功能。
android.hardware.camera.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
該應用程式使用該裝置的光感測器。例如,app可以基於環境照明條件顯示兩種不同顏色方案中的一種。
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.touchscreen功能。如果您希望應用程式可用於提供虛假觸控介面的裝置,則還必須明確宣告不需要觸控式螢幕,如下所示:
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明確宣告不需要觸控式螢幕:需要= “假”。如果您的應用使用 - 但不需要 - 真正的觸控式螢幕介面,您應該新增此宣告。
如果您的應用程式實際上需要觸控介面(以執行更高階的觸控手勢,例如fling),那麼您不需要宣告任何觸控介面功能,因為預設情況下它們是必需的。但是,如果您明確宣告應用使用的所有功能,則最好。
如果您需要更復雜的觸控互動,例如多指手勢,則應宣告您的應用使用高階觸控式螢幕功能。
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主機。
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的網際網路語音協議(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
該應用程式提供了一個用於在大螢幕(如電視)上觀看的UI。
android.software.live_tv
該應用程式流式傳輸電視節目。
螢幕介面軟體功能
android.software.app_widgets
該應用程式使用或提供App Widgets,並且只應安裝在包含主螢幕或使用者可以嵌入App Widgets的類似位置的裝置上。
android.software.home_screen
該應用程式可以替代裝置的主螢幕。
android.software.live_wallpaper
該應用程式使用或提供包含動畫的桌布。
隱含功能要求的許可權
在相應的API之後,一些硬體和軟體特徵常量可供應用程式使用;例如,android.hardware.bluetooth功能是在Android 2.2(API級別8)中新增的,但它引用的藍芽API是在Android 2.0(API級別5)中新增的。因此,一些應用程式能夠使用API,然後才能使用<uses-feature>系統宣告它們需要API。
為防止這些應用無意中提供,Google Play會假定某些與硬體相關的許可權表明預設情況下需要基礎硬體功能。例如,使用藍芽的應用程式必須在<uses-permission>元素中請求BLUETOOTH許可權 - 對於舊版應用程式,Google Play假定許可權宣告表示應用程式需要基礎android.hardware.bluetooth功能並設定基於該功能進行過濾。表2列出了暗示與<uses-feature>元素中宣告的功能要求等效的功能要求的許可權。
請注意,<uses-feature>宣告(包括任何宣告的android:required屬性)始終優先於表2中許可權所隱含的功能。對於任何這些許可權,您可以通過明確宣告隱含功能來禁用基於隱含功能的過濾在<uses-feature>元素中顯式地使用android:required =“false”屬性。例如,要禁用基於CAMERA許可權的任何過濾,您可以將此<uses-feature>宣告新增到清單檔案中:
<uses-feature android:name="android.hardware.camera" android:required="false" />
表2.暗示裝置硬體使用的裝置許可權。