2015-05-11 11:15:15 1577瀏覽
AndroidManifest.xml配置文件對(duì)于Android應(yīng)用開發(fā)來說是非常重要的基礎(chǔ)知識(shí),旨在總結(jié)該配置文件中重點(diǎn)的用法,以便日后查閱。下面是一個(gè)標(biāo)準(zhǔn)的AndroidManifest.xml文件樣例。
[html] view plaincopy
01.<?xml version="1.0" encoding="utf-8"?>
02.
03.<manifest>
04.
05. <!-- 基本配置 -->
06. <uses-permission />
07. <permission />
08. <permission-tree />
09. <permission-group />
10. <instrumentation />
11. <uses-sdk />
12. <uses-configuration />
13. <uses-feature />
14. <supports-screens />
15. <compatible-screens />
16. <supports-gl-texture />
17.
18. <!-- 應(yīng)用配置 -->
19. <application>
20.
21. <!-- Activity 配置 -->
22. <activity>
23. <intent-filter>
24. <action />
25. <category />
26. <data />
27. </intent-filter>
28. <meta-data />
29. </activity>
30.
31. <activity-alias>
32. <intent-filter> . . . </intent-filter>
33. <meta-data />
34. </activity-alias>
35.
36. <!-- Service 配置 -->
37. <service>
38. <intent-filter> . . . </intent-filter>
39. <meta-data/>
40. </service>
41.
42. <!-- Receiver 配置 -->
43. <receiver>
44. <intent-filter> . . . </intent-filter>
45. <meta-data />
46. </receiver>
47.
48. <!-- Provider 配置 -->
49. <provider>
50. <grant-uri-permission />
51. <meta-data />
52. </provider>
53.
54. <!-- 所需類庫(kù)配置 -->
55. <uses-library />
56.
57. </application>
58.
59.</manifest>
從以上示例代碼中,我們可以看出Android配置文件采用XML作為描述語(yǔ)言,每個(gè)XML標(biāo)簽都不同的含義,大部分的配置參數(shù)都放在標(biāo)簽的屬性中,下面我們便按照以上配置文件樣例中的先后順序來學(xué)習(xí)Android配置文件中主要元素與標(biāo)簽的用法。
<manifest>
AndroidManifest.xml配置文件的根元素,必須包含一個(gè)<application>元素并且指定xlmns:android和package屬性。xlmns:android指定了Android的命名空間,默認(rèn)情況下是“http://schemas.android.com/apk/res/android”;而package是標(biāo)準(zhǔn)的應(yīng)用包名,也是一個(gè)應(yīng)用進(jìn)程的默認(rèn)名稱,以本書微博應(yīng)用實(shí)例中的包名為例,即“com.app.demos”就是一個(gè)標(biāo)準(zhǔn)的Java應(yīng)用包名,我們?yōu)榱吮苊饷臻g的沖突,一般會(huì)以應(yīng)用的域名來作為包名。當(dāng)然還有一些其他常用的屬性需要注意一下,比如android:versionCode是給設(shè)備程序識(shí)別版本用的,必須是一個(gè)整數(shù)值代表app更新過多少次;而android:versionName則是給用戶查看版本用的,需要具備一定的可讀性,比如“1.0.0”這樣的。<manifest>標(biāo)簽語(yǔ)法范例如下。
為了保證Android應(yīng)用的安全性,應(yīng)用框架制定了比較嚴(yán)格的權(quán)限系統(tǒng),一個(gè)應(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)用的所需功能聲明了對(duì)應(yīng)的權(quán)
<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>
限,相關(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)用程序聲明某個(gè)權(quán)限,除非需要給其他應(yīng)用程序提供可調(diào)用的代碼或者數(shù)據(jù),這個(gè)時(shí)候你才需要使用<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)造更有層次的、更有針對(duì)性權(quán)限系統(tǒng)。<permission>標(biāo)簽語(yǔ)法范例如下。
<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測(cè)試類來監(jiān)控Android應(yīng)用的行為并應(yīng)用到相關(guān)的功能測(cè)試中,其中比較重要的屬性有:測(cè)試功能開關(guān)android:functionalTest,profiling調(diào)試功能開關(guān)android:handleProfiling,測(cè)試用例目標(biāo)對(duì)象android:targetPackage等。另外,我們需要注意的是Instrumentation對(duì)象是在應(yīng)用程序的組件之前被實(shí)例化的,這點(diǎn)在組織測(cè)試邏輯的時(shí)候需要被考慮到。<instrumentation>標(biāo)簽語(yǔ)法范例如下。
用于指定Android應(yīng)用中所需要使用的SDK的版本,比如我們的應(yīng)用必須運(yùn)行于Android 2.0以上版本的系統(tǒng)SDK之上,那么就需要指定應(yīng)用支持最小的SDK版本數(shù)為5;當(dāng)然,每個(gè)SDK版本都會(huì)有指定的整數(shù)值與之對(duì)應(yīng),比如我們最常用的Android 2.2.x的版本數(shù)是8。當(dāng)然,除了可以指定最低版本之外,<uses-sdk>標(biāo)簽還可以指定最高版本和目標(biāo)版本,語(yǔ)法范例如下。
<uses-sdk android:minSdkVersion
<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>
="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer" />
<uses-configuration>與<uses-feature>
這兩個(gè)標(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" />來支持這個(gè)功能。這兩個(gè)標(biāo)簽主要用于支持一些特殊的設(shè)備中的應(yīng)用,兩個(gè)標(biāo)簽的語(yǔ)法范例分別如下。
<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)用可使用的用戶庫(kù),除了系統(tǒng)自帶的android.app、android.content、android.view和android.widget這些默認(rèn)類庫(kù)之外,有些應(yīng)用可能還需要一些其他的Java類庫(kù)作為支持,這種情況下我們就可以使用<uses-library>標(biāo)簽讓ClassLoader加載其類庫(kù)供Android應(yīng)用運(yùn)行時(shí)用。<uses-library>標(biāo)簽的用法很簡(jiǎn)單,以下是語(yǔ)法范例。
<uses-library android:name="string"
android:required=["true" | "false"] />
AndroidManifest.xml應(yīng)用程序,對(duì)Android開發(fā)者來說簡(jiǎn)單易學(xué)。