android程式中的AndroidManifest.xml中的uses-feature詳解
AndroidManifest.xml中的uses-feature
在Android的manifest檔案:
用於指定android程式,是否需要某種硬體或軟體資源/功能。
uses-feature的語法
<uses-feature
android:name="string"
android:required=["true" | "false"]
android:glEsVersion="integer" /> |
android:name
- 攝像頭:
android.hardware.camera
- 各種感測器:
- 加速計
:android.hardware.sensor.accelerometer
- 氣壓計
:android.hardware.sensor.barometer
- 指南針
:
android.hardware.sensor.compass
- 陀螺儀
:
android.hardware.sensor.gyroscope
- 感光
:
android.hardware.sensor.light
- 近距離感測
:
android.hardware.sensor.proximity
- 加速計
- 麥克風:
android.hardware.microphone
- 定位:
android.hardware.location
- USB:
- USB Host:
android.hardware.usb.host
- USB Host:
- WIFI:
android.hardware.wifi
- 藍芽:
android.hardware.bluetooth
- Bluetooth Low Energy:
android.software.bluetooth_le
- VOIP:
android.software.sip.voip
http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference
android:required
android:required="true"
:表示需要裝置具有某個功能。- 如果裝置沒有該功能,則程式不工作,就是可以理解的
android:required="false"
:表示希望裝置,最好具有某個功能- 裝置即使沒有該功能,程式也應該可以正常工作
- 為了程式工作的更好,最好具有該功能。
如果不指定,預設為true:
android:required="true":
android:qlEsVersion
- OpenGL ES 1.0
- OpenGL ES 2.0
- OpenGL ES 3.0
我這裡不涉及到,不去深究。
uses-feature寫法舉例
1.某程式需要藍芽和攝像頭,就可以這麼寫:
<uses-feature android:name="android.hardware.bluetooth" /> <uses-feature android:name="android.hardware.camera" />
2.如果,某個裝置,是類似於照相機之類的程式,那麼沒有攝像頭,就沒法正常工作,則可以加上required引數為true:
<uses-feature android:name="android.hardware.camera" android:required="true" />
3.如果某個檔案共享的軟體,除了通過WIFI傳輸外,如果有藍芽,那最好,也支援通過藍芽傳輸,則可以加上required為false,希望最好有藍芽:
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
4.比如,我的程式,是將android裝置作為USB的Host,外接USB的裝置的,所以要求必須有USB的host,所以可以寫為:
<uses-feature android:required="true" android:name="android.hardware.usb.host" />
uses-feature的注意事項和其他說明
uses-feature,只是起到指示性的作用,不是強制的檢測
uses-feature,只是起到指示性的作用,不是強制的檢測
如果像上面的,我寫了:
<uses-feature android:name="android.hardware.usb.host" android:required="true" />
[2013-11-05 10:15:37 - com.android.ide.eclipse.adt.internal.project.AndroidManifestHelper] Parser exception for D:\DevRoot\xxxxxxxxxxxxxx\AndroidManifest.xml: Element type "uses-feature" must be followed by either attribute specifications, ">" or "/>". |
<uses-feature android:required="true" android:name="android.hardware.usb.host" />
本意是:希望此android裝置必須有usb的host,否則沒法工作。
即使沒有usb的host,該app,也是可以在該android裝置上面跑的
只不過不能正常工作罷了。
而作為Android系統,是不是強制去檢測:
當此android裝置,沒有usb的host,就不讓該app執行。
寫android的app時最好還是加上合適的uses-feature的說明比較好
對於其他一些程式,比如Google Play
會根據你的程式中的uses-feature的宣告,去過濾,分類android的app的。
另外,你的程式中,也最好,根據實際需要,去加上合適的uses-feature的說明,比較好。
方便使用者和其他人明白,你的app對於資源的需求:
至少間接的相當於:給當前app,弄了個prerequisite前提條件了。
便於使用者清楚需要哪些軟硬體條件,才能執行你的當前的app。
可以用aapt去檢測android的app(xxx.apk)中的uses-feature屬性
Testing the features required by your application
adt-bundle-windows/sdk/platform-tools/aapt.exe |
去拷貝了某個apk,測試了一把,結果如下:
CLi@PC-CLI-1 /cygdrive/d/DevRoot/android/adt-bundle-windows/sdk/platform-tools $ ls aapt.exe* AdbWinApi.dll* aidl.exe* crifanLiTestAapt.apk* crifanLiTestAapt_3.apk* dx.bat* lib/ NOTICE.txt* source.properties* adb.exe* AdbWinUsbApi.dll* api/ crifanLiTestAapt_2.apk* dexdump.exe* fastboot.exe* llvm-rs-cc.exe* renderscript/ CLi@PC-CLI-1 /cygdrive/d/DevRoot/android/adt-bundle-windows/sdk/platform-tools $ ./aapt dump badging crifanLiTestAapt_3.apk package: name='com.mm.xxxxxxx' versionCode='1' versionName='1.0' sdkVersion:'14' targetSdkVersion:'17' uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.usb.host' application-label:'MobileHandHeld' application-label-zh:'某android應用程式' application-icon-160:'res/drawable-mdpi/yyyyyyyyyy.png' application-icon-240:'res/drawable-hdpi/yyyyyyyyyy.png' application-icon-320:'res/drawable-xhdpi/yyyyyyyyyy.png' application-icon-480:'res/drawable-xxhdpi/yyyyyyyyyy.png' application: label='MobileHandHeld' icon='res/drawable-mdpi/yyyyyyyyyy.png' launchable-activity: name='com.mm.xxxxxxx.activities.DeviceListActivity' label='MobileHandHeld' icon='' uses-permission:'android.permission.READ_EXTERNAL_STORAGE' uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE','requested WRITE_EXTERNAL_STORAGE' uses-feature:'android.hardware.touchscreen' uses-implied-feature:'android.hardware.touchscreen','assumed you require a touch screen unless explicitly made optional' uses-feature:'android.hardware.screen.landscape' uses-implied-feature:'android.hardware.screen.landscape','one or more activities have specified a landscape orientation' main other-activities supports-screens: 'small' 'normal' 'large' 'xlarge' supports-any-density: 'true' locales: '--_--' 'zh' densities: '160' '240' '320' '480'
AndroidManifest.xml中的<uses-feature>以及和<uses-permission>之間的聯絡
概述:<uses-feature>用來宣告應用中需要用的硬體和軟體的功能。
硬體特性:表明您的應用需要用的硬體功能。
功能型別 | 特徵描述 | 描述 |
音訊 | android.hardware.audio.low_latency | 該應用程式使用低延遲的音訊裝置上的管道,聲音輸入或輸出延遲或滯後敏感。 |
藍芽 | android.hardware.bluetooth | 該應用程式使用藍芽無線功能,在裝置中。 |
相機 | android.hardware.camera | 該應用程式使用該裝置的攝像頭。如果裝置支援多個攝像頭,應用程式使用相機,面對從螢幕上移開。 |
android.hardware.camera.autofocus | 子功能。該應用程式使用裝置相機的自動對焦能力。 | |
android.hardware.camera.flash | 子功能。該應用程式使用裝置相機的閃光燈。 | |
android.hardware.camera.front | 子功能。該應用程式使用裝置上的前置攝像頭。 | |
android.hardware.camera.any | 該應用程式使用至少一個攝像頭朝向任何方向。使用當前在偏好android.hardware.camera的, 如果不需要的背面朝相機。 |
|
位置 | android.hardware.location | 該應用程式使用裝置上的一個或多個特徵,確定位置,如GPS定位,網路位置或細胞的位置。 |
android.hardware.location.network | 子功能。該應用程式使用從裝置支援的基於網路的地理定位系統獲得的粗略的位置座標 | |
android.hardware.location.gps | 子功能。該應用程式使用裝置上的全球定位系統接收器獲得的精確位置座標。 | |
麥克風 | android.hardware.microphone | 該應用程式使用裝置上的麥克風。 |
NFC | android.hardware.nfc | 該應用程式使用近場通訊在裝置的收音功能。 |
感測器 | android.hardware.sensor.accelerometer | 該應用程式使用的移動裝置上的一個加速度計的運動讀數。 |
android.hardware.sensor.barometer | 該應用程式使用該裝置的晴雨表。 | |
android.hardware.sensor.compass | 該應用程式使用裝置上的磁力計(羅盤)方向讀數。 | |
android.hardware.sensor.gyroscope | 該應用程式使用該裝置的陀螺儀感測器。 | |
android.hardware.sensor.light | 該應用程式使用該裝置的光感測器。 | |
android.hardware.sensor.proximity | 該應用程式使用該裝置的接近感測器。 | |
螢幕 | android.hardware.screen.landscape | 該應用程式需要橫向。 |
android.hardware.screen.portrait | 該應用程式需要縱向。 | |
電話 | android.hardware.telephony | 該應用程式使用電話功能的移動裝置,例如,電話與資料通訊業務的無線電。 |
android.hardware.telephony.cdma | 子功能。該應用程式使用CDMA電話收音機功能在裝置上的。 | |
android.hardware.telephony.gsm | 子功能。應用程式在裝置上採用了GSM電話收音機功能。 | |
電視 | android.hardware.type.television | 應用程式是專為電視使用者體驗。 |
觸控式螢幕 | android.hardware.faketouch | 該應用程式使用基本的的觸控互動活動,如“點選”,“點選”,並拖動。 |
android.hardware.faketouch.multitouch.distinct | 不同的應用程式執行跟蹤的兩個或兩個以上的“手指”上假的觸控介面。這是的faketouch功能的一個超集。 | |
android.hardware.faketouch.multitouch.jazzhand | 不同的應用程式執行的跟蹤5個或以上的“手指”上假的觸控介面。這是的faketouch功能的一個超集。 | |
android.hardware.touchscreen | 該應用程式使用的觸控式螢幕功能,比基本觸控事件,如一扔,更具互動性的手勢。這是的基本faketouch功能的一個超集。 | |
android.hardware.touchscreen.multitouch | 應用程式使用在裝置螢幕上的兩個基本點的多點觸控功能,如捏的手勢,但,不需要獨立跟蹤觸及。這是觸控式螢幕功能的一個超集。 | |
android.hardware.touchscreen.multitouch.distinct | 子功能。在裝置螢幕上的應用程式採用了先進的多點多點觸控功能,如跟蹤兩個或兩個以上的點完全獨立。這是一個多點觸控功能的超集。 | |
android.hardware.touchscreen.multitouch.jazzhand | 在裝置螢幕上的應用程式採用了先進的多點多點觸控功能,跟蹤到五點完全獨立。這是一個獨特的多點觸控功能的超集。 | |
USB | android.hardware.usb.host | 該應用程式使用USB主機模式功能(表現為主機和USB裝置連線到)。 |
android.hardware.usb.accessory | 該應用程式使用的USB附件功能(表現為USB裝置連線到USB主機)。 | |
無線上網 | android.hardware.wifi | 應用程式使用802.11網路(WIFI)功能的裝置上的。 |
軟體功能:表明您的應用程式使用或需要的軟體功能。
特點 | 屬性值 | 描述 |
應用程式! | android.software.app_widgets | 該應用程式使用或提供應用小工具,僅應安裝的裝置上,包括一個主螢幕或類似的位置,使用者可以應用小工具嵌入。 |
藍芽低功耗 | android.software.bluetooth_le | 該應用程式使用藍芽低能量的API只能夠與其他裝置通過藍芽低功耗通訊裝置,應安裝。這也隱含宣告的 |
主螢幕 | android.software.home_screen | 主螢幕更換應用程式的行為,應只安裝在裝置主螢幕上的應用程式支援第三方。 |
輸入法 | android.software.input_methods | 該應用程式提供了一個自定義的輸入法應該只能安裝在裝置支援第三方輸入法。 |
動態桌布 | android.software.live_wallpaper | 該應用程式使用或提供動態桌布,應該只能安裝在裝置支援動態桌布。 |
SIP / VOIP | android.software.sip | 該應用程式使用SIP服務在裝置上,只應安裝上支援SIP的裝置。 |
android.software.sip.voip | 子功能。該應用程式使用基於SIP的VoIP服務在裝置上。 此子功能隱式宣告 |
|
許可權和功能之間的聯絡:
類別 | 需要的許可權 | 要求的功能 |
藍芽 | 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.network 和 android.hardware.location |
|
ACCESS_FINE_LOCATION | android.hardware.location.gps 和 android.hardware.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 | |
無線上網 | ACCESS_WIFI_STATE | android.hardware.wifi |
CHANGE_WIFI_STATE | android.hardware.wifi |
CHANGE_WIFI_MULTICAST_STATE | android.hardware.wifi |