android manifest简介
生活随笔
收集整理的這篇文章主要介紹了
android manifest简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每個Android項目都包含一個Manifest文件(Android Manifest.xml),它存儲在項目層次中的最頂層。Manifest可以定義應用程序及其組件和需求的結構和元數據。它包含了組成應用程序的每一個Activity,Service,Content Provider和Broadcast Receiver的節點,并使用Intent Filter和權限來確定這些組件之間以及這些組件和其他應用程序是如何交互的。
Manifest文件還可以指定應用程序的元數據(如它的圖標,版本號或者主題)以及額外的頂層節點,這些節點可用來指定必需的安全權限和單元測試,以及定義硬件,屏幕和平臺支持要求。Manifest文件由一個根manifest標簽構成,該標簽帶有一個被設為項目包的package屬性。它通常包含一個xmlns:android屬性來提供文件內使用的某些屬性。使用versionCode屬性可將當前的應用程序版本定義為一個整數,每次版本迭代時,這個數字都會增加。使用versionName可以定義一個顯示給用戶的公共版本號。通過使用installLocation屬性,還可以指定是否允許(或者首選)將應用程序安裝到外部存儲器(通常是SD卡)而不是內部存儲器上。為此,可以將其值指定為preferExternal或outo,使用前者時,只要有可能就會把應用程序安裝到外部存儲器上,后者則要求系統決定。如果不指定installLocation屬性,應用程序將安裝到內部存儲器,而用戶將無法把應用程序移動到外部存儲器。內部存儲器的容量一般是有限的,所以最好是只要有可能,就把應用程序安裝到外部存儲器。
應用程序Manifest文件詳解
下面的XML代碼段展示了一個典型的Manifest節點:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
??????????? package="com.paad.myapp"
??????????? android:versionCode="1"
??????????? android:versionName="0.9 Beta"
??????????? android:installLocation="preferExternal">
??????????? [... manifest nodes ... ]
</manifest>
manifest標簽包含了一些節點(node),它們定義了組成應用程序的應用程序組件,安全設置,測試類和需求。下面列出了一些manifest子節點標簽,并用一些XML代碼段說明了它們是如何使用的。
uses-sdk:這個節點用于定義要想正確地運行應用程序,設備上必須具有的最低和最高SDK版本,以及為應用程序設計的目標SDK,這分別通過使用 minSDKVersion,maxSDKVersion和targetSDKVersion屬性設置。最低SDK版本指定了包含應用程序中使用的API的最低SDK版本。如果沒有指定最低SDK版本,其默認值為1,在這種情況下,如果應用程序試圖調用不可用的API,那么就會失敗。最高SDK版本用于定義想要支持的最高SDK版本。在Android Market上列出的對運行更高平臺版本的設備可用的應用程序中,你的應用程序不會顯示。最好不要設置最高SDK版本,除非你知道應用程序在更新的平臺版本上肯定不能正確工作。目標SDK版本屬性用于指定你在開發和測試應用程序時使用的平臺。設置目標SDK版本會告訴系統不需要為支持該版本而進行任何前向和后向兼容性更改。為了利用最新的平臺UI改進,當確認應用程序在最新的平臺版本上的表現符合預期后,即使應用程序中沒有使用任何新的API,也應該將其目標SDK設為最新的平臺版本,這被認為是一種最佳實踐。通常,沒有必要指定最高SDK版本,也很少有人支持那么做。最高SDK版本用于定義想要支持的最高SDK版本。在運行更高平臺版本的設備的Android Play Store上,你的應用程序不會顯示。運行的平臺版本高于Android 2.0.1(API level 6)的設備在安裝時將忽略任何最高SDK值。
?
1
<uses-sdk android:minSdkVersion="6" android:targetSdkVersion"15"/>
注:支持的SDK版本不等同于平臺版本,也不能從平臺版本導出。例如,Android平臺的版本4.0支持SDK版本14。要想找出與每個平臺對應的SDK版本,可以使用這個表:http://developer.android.com/guide/appendix/api-levels.html。
uses-configuration:使用uses-configuration節點可以指定應用程序支持的每個輸入機制的組合。一般不需要包含這個節點,不過對于需要特殊輸入控制的游戲來說,它是很有用的,可以指定以下輸入設備的任意組合 :
- reqFiveWayNav:如果要求輸入設備能夠向上,向下,向左和向右導航,并且能夠單擊當前的選項,那么需要將這個屬性指定為true。這包括跟蹤球和D-pad。
- reqHardKeyboard:如果應用程序需要硬件鍵盤,則將此屬性指定為true。
- reqKeyboardType:用于將鍵盤類型指定為nokeys,qwerty,twelveley或undefined中的一種。
- reqNavigation:將屬性值指定為nonav,dpad,trackball,wheel或undefined其中之一,作為必需的導航設備。
- reqTouchScreen:選擇notouch,stylus,finger或undefined其中之一,以指定必需的觸摸屏輸入。
可以指定多個支持的配置,例如,指定設備具有觸摸屏,跟蹤球以及一個QUERTY或12鍵硬件鍵盤,如下所示:
?
1
2
3
4
5
6
7
8
<uses-configuration android:reqTouchScreen="finger"
??????????????? android:reqNavigation="trackball"
??????????????? android:reqHardKeyboard="true"
??????????????? android:reqKeyboardType="qwerty"/>
<uses-configuration android:reqTouchScreen="finger"
??????????????? android:reqNavigation="trackball"
??????????????? android:reqHardKeyboard="true"
??????????????? android:reqKeyboardType="twelvekey"/>
注意:在指定必需的配置時,如果設備不具有任意一種指定配置,則應用程序將不會安裝在該設備上。
uses-feature:Android可以在各種各樣的硬件平臺上運行。可以使用多個uses-feature節點來指定應用程序需要的每個硬件功能。這可以避免將應用程序安裝到不包含必要的硬件功能(例如NFC硬件)的設備上。如下所示:
?
1
<uses-feature android:name="android.hardware.nfc"/>
??????? 可以要求支持兼容設備上可選的任意硬件。目前,可選的硬件功能包括:
??????? - 音頻:用于要求低延遲音頻管道的應用程序。
??????? - 藍牙:用于需要藍牙傳輸的應用程序。
??????? - 攝像頭:用于要求有攝像頭的應用程序。
??????? - 位置:用于需要基于位置的服務的應用程序,還可以顯式指定要求網絡或GPS支持。
??????? - 麥克風:用于需要音頻輸入的應用程序。
??????? - NFC:要求NFC(近場通信)支持。
??????? - 傳感器:指定對任何潛在可用的硬件傳感器的要求。
??????? - 電話服務:指定需要一般性的電話服務,或者特定的無線發送方式(GSM或CDMA)。
??????? - 觸摸屏:指定應用程序需要的觸摸屏類型。
??????? - USB:用于需要支持USB host或accessory模式的應用程序。
??????? - WI-FI:用于需要支持WIFI網絡的應用程序。
??? 隨著支持Android的平臺種類不斷增加,可選硬件的種類也將增加。以下網址給出了uses-feature硬件的完整列表:http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference。
為了確保兼容性,對權限的需求暗含著對相應功能的需求。具體來說,對藍牙,攝像頭,位置服務,音頻錄制和Wi-Fi要求? 的訪問權限以及與電話服務相關的權限都暗含著要有相應的硬件。通過添加一個required屬性并把它設為false,可以覆蓋這些暗含的需求。例如,一個備忘應用程序可以支持語音備忘:
?
1
2
<uses-feature android:name="android.hardware.microphone"
??????????? android:required="false" />
攝像頭硬件還代表著一種特殊的情況。當出于兼容性原因,要求有攝像頭的使用權限時,或者添加了一個需要攝像頭的使用權限的uses-feature節點時,暗含的要求就是攝像頭要支持自動聚焦功能。在合適的地方可以把它指定為可選項:
?
1
2
3
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
也可以使用uses-feature節點指定應用程序所需的OppenGL的最低版本。只需要使用glEsVersion屬性,將OpenGL ES版本指定為一個整數即可。高16位代表主版本號,低16位代表次版本號,所以版本1.1可以表示為:
?
1
<uses-ffeature android:glEsVersion="0x00010001" />
Manifest文件還可以指定應用程序的元數據(如它的圖標,版本號或者主題)以及額外的頂層節點,這些節點可用來指定必需的安全權限和單元測試,以及定義硬件,屏幕和平臺支持要求。Manifest文件由一個根manifest標簽構成,該標簽帶有一個被設為項目包的package屬性。它通常包含一個xmlns:android屬性來提供文件內使用的某些屬性。使用versionCode屬性可將當前的應用程序版本定義為一個整數,每次版本迭代時,這個數字都會增加。使用versionName可以定義一個顯示給用戶的公共版本號。通過使用installLocation屬性,還可以指定是否允許(或者首選)將應用程序安裝到外部存儲器(通常是SD卡)而不是內部存儲器上。為此,可以將其值指定為preferExternal或outo,使用前者時,只要有可能就會把應用程序安裝到外部存儲器上,后者則要求系統決定。如果不指定installLocation屬性,應用程序將安裝到內部存儲器,而用戶將無法把應用程序移動到外部存儲器。內部存儲器的容量一般是有限的,所以最好是只要有可能,就把應用程序安裝到外部存儲器。
應用程序Manifest文件詳解
下面的XML代碼段展示了一個典型的Manifest節點:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
??????????? package="com.paad.myapp"
??????????? android:versionCode="1"
??????????? android:versionName="0.9 Beta"
??????????? android:installLocation="preferExternal">
??????????? [... manifest nodes ... ]
</manifest>
manifest標簽包含了一些節點(node),它們定義了組成應用程序的應用程序組件,安全設置,測試類和需求。下面列出了一些manifest子節點標簽,并用一些XML代碼段說明了它們是如何使用的。
uses-sdk:這個節點用于定義要想正確地運行應用程序,設備上必須具有的最低和最高SDK版本,以及為應用程序設計的目標SDK,這分別通過使用 minSDKVersion,maxSDKVersion和targetSDKVersion屬性設置。最低SDK版本指定了包含應用程序中使用的API的最低SDK版本。如果沒有指定最低SDK版本,其默認值為1,在這種情況下,如果應用程序試圖調用不可用的API,那么就會失敗。最高SDK版本用于定義想要支持的最高SDK版本。在Android Market上列出的對運行更高平臺版本的設備可用的應用程序中,你的應用程序不會顯示。最好不要設置最高SDK版本,除非你知道應用程序在更新的平臺版本上肯定不能正確工作。目標SDK版本屬性用于指定你在開發和測試應用程序時使用的平臺。設置目標SDK版本會告訴系統不需要為支持該版本而進行任何前向和后向兼容性更改。為了利用最新的平臺UI改進,當確認應用程序在最新的平臺版本上的表現符合預期后,即使應用程序中沒有使用任何新的API,也應該將其目標SDK設為最新的平臺版本,這被認為是一種最佳實踐。通常,沒有必要指定最高SDK版本,也很少有人支持那么做。最高SDK版本用于定義想要支持的最高SDK版本。在運行更高平臺版本的設備的Android Play Store上,你的應用程序不會顯示。運行的平臺版本高于Android 2.0.1(API level 6)的設備在安裝時將忽略任何最高SDK值。
?
1
<uses-sdk android:minSdkVersion="6" android:targetSdkVersion"15"/>
注:支持的SDK版本不等同于平臺版本,也不能從平臺版本導出。例如,Android平臺的版本4.0支持SDK版本14。要想找出與每個平臺對應的SDK版本,可以使用這個表:http://developer.android.com/guide/appendix/api-levels.html。
uses-configuration:使用uses-configuration節點可以指定應用程序支持的每個輸入機制的組合。一般不需要包含這個節點,不過對于需要特殊輸入控制的游戲來說,它是很有用的,可以指定以下輸入設備的任意組合 :
- reqFiveWayNav:如果要求輸入設備能夠向上,向下,向左和向右導航,并且能夠單擊當前的選項,那么需要將這個屬性指定為true。這包括跟蹤球和D-pad。
- reqHardKeyboard:如果應用程序需要硬件鍵盤,則將此屬性指定為true。
- reqKeyboardType:用于將鍵盤類型指定為nokeys,qwerty,twelveley或undefined中的一種。
- reqNavigation:將屬性值指定為nonav,dpad,trackball,wheel或undefined其中之一,作為必需的導航設備。
- reqTouchScreen:選擇notouch,stylus,finger或undefined其中之一,以指定必需的觸摸屏輸入。
可以指定多個支持的配置,例如,指定設備具有觸摸屏,跟蹤球以及一個QUERTY或12鍵硬件鍵盤,如下所示:
?
1
2
3
4
5
6
7
8
<uses-configuration android:reqTouchScreen="finger"
??????????????? android:reqNavigation="trackball"
??????????????? android:reqHardKeyboard="true"
??????????????? android:reqKeyboardType="qwerty"/>
<uses-configuration android:reqTouchScreen="finger"
??????????????? android:reqNavigation="trackball"
??????????????? android:reqHardKeyboard="true"
??????????????? android:reqKeyboardType="twelvekey"/>
注意:在指定必需的配置時,如果設備不具有任意一種指定配置,則應用程序將不會安裝在該設備上。
uses-feature:Android可以在各種各樣的硬件平臺上運行。可以使用多個uses-feature節點來指定應用程序需要的每個硬件功能。這可以避免將應用程序安裝到不包含必要的硬件功能(例如NFC硬件)的設備上。如下所示:
?
1
<uses-feature android:name="android.hardware.nfc"/>
??????? 可以要求支持兼容設備上可選的任意硬件。目前,可選的硬件功能包括:
??????? - 音頻:用于要求低延遲音頻管道的應用程序。
??????? - 藍牙:用于需要藍牙傳輸的應用程序。
??????? - 攝像頭:用于要求有攝像頭的應用程序。
??????? - 位置:用于需要基于位置的服務的應用程序,還可以顯式指定要求網絡或GPS支持。
??????? - 麥克風:用于需要音頻輸入的應用程序。
??????? - NFC:要求NFC(近場通信)支持。
??????? - 傳感器:指定對任何潛在可用的硬件傳感器的要求。
??????? - 電話服務:指定需要一般性的電話服務,或者特定的無線發送方式(GSM或CDMA)。
??????? - 觸摸屏:指定應用程序需要的觸摸屏類型。
??????? - USB:用于需要支持USB host或accessory模式的應用程序。
??????? - WI-FI:用于需要支持WIFI網絡的應用程序。
??? 隨著支持Android的平臺種類不斷增加,可選硬件的種類也將增加。以下網址給出了uses-feature硬件的完整列表:http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference。
為了確保兼容性,對權限的需求暗含著對相應功能的需求。具體來說,對藍牙,攝像頭,位置服務,音頻錄制和Wi-Fi要求? 的訪問權限以及與電話服務相關的權限都暗含著要有相應的硬件。通過添加一個required屬性并把它設為false,可以覆蓋這些暗含的需求。例如,一個備忘應用程序可以支持語音備忘:
?
1
2
<uses-feature android:name="android.hardware.microphone"
??????????? android:required="false" />
攝像頭硬件還代表著一種特殊的情況。當出于兼容性原因,要求有攝像頭的使用權限時,或者添加了一個需要攝像頭的使用權限的uses-feature節點時,暗含的要求就是攝像頭要支持自動聚焦功能。在合適的地方可以把它指定為可選項:
?
1
2
3
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
也可以使用uses-feature節點指定應用程序所需的OppenGL的最低版本。只需要使用glEsVersion屬性,將OpenGL ES版本指定為一個整數即可。高16位代表主版本號,低16位代表次版本號,所以版本1.1可以表示為:
?
1
<uses-ffeature android:glEsVersion="0x00010001" />
總結
以上是生活随笔為你收集整理的android manifest简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activity中UI框架基本概念
- 下一篇: android 组件(activity,