Android復習(三)清單文件中的元素——>uses-feature
<uses-feature>
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" /> <uses-feature android:name="android.hardware.camera" />
一般而言,您應始終確保為應用需要的所有功能聲明
<uses-feature>元素。聲明的
<uses-feature>元素僅供參考,這意味著在安裝應用前,Android 系統本身不會檢查設備是否提供相應的功能支持。不過,其他服務(如 Google Play)或應用可能會在處理您的應用或與其交互的過程中檢查它的<uses-feature>聲明。因此,聲明您的應用使用的所有功能(見下文列表)非常重要。對某些功能而言,您或許可以通過特定屬性定義功能的版本,例如(使用
glEsVersion聲明)所用 Open GL 的版本。設備具有或不具有的其他功能(如相機)均通過name屬性進行聲明。盡管只有運行 API 級別 4 或更高版本系統的設備才能激活
<uses-feature>元素,我們仍然建議為所有應用加入這些元素(即使minSdkVersion為“3”或更低)。運行較低版本平臺的設備會直接忽略該元素。注意:聲明功能時,切記您還必須視情況請求權限。例如,您仍須請求
CAMERA權限,才能讓您的應用訪問 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 都會掃描應用的清單文件。它會尋找 <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" 時),還是應用會在具有該功能時予以優先使用,但應用本身設計為不使用它也能正常運行(設置為 "false" 時)。
Google Play 按以下方式處理顯式聲明的功能:
- 如果您將某個功能顯式聲明為所需功能,則 Google Play 會將該功能添加至應用的所需功能列表。然后,它會從不提供該功能的設備上過濾該應用,使其對用戶不可見。例如:
<uses-feature android:name="android.hardware.camera" 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 權限,但未針對 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 會按照 <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 所用相同的規則,從而確定應用需要的功能。
如要使用該工具,請按以下步驟操作:
- 首先,構建您的應用并將其導出為未簽署的
.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。 - 接下來,如果
aapt工具尚未出現在您的 PATH 中,請定位該工具。如果您使用的是 SDK Tools r8 或更高版本,則可以在<SDK>/build-tools/<tools version number>目錄中找到aapt。注意:您必須使用為最新可用 Build-Tools 組件提供的
aapt版本。如果您沒有最新的 Build-Tools 組件,請使用 Android SDK 管理器下載該組件。 - 使用以下語法運行
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- 應用使用至少一個設備相機所提供的
FULL級圖像捕捉支持。提供FULL支持的相機可提供快速捕捉功能、逐幀控制和手動后期處理控制。
設備界面硬件功能
android.hardware.type.automotive-
將應用設計為在車輛內的一組屏幕上顯示其界面。用戶通過硬按鈕、輕觸、旋轉控制器以及類鼠標界面與應用進行交互。車輛的屏幕通常出現在車輛的中控臺或儀表板中。這些屏幕的尺寸和分辨率通常有限。
注意:切記,由于用戶是在駕車時使用這類應用界面,應用必須盡量不要讓駕駛員分心。
android.hardware.type.television-
(已棄用;請改用
android.software.leanback。)將應用設計為在電視上顯示其界面。此功能將“電視”定義為一種典型的起居室電視體驗:顯示在大屏幕上,用戶坐在遠處,主流輸入形式是類似方向鍵的設備,并且一般不使用鼠標、指示器或觸摸設備。
android.hardware.type.watch- 將應用設計為在手表上顯示其界面。用戶會將手表佩戴在身體(例如手腕)上。用戶在很近的距離與設備互動。
指紋硬件功能
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.landscapeandroid.hardware.screen.portrait-
應用要求設備使用縱向或橫向方向。如果您的應用同時支持這兩種方向,則無需聲明任一功能。
例如,如果您的應用要求縱向方向,則應聲明以下功能,使得只有支持縱向方向(始終或由用戶選擇)的設備才能運行您的應用:
<uses-feature android:name="android.hardware.screen.portrait" />
默認情況下假定兩種方向均非要求的方向,這樣便可在支持一種或同時支持兩種方向的設備上安裝您的應用。不過,如果應用的任一 Activity 利用
android:screenOrientation屬性請求在特定方向下運行,則此聲明意味著您的應用需要該方向。例如,如果您使用"landscape"、"reverseLandscape"或"sensorLandscape"聲明android:screenOrientation,則您的應用只能安裝在支持橫向方向的設備上。最佳做法是,您仍應使用
<uses-feature>元素來聲明對該方向的要求。如果您使用android:screenOrientation為 Activity 聲明某個方向,但實際并無此要求,則可通過使用<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-
應用使用基本的輕觸交互事件,例如點按和拖動。
當聲明為必需時,此功能表示只有當設備可模擬觸摸屏(“假觸摸”界面)或實際具有觸摸屏時,應用才能與之兼容。
如果設備帶有假觸摸界面,則其會為用戶提供模擬部分觸摸屏功能的用戶輸入系統。例如,鼠標或遙控器可以驅動屏幕上的光標。如果您的應用需要基本的點擊式交互(換言之,它在只使用方向鍵控制器的情況下無法正常工作),則應聲明該功能。由于這是最低水平的觸摸交互,因此您還可在提供更復雜觸摸界面的設備上使用聲明該功能的應用。
注意:默認情況下,應用需要
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功能的一個超集。默認情況下,您的應用需要該功能。因此,如果設備默認只提供模擬觸摸界面(“假觸摸”),則其無法使用您的應用。如果您希望提供假觸摸界面的設備(甚至只提供方向鍵控制器的設備)可使用您的應用,則必須在聲明
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 的互聯網語音協議 (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.hardware.bluetooth 功能添加于 Android 2.2(API 級別 8),但其引用的 Bluetooth API 卻添加于 Android 2.0(API 級別 5)。因此,在能夠利用 <uses-feature> 系統聲明需要某個 API 之前,一些應用便已具備使用該 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" />
注意:如果應用面向 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 |

浙公網安備 33010602011771號