AndroidManifest.xml配置文件属性详解
生活随笔
收集整理的這篇文章主要介紹了
AndroidManifest.xml配置文件属性详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
AndroidManifest.xml配置文件對于Android應(yīng)用開發(fā)來說是非常重要的基礎(chǔ)知識,本文旨在總結(jié)該配置文件中重點(diǎn)的用法,以便日后查閱。下面是一個標(biāo)準(zhǔn)的AndroidManifest.xml文件樣例。
[html]?view plaincopy <?xml?version="1.0"?encoding="utf-8"?>?? ?? <manifest>?? ?? ????<!--?基本配置?-->?? ????<uses-permission?/>?? ????<permission?/>?? ????<permission-tree?/>?? ????<permission-group?/>?? ????<instrumentation?/>?? ????<uses-sdk?/>?? ????<uses-configuration?/>?? ????<uses-feature?/>?? ????<supports-screens?/>?? ????<compatible-screens?/>?? ????<supports-gl-texture?/>?? ?????? ????<!--?應(yīng)用配置?-->?? ????<application>?? ?????????? ????????<!--?Activity?配置?-->?? ????????<activity>?? ????????????<intent-filter>?? ????????????????<action?/>?? ????????????????<category?/>?? ????????????????<data?/>?? ????????????</intent-filter>?? ????????????<meta-data?/>?? ????????</activity>?? ?????????? ????????<activity-alias>?? ????????????<intent-filter>?.?.?.?</intent-filter>?? ????????????<meta-data?/>?? ????????</activity-alias>?? ?????????? ????????<!--?Service?配置?-->?? ????????<service>?? ????????????<intent-filter>?.?.?.?</intent-filter>?? ????????????<meta-data/>?? ????????</service>?? ?????????? ????????<!--?Receiver?配置?-->?? ????????<receiver>?? ????????????<intent-filter>?.?.?.?</intent-filter>?? ????????????<meta-data?/>?? ????????</receiver>?? ?????????? ????????<!--?Provider?配置?-->?? ????????<provider>?? ????????????<grant-uri-permission?/>?? ????????????<meta-data?/>?? ????????</provider>?? ?????????? ????????<!--?所需類庫配置?-->?? ????????<uses-library?/>?? ?? ????</application>?? ?? </manifest>??
從以上示例代碼中,我們可以看出Android配置文件采用XML作為描述語言,每個XML標(biāo)簽都不同的含義,大部分的配置參數(shù)都放在標(biāo)簽的屬性中,下面我們便按照以上配置文件樣例中的先后順序來學(xué)習(xí)Android配置文件中主要元素與標(biāo)簽的用法。
<manifest>
AndroidManifest.xml配置文件的根元素,必須包含一個<application>元素并且指定xlmns:android和package屬性。xlmns:android指定了Android的命名空間,默認(rèn)情況下是“http://schemas.android.com/apk/res/android”;而package是標(biāo)準(zhǔn)的應(yīng)用包名,也是一個應(yīng)用進(jìn)程的默認(rèn)名稱,以本書微博應(yīng)用實(shí)例中的包名為例,即“com.app.demos”就是一個標(biāo)準(zhǔn)的Java應(yīng)用包名,我們?yōu)榱吮苊饷臻g的沖突,一般會以應(yīng)用的域名來作為包名。當(dāng)然還有一些其他常用的屬性需要注意一下,比如android:versionCode是給設(shè)備程序識別版本用的,必須是一個整數(shù)值代表app更新過多少次;而android:versionName則是給用戶查看版本用的,需要具備一定的可讀性,比如“1.0.0”這樣的。<manifest>標(biāo)簽語法范例如下。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
??? package="string"
??? android:sharedUserId="string"
??? android:sharedUserLabel="string resource"?
??? android:versionCode="integer"
??? android:versionName="string"
??? android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
... ...
</manifest>
<uses-permission>
為了保證Android應(yīng)用的安全性,應(yīng)用框架制定了比較嚴(yán)格的權(quán)限系統(tǒng),一個應(yīng)用必須聲明了正確的權(quán)限才可以使用相應(yīng)的功能,例如我們需要讓應(yīng)用能夠訪問網(wǎng)絡(luò)就需要配置“android.permission.INTERNET”,而如果要使用設(shè)備的相機(jī)功能,則需要設(shè)置“android.permission.CAMERA”等。<uses-permission>就是我們最經(jīng)常使用的權(quán)限設(shè)定標(biāo)簽,我們通過設(shè)定android:name屬性來聲明相應(yīng)的權(quán)限名,比如在微博應(yīng)用實(shí)例中,我們就是根據(jù)應(yīng)用的所需功能聲明了對應(yīng)的權(quán)限,相關(guān)代碼如下。
<manifest ...>
... ...
??? <!-- 網(wǎng)絡(luò)相關(guān)功能 -->
??? <uses-permission android:name="android.permission.INTERNET" />
??? <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
??? <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
??? <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
??? <!-- 讀取電話狀態(tài) -->
??? <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
??? <!-- 通知相關(guān)功能 -->
??? <uses-permission android:name="android.permission.VIBRATE" />
... ...
</manifest>
<permission>
權(quán)限聲明標(biāo)簽,定義了供給<uses-permission>使用的具體權(quán)限,通常情況下我們不需要為自己的應(yīng)用程序聲明某個權(quán)限,除非需要給其他應(yīng)用程序提供可調(diào)用的代碼或者數(shù)據(jù),這個時候你才需要使用<permission>標(biāo)簽。該標(biāo)簽中提供了android:name權(quán)限名標(biāo)簽,權(quán)限圖標(biāo)android:icon以及權(quán)限描述android:description等屬性,另外還可以和<permission-group>以及<permission-tree>配合使用來構(gòu)造更有層次的、更有針對性權(quán)限系統(tǒng)。<permission>標(biāo)簽語法范例如下。
<permission android:description="string resource"
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permissionGroup="string"
??? android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
<instrumentation>
用于聲明Instrumentation測試類來監(jiān)控Android應(yīng)用的行為并應(yīng)用到相關(guān)的功能測試中,其中比較重要的屬性有:測試功能開關(guān)android:functionalTest,profiling調(diào)試功能開關(guān)android:handleProfiling,測試用例目標(biāo)對象android:targetPackage等。另外,我們需要注意的是Instrumentation對象是在應(yīng)用程序的組件之前被實(shí)例化的,這點(diǎn)在組織測試邏輯的時候需要被考慮到。<instrumentation>標(biāo)簽語法范例如下。
<instrumentation android:functionalTest=["true" | "false"]
??? android:handleProfiling=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:targetPackage="string" />
<uses-sdk>
用于指定Android應(yīng)用中所需要使用的SDK的版本,比如我們的應(yīng)用必須運(yùn)行于Android 2.0以上版本的系統(tǒng)SDK之上,那么就需要指定應(yīng)用支持最小的SDK版本數(shù)為5;當(dāng)然,每個SDK版本都會有指定的整數(shù)值與之對應(yīng),比如我們最常用的Android 2.2.x的版本數(shù)是8。當(dāng)然,除了可以指定最低版本之外,<uses-sdk>標(biāo)簽還可以指定最高版本和目標(biāo)版本,語法范例如下。
<uses-sdk android:minSdkVersion="integer"?
??? android:targetSdkVersion="integer"
??? android:maxSdkVersion="integer" />
<uses-configuration>與<uses-feature>
這兩個標(biāo)簽都是用于描述應(yīng)用所需要的硬件和軟件特性,以便防止應(yīng)用在沒有這些特性的設(shè)備上安裝。<uses-configuration>標(biāo)簽中,比如有些設(shè)備帶有D-pad或者Trackball這些特殊硬件,那么android:reqFiveWayNav屬性就需要設(shè)置為true;而如果有一些設(shè)備帶有硬件鍵盤,android:reqHardKeyboard也需要被設(shè)置為true。另外,如果設(shè)備需要支持藍(lán)牙,我們可以使用<uses-feature android:name="android.hardware.bluetooth" />來支持這個功能。這兩個標(biāo)簽主要用于支持一些特殊的設(shè)備中的應(yīng)用,兩個標(biāo)簽的語法范例分別如下。
<uses-configuration android:reqFiveWayNav=["true" | "false"]?
??? android:reqHardKeyboard=["true" | "false"]
??? android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
??? android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
??? android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />
<uses-feature android:name="string"
??? android:required=["true" | "false"]
??? android:glEsVersion="integer" />
<uses-library>
用于指定Android應(yīng)用可使用的用戶庫,除了系統(tǒng)自帶的android.app、android.content、android.view和android.widget這些默認(rèn)類庫之外,有些應(yīng)用可能還需要一些其他的Java類庫作為支持,這種情況下我們就可以使用<uses-library>標(biāo)簽讓ClassLoader加載其類庫供Android應(yīng)用運(yùn)行時用。<uses-library>標(biāo)簽的用法很簡單,以下是語法范例。
<uses-library android:name="string"
??? android:required=["true" | "false"] />
小貼士:
當(dāng)運(yùn)行Java程序時,首先運(yùn)行JVM(Java虛擬機(jī)),然后再把Java類加載到JVM里頭運(yùn)行,負(fù)責(zé)加載Java類的這部分就叫做ClassLoader。當(dāng)然,ClassLoader是由多個部分構(gòu)成的,每個部分都負(fù)責(zé)相應(yīng)的加載工作。當(dāng)運(yùn)行一個程序的時候,JVM啟動,運(yùn)行BootstrapClassLoader,該ClassLoader加載java核心API(ExtClassLoader和AppClassLoader也在此時被加載),然后調(diào)用ExtClassLoader加載擴(kuò)展API,最后AppClassLoader加載CLASSPATH目錄下定義的Class,這就是一個Java程序最基本的加載流程。
<supports-screens>
對于一些應(yīng)用或者游戲來說,只能支持某些屏幕大小的設(shè)備或者在某些設(shè)備中的效果比較好,我們就會使用<supports-screens>標(biāo)簽來指定支持的屏幕特征。其中比較重要的屬性包括:屏幕自適應(yīng)屬性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支持屬性,按屏幕渲染圖像屬性android:anyDensity以及最小屏幕寬度屬性android:requiresSmallestWidthDp等。<supports-screens>標(biāo)簽的語法范例如下。
<supports-screens android:resizeable=["true"| "false"]
??? android:smallScreens=["true" | "false"]
??? android:normalScreens=["true" | "false"]
??? android:largeScreens=["true" | "false"]
??? android:xlargeScreens=["true" | "false"]
??? android:anyDensity=["true" | "false"]
??? android:requiresSmallestWidthDp="integer"
??? android:compatibleWidthLimitDp="integer"
??? android:largestWidthLimitDp="integer"/>
<application>
應(yīng)用配置的根元素,位于<manifest>下層,包含所有與應(yīng)用有關(guān)配置的元素,其屬性可以作為子元素的默認(rèn)屬性,常用的屬性包括:應(yīng)用名android:label,應(yīng)用圖標(biāo)android:icon,應(yīng)用主題android:theme等。當(dāng)然,<application>標(biāo)簽還提供了其他豐富的配置屬性,由于篇幅原因就不列舉了,大家可以打開Android SDK文檔來進(jìn)一步學(xué)習(xí),以下是語法范例。
<application android:allowTaskReparenting=["true" | "false"]
??? android:backupAgent="string"
??? android:debuggable=["true" | "false"]
??? android:description="string resource"
??? android:enabled=["true" | "false"]
??? android:hasCode=["true" | "false"]
??? android:hardwareAccelerated=["true" | "false"]
??? android:icon="drawable resource"
??? android:killAfterRestore=["true" | "false"]
??? android:label="string resource"
??? android:logo="drawable resource"
??? android:manageSpaceActivity="string"
??? android:name="string"
??? android:permission="string"
??? android:persistent=["true" | "false"]
??? android:process="string"
??? android:restoreAnyVersion=["true" | "false"]
??? android:taskAffinity="string"
??? android:theme="resource or theme" >
... ...
</application>
<activity>
Activity活動組件(即界面控制器組件)的聲明標(biāo)簽,Android應(yīng)用中的每一個Activity都必須在AndroidManifest.xml配置文件中聲明,否則系統(tǒng)將不識別也不執(zhí)行該Activity。<activity>標(biāo)簽中常用的屬性有:Activity對應(yīng)類名android:name,對應(yīng)主題android:theme,加載模式android:launchMode(詳見2.1.3.4節(jié)),鍵盤交互模式android:windowSoftInputMode等,其他的屬性用法大家可以參考Android SDK文檔學(xué)習(xí)。另外,<activity>標(biāo)簽還可以包含用于消息過濾的<intent-filter>元素,當(dāng)然還有可用于存儲預(yù)定義數(shù)據(jù)的<meta-data>元素,以下是<activity>標(biāo)簽的語法范例。
<activity android:allowTaskReparenting=["true" | "false"]
??? android:alwaysRetainTaskState=["true" | "false"]
??? android:clearTaskOnLaunch=["true" | "false"]
??? android:configChanges=["mcc", "mnc", "locale",
??????? "touchscreen", "keyboard", "keyboardHidden",
??????? "navigation", "orientation", "screenLayout",
??????? "fontScale", "uiMode"]
??? android:enabled=["true" | "false"]
??? android:excludeFromRecents=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:finishOnTaskLaunch=["true" | "false"]
??? android:hardwareAccelerated=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"]
??? android:multiprocess=["true" | "false"]
??? android:name="string"
??? android:noHistory=["true" | "false"] ?
??? android:permission="string"
??? android:process="string"
??? android:screenOrientation=["unspecified" | "user" | "behind" |
??????? "landscape" | "portrait" |
??????? "sensor" | "nosensor"]
??? android:stateNotNeeded=["true" | "false"]
??? android:taskAffinity="string"
??? android:theme="resource or theme"
??? android:windowSoftInputMode=["stateUnspecified",
??????? "stateUnchanged", "stateHidden",
??????? "stateAlwaysHidden", "stateVisible",
??????? "stateAlwaysVisible", "adjustUnspecified",
??????? "adjustResize", "adjustPan"] >? ?
... ...
</activity>
<activity-alias>
Activity組件別名的聲明標(biāo)簽,簡單來說就是Activity的快捷方式,屬性android:targetActivity表示的就是其相關(guān)的Activity名,當(dāng)然必須是前面已經(jīng)聲明過的Activity。除此之外,其他比較常見的屬性有:Activity別名名稱android:name,別名開關(guān)android:enabled,權(quán)限控制android:permission等。另外,我們還需要注意的是,Activity別名也是一個獨(dú)立的Activity,可以擁有自己的<intent-filter>和<meta-data>元素,其語法范例如下。
<activity-alias android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permission="string"
??? android:targetActivity="string" >
... ...
</activity-alias>
<intent-filter>與<action>、<category>、<data>
<intent-filter>用于Intent消息過濾器的聲明,在前面的2.1.3.2節(jié)中我們已經(jīng)對Android應(yīng)用框架中的Intent消息作過比較詳細(xì)的介紹,我們了解到Intent消息對于Android應(yīng)用系統(tǒng)來說,是非常重要的“粘合劑”,<intent-filter>元素可以放在<activity>、<activity-alias>、<service>和<receiver>元素標(biāo)簽中,來區(qū)分可用于處理消息的Activity控制器、Service服務(wù)和廣播接收器Broadcast Receiver。另外,我們還知道Intent消息還包含有名稱、動作、數(shù)據(jù)、類別等幾個重要屬性。這點(diǎn)與該標(biāo)簽的寫法也有一定的關(guān)系,比如<intent-filter>中必須包含有<action>元素,即用于描述具體消息的名稱;<category>標(biāo)簽則用于表示能處理消息組件的類別,即該Action所符合的類別;而<data>元素則用于描述消息需要處理的數(shù)據(jù)格式,我們甚至還可以使用正則表達(dá)式來限定數(shù)據(jù)來源。當(dāng)然,這些元素和標(biāo)簽的具體用法我們還需要慢慢學(xué)習(xí),下面是標(biāo)準(zhǔn)<intent-filter>元素標(biāo)簽的語法范例。
<intent-filter android:icon="drawable resource"
??? android:label="string resource"
??? android:priority="integer" >
??? <action android:name="string" />
??? <category android:name="string" />
??? <data android:host="string"
??????? android:mimeType="string"
??????? android:path="string"
??????? android:pathPattern="string"
??????? android:pathPrefix="string"
??????? android:port="string"
??????? android:scheme="string" />
</intent-filter>
<meta-data>
用于存儲預(yù)定義數(shù)據(jù),和<intent-filter>類似,<meta-data>也可以放在<activity>、<activity-alias>、<service>和<receiver>這四個元素標(biāo)簽中。Meta數(shù)據(jù)一般會以鍵值對的形式出現(xiàn),個數(shù)沒有限制,而這些數(shù)據(jù)都將被放到一個Bundle對象中,程序中我們則可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo對象的metaData屬性中讀取。假設(shè)我們在一個Activity中定義了一個<meta-data>元素,相關(guān)示例用法如下。
<activity...>
??? <meta-data android:name="testData" android:value="Test Meta Data"></meta-data>
</activity>
ActivityInfo info = this.getPackageManager()
??? .getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
String testData = info.metaData.getString("testData");
System.out.println("testData:" + testData);
<service>
Service服務(wù)組件的聲明標(biāo)簽,用于定義與描述一個具體的Android服務(wù),主要屬性有:Service服務(wù)類名android:name,服務(wù)圖標(biāo)android:icon,服務(wù)描述android:label以及服務(wù)開關(guān)android:enabled等。關(guān)于Service服務(wù)組件的概念和用法請參考2.1.4.2節(jié)的內(nèi)容,以下是<service>標(biāo)簽的語法范例。
<service android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permission="string"
??? android:process="string" >
... ...
</service>
<receiver>
Boardcast Receiver廣播接收器組件的聲明標(biāo)簽,用于定義與描述一個具體的Android廣播接收器,其主要屬性和<service>標(biāo)簽有些類似:Boardcast Receiver接收器類名android:name,接收器圖標(biāo)android:icon,接收器描述android:label以及接收器開關(guān)android:enabled等。關(guān)于Boardcast Receiver廣播接收器組件的概念和用法請參考2.1.4.3節(jié)的內(nèi)容,以下是<receiver>標(biāo)簽的語法范例。
<receiver android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permission="string"
??? android:process="string" >
... ...
</receiver>
<provider>與<grant-uri-permission>
除Activity、Service和Boardcast Receiver之外的另一個“四大組件”,也就是Content Provider內(nèi)容提供者的聲明標(biāo)簽。關(guān)于內(nèi)容提供者組件的概念和用法請參考2.1.4.4節(jié)的內(nèi)容,不再贅述。<provider>標(biāo)簽除了和其他組件相同的android:name、android:icon和android:label等基礎(chǔ)屬性之外,還提供了用于支持其功能的特殊屬性,如:內(nèi)容提供者標(biāo)識名稱android:authorities,對指定URI授予權(quán)限標(biāo)識android:grantUriPermission以及具體的讀、寫權(quán)限,即android:readPermission和android:writePermission等。當(dāng)然,這些屬性的具體用法我們還需要慢慢學(xué)習(xí),以下是<provider>標(biāo)簽的語法范例。
<provider android:authorities="list"
??? android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:grantUriPermissions=["true" | "false"]
??? android:icon="drawable resource"
??? android:initOrder="integer"
??? android:label="string resource"
??? android:multiprocess=["true" | "false"]
??? android:name="string"
??? android:permission="string"
??? android:process="string"
??? android:readPermission="string"
??? android:syncable=["true" | "false"]
??? android:writePermission="string" >
... ...
</provider>
原文:http://blog.chinaunix.net/uid-9185047-id-3460344.html
[html]?view plaincopy
從以上示例代碼中,我們可以看出Android配置文件采用XML作為描述語言,每個XML標(biāo)簽都不同的含義,大部分的配置參數(shù)都放在標(biāo)簽的屬性中,下面我們便按照以上配置文件樣例中的先后順序來學(xué)習(xí)Android配置文件中主要元素與標(biāo)簽的用法。
<manifest>
AndroidManifest.xml配置文件的根元素,必須包含一個<application>元素并且指定xlmns:android和package屬性。xlmns:android指定了Android的命名空間,默認(rèn)情況下是“http://schemas.android.com/apk/res/android”;而package是標(biāo)準(zhǔn)的應(yīng)用包名,也是一個應(yīng)用進(jìn)程的默認(rèn)名稱,以本書微博應(yīng)用實(shí)例中的包名為例,即“com.app.demos”就是一個標(biāo)準(zhǔn)的Java應(yīng)用包名,我們?yōu)榱吮苊饷臻g的沖突,一般會以應(yīng)用的域名來作為包名。當(dāng)然還有一些其他常用的屬性需要注意一下,比如android:versionCode是給設(shè)備程序識別版本用的,必須是一個整數(shù)值代表app更新過多少次;而android:versionName則是給用戶查看版本用的,需要具備一定的可讀性,比如“1.0.0”這樣的。<manifest>標(biāo)簽語法范例如下。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
??? package="string"
??? android:sharedUserId="string"
??? android:sharedUserLabel="string resource"?
??? android:versionCode="integer"
??? android:versionName="string"
??? android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
... ...
</manifest>
<uses-permission>
為了保證Android應(yīng)用的安全性,應(yīng)用框架制定了比較嚴(yán)格的權(quán)限系統(tǒng),一個應(yīng)用必須聲明了正確的權(quán)限才可以使用相應(yīng)的功能,例如我們需要讓應(yīng)用能夠訪問網(wǎng)絡(luò)就需要配置“android.permission.INTERNET”,而如果要使用設(shè)備的相機(jī)功能,則需要設(shè)置“android.permission.CAMERA”等。<uses-permission>就是我們最經(jīng)常使用的權(quán)限設(shè)定標(biāo)簽,我們通過設(shè)定android:name屬性來聲明相應(yīng)的權(quán)限名,比如在微博應(yīng)用實(shí)例中,我們就是根據(jù)應(yīng)用的所需功能聲明了對應(yīng)的權(quán)限,相關(guān)代碼如下。
<manifest ...>
... ...
??? <!-- 網(wǎng)絡(luò)相關(guān)功能 -->
??? <uses-permission android:name="android.permission.INTERNET" />
??? <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
??? <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
??? <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
??? <!-- 讀取電話狀態(tài) -->
??? <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
??? <!-- 通知相關(guān)功能 -->
??? <uses-permission android:name="android.permission.VIBRATE" />
... ...
</manifest>
<permission>
權(quán)限聲明標(biāo)簽,定義了供給<uses-permission>使用的具體權(quán)限,通常情況下我們不需要為自己的應(yīng)用程序聲明某個權(quán)限,除非需要給其他應(yīng)用程序提供可調(diào)用的代碼或者數(shù)據(jù),這個時候你才需要使用<permission>標(biāo)簽。該標(biāo)簽中提供了android:name權(quán)限名標(biāo)簽,權(quán)限圖標(biāo)android:icon以及權(quán)限描述android:description等屬性,另外還可以和<permission-group>以及<permission-tree>配合使用來構(gòu)造更有層次的、更有針對性權(quán)限系統(tǒng)。<permission>標(biāo)簽語法范例如下。
<permission android:description="string resource"
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permissionGroup="string"
??? android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
<instrumentation>
用于聲明Instrumentation測試類來監(jiān)控Android應(yīng)用的行為并應(yīng)用到相關(guān)的功能測試中,其中比較重要的屬性有:測試功能開關(guān)android:functionalTest,profiling調(diào)試功能開關(guān)android:handleProfiling,測試用例目標(biāo)對象android:targetPackage等。另外,我們需要注意的是Instrumentation對象是在應(yīng)用程序的組件之前被實(shí)例化的,這點(diǎn)在組織測試邏輯的時候需要被考慮到。<instrumentation>標(biāo)簽語法范例如下。
<instrumentation android:functionalTest=["true" | "false"]
??? android:handleProfiling=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:targetPackage="string" />
<uses-sdk>
用于指定Android應(yīng)用中所需要使用的SDK的版本,比如我們的應(yīng)用必須運(yùn)行于Android 2.0以上版本的系統(tǒng)SDK之上,那么就需要指定應(yīng)用支持最小的SDK版本數(shù)為5;當(dāng)然,每個SDK版本都會有指定的整數(shù)值與之對應(yīng),比如我們最常用的Android 2.2.x的版本數(shù)是8。當(dāng)然,除了可以指定最低版本之外,<uses-sdk>標(biāo)簽還可以指定最高版本和目標(biāo)版本,語法范例如下。
<uses-sdk android:minSdkVersion="integer"?
??? android:targetSdkVersion="integer"
??? android:maxSdkVersion="integer" />
<uses-configuration>與<uses-feature>
這兩個標(biāo)簽都是用于描述應(yīng)用所需要的硬件和軟件特性,以便防止應(yīng)用在沒有這些特性的設(shè)備上安裝。<uses-configuration>標(biāo)簽中,比如有些設(shè)備帶有D-pad或者Trackball這些特殊硬件,那么android:reqFiveWayNav屬性就需要設(shè)置為true;而如果有一些設(shè)備帶有硬件鍵盤,android:reqHardKeyboard也需要被設(shè)置為true。另外,如果設(shè)備需要支持藍(lán)牙,我們可以使用<uses-feature android:name="android.hardware.bluetooth" />來支持這個功能。這兩個標(biāo)簽主要用于支持一些特殊的設(shè)備中的應(yīng)用,兩個標(biāo)簽的語法范例分別如下。
<uses-configuration android:reqFiveWayNav=["true" | "false"]?
??? android:reqHardKeyboard=["true" | "false"]
??? android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
??? android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
??? android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />
<uses-feature android:name="string"
??? android:required=["true" | "false"]
??? android:glEsVersion="integer" />
<uses-library>
用于指定Android應(yīng)用可使用的用戶庫,除了系統(tǒng)自帶的android.app、android.content、android.view和android.widget這些默認(rèn)類庫之外,有些應(yīng)用可能還需要一些其他的Java類庫作為支持,這種情況下我們就可以使用<uses-library>標(biāo)簽讓ClassLoader加載其類庫供Android應(yīng)用運(yùn)行時用。<uses-library>標(biāo)簽的用法很簡單,以下是語法范例。
<uses-library android:name="string"
??? android:required=["true" | "false"] />
小貼士:
當(dāng)運(yùn)行Java程序時,首先運(yùn)行JVM(Java虛擬機(jī)),然后再把Java類加載到JVM里頭運(yùn)行,負(fù)責(zé)加載Java類的這部分就叫做ClassLoader。當(dāng)然,ClassLoader是由多個部分構(gòu)成的,每個部分都負(fù)責(zé)相應(yīng)的加載工作。當(dāng)運(yùn)行一個程序的時候,JVM啟動,運(yùn)行BootstrapClassLoader,該ClassLoader加載java核心API(ExtClassLoader和AppClassLoader也在此時被加載),然后調(diào)用ExtClassLoader加載擴(kuò)展API,最后AppClassLoader加載CLASSPATH目錄下定義的Class,這就是一個Java程序最基本的加載流程。
<supports-screens>
對于一些應(yīng)用或者游戲來說,只能支持某些屏幕大小的設(shè)備或者在某些設(shè)備中的效果比較好,我們就會使用<supports-screens>標(biāo)簽來指定支持的屏幕特征。其中比較重要的屬性包括:屏幕自適應(yīng)屬性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支持屬性,按屏幕渲染圖像屬性android:anyDensity以及最小屏幕寬度屬性android:requiresSmallestWidthDp等。<supports-screens>標(biāo)簽的語法范例如下。
<supports-screens android:resizeable=["true"| "false"]
??? android:smallScreens=["true" | "false"]
??? android:normalScreens=["true" | "false"]
??? android:largeScreens=["true" | "false"]
??? android:xlargeScreens=["true" | "false"]
??? android:anyDensity=["true" | "false"]
??? android:requiresSmallestWidthDp="integer"
??? android:compatibleWidthLimitDp="integer"
??? android:largestWidthLimitDp="integer"/>
<application>
應(yīng)用配置的根元素,位于<manifest>下層,包含所有與應(yīng)用有關(guān)配置的元素,其屬性可以作為子元素的默認(rèn)屬性,常用的屬性包括:應(yīng)用名android:label,應(yīng)用圖標(biāo)android:icon,應(yīng)用主題android:theme等。當(dāng)然,<application>標(biāo)簽還提供了其他豐富的配置屬性,由于篇幅原因就不列舉了,大家可以打開Android SDK文檔來進(jìn)一步學(xué)習(xí),以下是語法范例。
<application android:allowTaskReparenting=["true" | "false"]
??? android:backupAgent="string"
??? android:debuggable=["true" | "false"]
??? android:description="string resource"
??? android:enabled=["true" | "false"]
??? android:hasCode=["true" | "false"]
??? android:hardwareAccelerated=["true" | "false"]
??? android:icon="drawable resource"
??? android:killAfterRestore=["true" | "false"]
??? android:label="string resource"
??? android:logo="drawable resource"
??? android:manageSpaceActivity="string"
??? android:name="string"
??? android:permission="string"
??? android:persistent=["true" | "false"]
??? android:process="string"
??? android:restoreAnyVersion=["true" | "false"]
??? android:taskAffinity="string"
??? android:theme="resource or theme" >
... ...
</application>
<activity>
Activity活動組件(即界面控制器組件)的聲明標(biāo)簽,Android應(yīng)用中的每一個Activity都必須在AndroidManifest.xml配置文件中聲明,否則系統(tǒng)將不識別也不執(zhí)行該Activity。<activity>標(biāo)簽中常用的屬性有:Activity對應(yīng)類名android:name,對應(yīng)主題android:theme,加載模式android:launchMode(詳見2.1.3.4節(jié)),鍵盤交互模式android:windowSoftInputMode等,其他的屬性用法大家可以參考Android SDK文檔學(xué)習(xí)。另外,<activity>標(biāo)簽還可以包含用于消息過濾的<intent-filter>元素,當(dāng)然還有可用于存儲預(yù)定義數(shù)據(jù)的<meta-data>元素,以下是<activity>標(biāo)簽的語法范例。
<activity android:allowTaskReparenting=["true" | "false"]
??? android:alwaysRetainTaskState=["true" | "false"]
??? android:clearTaskOnLaunch=["true" | "false"]
??? android:configChanges=["mcc", "mnc", "locale",
??????? "touchscreen", "keyboard", "keyboardHidden",
??????? "navigation", "orientation", "screenLayout",
??????? "fontScale", "uiMode"]
??? android:enabled=["true" | "false"]
??? android:excludeFromRecents=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:finishOnTaskLaunch=["true" | "false"]
??? android:hardwareAccelerated=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"]
??? android:multiprocess=["true" | "false"]
??? android:name="string"
??? android:noHistory=["true" | "false"] ?
??? android:permission="string"
??? android:process="string"
??? android:screenOrientation=["unspecified" | "user" | "behind" |
??????? "landscape" | "portrait" |
??????? "sensor" | "nosensor"]
??? android:stateNotNeeded=["true" | "false"]
??? android:taskAffinity="string"
??? android:theme="resource or theme"
??? android:windowSoftInputMode=["stateUnspecified",
??????? "stateUnchanged", "stateHidden",
??????? "stateAlwaysHidden", "stateVisible",
??????? "stateAlwaysVisible", "adjustUnspecified",
??????? "adjustResize", "adjustPan"] >? ?
... ...
</activity>
<activity-alias>
Activity組件別名的聲明標(biāo)簽,簡單來說就是Activity的快捷方式,屬性android:targetActivity表示的就是其相關(guān)的Activity名,當(dāng)然必須是前面已經(jīng)聲明過的Activity。除此之外,其他比較常見的屬性有:Activity別名名稱android:name,別名開關(guān)android:enabled,權(quán)限控制android:permission等。另外,我們還需要注意的是,Activity別名也是一個獨(dú)立的Activity,可以擁有自己的<intent-filter>和<meta-data>元素,其語法范例如下。
<activity-alias android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permission="string"
??? android:targetActivity="string" >
... ...
</activity-alias>
<intent-filter>與<action>、<category>、<data>
<intent-filter>用于Intent消息過濾器的聲明,在前面的2.1.3.2節(jié)中我們已經(jīng)對Android應(yīng)用框架中的Intent消息作過比較詳細(xì)的介紹,我們了解到Intent消息對于Android應(yīng)用系統(tǒng)來說,是非常重要的“粘合劑”,<intent-filter>元素可以放在<activity>、<activity-alias>、<service>和<receiver>元素標(biāo)簽中,來區(qū)分可用于處理消息的Activity控制器、Service服務(wù)和廣播接收器Broadcast Receiver。另外,我們還知道Intent消息還包含有名稱、動作、數(shù)據(jù)、類別等幾個重要屬性。這點(diǎn)與該標(biāo)簽的寫法也有一定的關(guān)系,比如<intent-filter>中必須包含有<action>元素,即用于描述具體消息的名稱;<category>標(biāo)簽則用于表示能處理消息組件的類別,即該Action所符合的類別;而<data>元素則用于描述消息需要處理的數(shù)據(jù)格式,我們甚至還可以使用正則表達(dá)式來限定數(shù)據(jù)來源。當(dāng)然,這些元素和標(biāo)簽的具體用法我們還需要慢慢學(xué)習(xí),下面是標(biāo)準(zhǔn)<intent-filter>元素標(biāo)簽的語法范例。
<intent-filter android:icon="drawable resource"
??? android:label="string resource"
??? android:priority="integer" >
??? <action android:name="string" />
??? <category android:name="string" />
??? <data android:host="string"
??????? android:mimeType="string"
??????? android:path="string"
??????? android:pathPattern="string"
??????? android:pathPrefix="string"
??????? android:port="string"
??????? android:scheme="string" />
</intent-filter>
<meta-data>
用于存儲預(yù)定義數(shù)據(jù),和<intent-filter>類似,<meta-data>也可以放在<activity>、<activity-alias>、<service>和<receiver>這四個元素標(biāo)簽中。Meta數(shù)據(jù)一般會以鍵值對的形式出現(xiàn),個數(shù)沒有限制,而這些數(shù)據(jù)都將被放到一個Bundle對象中,程序中我們則可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo對象的metaData屬性中讀取。假設(shè)我們在一個Activity中定義了一個<meta-data>元素,相關(guān)示例用法如下。
<activity...>
??? <meta-data android:name="testData" android:value="Test Meta Data"></meta-data>
</activity>
ActivityInfo info = this.getPackageManager()
??? .getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
String testData = info.metaData.getString("testData");
System.out.println("testData:" + testData);
<service>
Service服務(wù)組件的聲明標(biāo)簽,用于定義與描述一個具體的Android服務(wù),主要屬性有:Service服務(wù)類名android:name,服務(wù)圖標(biāo)android:icon,服務(wù)描述android:label以及服務(wù)開關(guān)android:enabled等。關(guān)于Service服務(wù)組件的概念和用法請參考2.1.4.2節(jié)的內(nèi)容,以下是<service>標(biāo)簽的語法范例。
<service android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permission="string"
??? android:process="string" >
... ...
</service>
<receiver>
Boardcast Receiver廣播接收器組件的聲明標(biāo)簽,用于定義與描述一個具體的Android廣播接收器,其主要屬性和<service>標(biāo)簽有些類似:Boardcast Receiver接收器類名android:name,接收器圖標(biāo)android:icon,接收器描述android:label以及接收器開關(guān)android:enabled等。關(guān)于Boardcast Receiver廣播接收器組件的概念和用法請參考2.1.4.3節(jié)的內(nèi)容,以下是<receiver>標(biāo)簽的語法范例。
<receiver android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:icon="drawable resource"
??? android:label="string resource"
??? android:name="string"
??? android:permission="string"
??? android:process="string" >
... ...
</receiver>
<provider>與<grant-uri-permission>
除Activity、Service和Boardcast Receiver之外的另一個“四大組件”,也就是Content Provider內(nèi)容提供者的聲明標(biāo)簽。關(guān)于內(nèi)容提供者組件的概念和用法請參考2.1.4.4節(jié)的內(nèi)容,不再贅述。<provider>標(biāo)簽除了和其他組件相同的android:name、android:icon和android:label等基礎(chǔ)屬性之外,還提供了用于支持其功能的特殊屬性,如:內(nèi)容提供者標(biāo)識名稱android:authorities,對指定URI授予權(quán)限標(biāo)識android:grantUriPermission以及具體的讀、寫權(quán)限,即android:readPermission和android:writePermission等。當(dāng)然,這些屬性的具體用法我們還需要慢慢學(xué)習(xí),以下是<provider>標(biāo)簽的語法范例。
<provider android:authorities="list"
??? android:enabled=["true" | "false"]
??? android:exported=["true" | "false"]
??? android:grantUriPermissions=["true" | "false"]
??? android:icon="drawable resource"
??? android:initOrder="integer"
??? android:label="string resource"
??? android:multiprocess=["true" | "false"]
??? android:name="string"
??? android:permission="string"
??? android:process="string"
??? android:readPermission="string"
??? android:syncable=["true" | "false"]
??? android:writePermission="string" >
... ...
</provider>
原文:http://blog.chinaunix.net/uid-9185047-id-3460344.html
總結(jié)
以上是生活随笔為你收集整理的AndroidManifest.xml配置文件属性详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring 3.x MVC 图解MV
- 下一篇: Android快捷键