清單文件The AndroidManifest.xml Fileandroid
每一個應用程序都有一個AndroidManifest.xml文件(必定是這個名字)在它的根目錄裏。這個清單文件給Android系統提供了關於這個應用程序的基本信息,系統在能運行任何程序代碼以前必須知道這些信息。AndroidManifest.xml主要包含如下功能:app
命名應用程序的Java包,這個包名用來惟一標識應用程序;
描述應用程序的組件-活動,服務,廣播接收者,以及組成應用程序的內容提供器;對實現每一個組件和公佈其能力(好比,能處理哪些意圖消息)的類進行命名。這些聲明使得Android系統瞭解這些組件以及在什麼條件下能夠被啓動;
決定應用程序組件運行在哪一個進程裏面;
聲明應用程序所必須具有的權限,用以訪問受保護的部分API,以及和其它應用程序交互;
聲明應用程序其餘的必備權限,用以組件之間的交互;
列舉測試設備Instrumentation類,用來提供應用程序運行時所需的環境配置及其餘信息,這些聲明只在程序開發和測試階段存在,發佈前將被刪除;
聲明應用程序所要求的Android API的最低版本級別;
列舉application所須要連接的庫;
ide
清單文件結構Structure of the Manifest File函數
下面的圖表顯示了清單文件的基本結構以及它能包含的全部元素。每一個元素,和它全部的屬性,在一個單獨的文件中完整描述。要查看任何元素的細節信息,可在圖表下方的以字符序排列的元素列表中點擊其元素名稱。測試
全部清單文件中可能出現的元素按字符序排列以下。只有這些元素是合法的,你不能添加本身的元素或屬性:對象
文件約定File Conventionsblog
下面是一些清單文件中適用於全部元素和屬性的約定和規則:
元素Elements:
在全部的元素中只有
屬性Attributes:
正規意義上,全部的屬性都是可選的,但實際上有些屬性是必須爲一個元素指定來完成其目標。把這篇文檔看成一個指南。對於那些真正可選的屬性,即便不存在一個規格,也會有默認的數值或狀態。
除了根元素
聲明類名Declaring class names:
不少對應於Java對象的元素,包括應用程序本身(
若是你定義一個子類,就像你將常常爲組件類(Activity, Service, BroadcastReceiver, 和ContentProvider)所作的那樣,這個子類經過一個名字屬性來聲明。這個名字必須包含完整的包名稱。好比,一個服務Service子類可能會聲明以下:
. . .
. . .
不過,做爲類名的簡寫,若是這個字符串的第一個字符是一個點號「.」,那麼這個字符串將被擴展到應用程序包名的後面(正如
. . .
. . .
當啓動一個組件時,Android建立了一個命名子類的實例。若是沒有指定一個子類,它建立基類的一個實例。
多數值項Multiple values:
若是某個元素有超過一個數值,這個元素幾乎老是須要被重複聲明,而不能將多個數值項列舉在一個屬性中。好比,一個意圖過濾器能夠列舉多個動做:
. . .
資源項Resource values:
一些屬性有能顯示給用戶的數值-好比,活動(activity)的一個標籤和圖標。這些屬性的值應該被本地化,從一個資源或主題中設置。當須要引用某個資源時,採用以下的表述格式:
@[package:]type:name
這裏package名稱能夠被忽略,要是資源和應用程序在同一個包裏的話;type是資源的類型-如"string"或"drawable"-並且name是用來標識特定資源的名字。例如
從主題獲取的數據以相似的方式表述,不過以'?'而不是'@'開頭。
?[package:]type:name
字符串值String values:
若是屬性值是一個字符串,則必須使用雙反斜槓('\\')來表示escape('\')字符;第一個反斜槓起轉義字符的做用)。好比,'\ '表示換行或'\\uxxxx'表示一個Unicode字符。
文件特性File Features
下面的章節描述了一些Android特性如何被映射到清單(manifest)文件中。
意圖過濾器Intent Filters
應用程序的核心組件(活動,服務和廣播接收器)經過意圖被激活。意圖是描述指望動做的信息包(一個Intent 對象)-包括要操做的數據,執行該動做的組件類別,以及其餘有關指令。Android尋找一個合適的組件來響應這個意圖,若是須要會啓動這個組件一個新的實例,並傳遞給這個意圖對象。
組件經過意圖過濾器(intent filters)通告它們所具有的能力-能響應的意圖類型。因爲Android系統在啓動一個組件前必須知道該組件可以處理哪些意圖,那麼意圖過濾器須要在manifest中以
一個顯式命名目標組件的意圖將會激活那個組件;過濾器不起做用。可是一個沒有指定目標的意圖只在它可以經過組件過濾器任一過濾器時才能激活該組件。
請查看關於意圖和意圖過濾器的文檔以獲取更多信息:Intents and Intent Filters.
圖標和標籤Icons and Labels
許多元素有圖標(icon)和標籤(label)屬性。其中一些還有一個描述(description)屬性,能夠用更長的解釋性文字呈現給用戶。好比,
全部的狀況中,設置在一個包含元素裏的圖標和標籤會成爲該容器全部子元素的缺省設置。這樣,在
當呈現給用戶的組件實現一個意圖過濾器公告的函數時,爲這個過濾器設置的圖標和標籤將被用來表明這個組件。好比,一個設置了"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"的過濾器公告了一個活動來初始化應用程序-也就是,會被顯示在應用程序啓動器中。所以設置在過濾器中的圖標和標籤也就是顯示在啓動器裏的那些圖標和標籤。
許可Permissions
一個許可(permission)是代碼對設備上數據的訪問限制。這個限制被引入來保護可能會被誤用而曲解或破壞用戶體驗的關鍵數據和代碼。
每一個許可被一個惟一的標籤所標識。這個標籤經常指出了受限的動做。例如,下面是一些Android定義的許可:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一個功能(feature)最多隻能被一個權限許可保護。
若是一個應用程序須要訪問一個須要特定權限的功能,它必須在manifest文件中使用
應用程序還能夠經過權限許可來保護它本身的組件(活動,服務,廣播接收器,和內容提供器)。它能夠利用Android已經定義(列在android.Manifest.permission裏)或其餘應用程序已聲明的權限許可。或者定義本身的許可。一個新的許可經過
. . .
android:permission="com.example.project.DEBIT_ACCT"
. . . >
. . .
. . .
. . .
注意,在這個例子裏,這個DEBIT_ACCT 許可並不是僅僅在
若是,就在這個例子裏,這個permission 屬性被設置爲在其餘地方聲明的權限許可(例如android.permission.CALL_EMERGENCY_NUMBERS,它將不須要再次聲明它,可是,它仍然須要經過
這個
庫Libraries
每一個應用程序都連接到缺省的Android庫,這個庫包含了基礎應用程序開發包(實現了基礎類如活動,服務,意圖,視圖,按鈕,應用程序,內容提供器,等等)
然而,一些包處於它們本身的庫中。若是你的應用程序使用了其餘開發包中的代碼,它必須顯式的請求連接到它們。這個manifest必須包含一個單獨的
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/iefreer/archive/2009/09/10/4540172.aspx