檔案
每個安卓應用程式必須有一個AndroidManifest.xml檔案,在app/manifests目錄中。它在簡單的Android系統的套用中提出了重要的信息,信息系統必須具備之前,它可以運行任何應用程式的代碼。除其他事項外,清單中執行下列操作:
它給應用程式的Java包命名,包的名稱作為應用程式的唯一標識符。
它描述了應用程式的組件的活動、服務,廣播接收機,內容提供商,應用程式組成。它命名的類,實現每個組件,並出版自己的能力(例如,可以處理哪些意圖的訊息)。這些聲明讓Android系統知道這些組件是什麼和在什麼條件下,他們可以推出。
它決定哪些進程將運行應用程式組件。
它決定了應用程式必須有許可權才能訪問受保護的API部分,並與其他應用程式進行互動。
它還決定了其他人與應用程式的組件互動所需要的許可權。
它宣布了Android API的應用程式需要的最低水平。
它列出了庫,應用程式必須與之配對。
結構
下圖顯示了manifest檔案和每一個元素,它可以包含的一般結構。每個元素,連同其所有屬性記錄在一個單獨的檔案。要查看有關的任何元素的詳細信息,單擊圖中的元素的名稱,在按字母順序排列的列表,如下圖,或任何其他元素的名稱提到的元素。
<?XML版本= “1.0” 編碼= “UTF-8” ?>
<manifest>
<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<supports-screens/>
<compatible-screens/>
<supports-gl-texture/
的<application><activity><intent-filter>行動< />< 類別><數據/></意圖過濾器><元數據/></活動><activity-alias><intent-filter>。。。過濾器><元數據/></活動別名>的<service><intent-filter>。。。過濾器><meta-data/></服務><receiver><intent-filter>。。。過濾器><元數據/></接收器>的<provider><贈款URI許可權/>< 元數據></供應商><用途庫/></申請></清單>
下面列出的所有元素可以出現在manifest檔案中按字母順序排列。這是唯一合法的元素,你不能添加自己的元素或屬性。
<action>
<activity>
<activity-alias>
<application>
<category>
<data>
<grant-uri-permission>
<instrumentation>
<intent-filter>
<manifest>
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-library>
<uses-permission>
<uses-sdk>
約定
一些公約和規則普遍適用於清單中的所有元素和屬性:
分子
只有 <manifest>和 的<application> 元素是必需的,他們每人必須在場,並只能出現一次。大多數人可以出現多次或根本沒有-但至少他們中的一些必須完成任何有意義的清單。如果一個元素包含任何東西,它包含其他元素。通過屬性值設定,而不是作為一個元素內的字元數據。
一般不會下令在同一級別的元素。例如, <activity>的<provider>,和 的<service> 元素可以以任何順序混合。(一個 <activity-alias> 元素是此規則的例外:必須遵循 <activity>, 它是一個別名。)
屬性
在正式意義上說,所有的屬性都是可選的。不過,也有一些必須指定為元素,以實現其目的。使用的檔案,作為指導。對於真正的可選屬性,它提到一個默認值或規範的情況下發生的事情。除了 根屬性 <manifest> 元素,所有的屬性名與Android的開始:前綴-例如,機器人:alwaysRetainTaskState。因為前綴是普遍的,一般的檔案時忽略它指屬性的名字。
名稱
許多元素對應到Java對象,包括應用程式本身的元素( 的<application> 元素),其主要成分-活動(<activity>),服務(的<service>),廣播接收機(<receiver>),內容提供商(的<provider>)。如果你定義一個子類,子類,你幾乎總是會活動,服務, BroadcastReceiver,和ContentProvider的組件類()被宣布通過名稱屬性。該名稱必須包括完整的包指定。例如,一個服務子類可以聲明如下:
<清單。。> <應用程式。。> <服務機器人:名稱= “com.example.project.SecretService”。。。>。。。</服務>。。。</申請> </清單>然而,作為一個縮寫,如果字元串的第一個字元是一個句號,該字元串附加到應用程式的包名(由指定<manifest> 元素的 包 屬性)。上面是相同的分配如下:
<清單的包= “com.example.project”。。> <應用程式。。> <服務機器人:名稱= “。SecretService”。。。>。。。</服務>。。。</申請> </清單>Android的組件啟動時,創建一個命名的子類的實例。如果沒有指定一個子類,它創建一個基類的實例。
多個值
如果可以指定多個值,元素幾乎總是重複的,而不是在一個單一的元素列出多個值。例如,一個意圖過濾器可以列出幾個動作:<意圖過濾器。。。。。</意圖過濾器> 資源值一些屬性,可以向用戶顯示的值 - 例如,一個標籤和一個活動的圖示。這些屬性的值應本地化,因此從資源或主題。資源值表示在下面的格式,[包:]類型:名稱
如果資源是在應用程式相同的包, 其中包名稱可以省略,類型是一個類型的資源-如“串”或“繪製” -名稱是名稱標識的特定資源。例如:
< 活動:圖示= “@繪製/ smallPic”。。。>以類似的方式表達主題值,但與最初的“ ? “ 而不是“ @ “:
[包:]類型:名稱
字元串 值如果屬性值是一個字元串,雙反斜槓(' \ \ ')必須使用轉義字元-例如,“ \ \ N “一個換行符或” \ \ uxxxx“的Unicode字元。
功能
以下各節描述了一些Android的功能是如何體現在manifest檔案中。
意圖過濾器
應用程式(它的活動,服務和廣 播接收機)的核心部件,被激活的意圖。意圖是信息(捆綁意向書,描述了一個理想的行動對象) -包括要採取行動時,組件類別的數據,應執行的行動,和其他有關說明。機器人找到一個合適的組件回應的意圖,啟動一個新的組件實例,如果需要的話,它傳遞的Intent對象。
組件宣傳他們的能力-他們能夠應對各種意圖的意圖過濾器 -通過。由於Android系統必須學習一個組件可以處理其中的意圖之前推出的組件,意圖過濾器指定在清單 <intent-filter> 元素。一個組件可以有任何數量的過濾器,每一個不同的能力。
意圖明確命名一個目標組件將激活該組件;過濾器並沒有起到作用。但意圖不指定目標的名字,可以激活一個組件,只有當它可以通過組件的過濾器之一。
意向對象是如何對意圖過濾器測試的信息,看到一個單獨的檔案, 意圖和意圖過濾器。
圖示和標籤
一些元素可以向用戶顯示一個小圖示和文本標籤的圖示和標籤屬性。有些也有 描述較長的說明性文本,也可以在螢幕上顯示的屬性。例如,在 <permission> 元素具有所有這三個屬性,這樣當用戶詢問是否要授予應用程式的許可權要求,一個圖示代表的許可權,許可權的名稱,描述它需要什麼都可以呈現給用戶。
在任何情況下,包含元素的圖示,並在標籤集變成默認的 圖示和標籤設定為容器的所有子元素。因此,在設定的<application> 元素的圖示和標籤 是默認的圖示,並為每個應用程式的組件標籤。同樣,圖示和標籤組件集-為例如, <activity>的 元素-每個組件的默認設定 <intent-filter>的 元素。如果 的<application> 元素設定一個標籤,而是一種活動,其意圖過濾器沒有做,被視為應用程式標籤的活動和意圖過濾器的標籤。
被用來代表一個組件時,該組件實現廣告過濾器的功能,向用戶意圖過濾器設定的圖示和標籤。例如,一個“過濾器android.intent.action.MAIN “和” android.intent.category.LAUNCHER “設定廣告作為一個,啟動一個應用程式的活動-即是,作為一個在應用程式啟動器應顯示。在過濾器中設定的圖示和標籤,因此在發射器上顯示的。
許可權
一個許可權是一種限制,限制訪問代碼的一部分,或在設備上的數據。施加的限制,以保護關鍵數據和代碼可能被濫用,扭曲或損害了用戶體驗。
每個許可權確定一個唯一的標籤。標籤往往表示,這是限制的行動。例如,這裡是由Android定義了一些許可權:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一個功能可以保護最多一個許可權。
如果應用程式需要訪問許可權保護功能,它必須聲明,它需要 在清單與許可權 <uses-permission>的元素。然後,在設備上安裝應用程式時,安裝程式決定是否批准或者不批准通過檢查當局簽署的應用程式的證書,並在某些情況下,要求用戶請求的許可權。如果被授予的許可權,應用程式能夠使用的保護功能。如果沒有,只會失敗,沒有任何通知用戶試圖訪問這些功能。
應用程式還可以保護自己的組件(活動,服務,廣播接收機,內容提供商)與許可權。它可以採用任何定義的Android(在列出的許可權 android.Manifest.permission)或其他應用程式申報。或者也可以定義自己的。一個新的許可權宣布與 <permission> 元素。例如,一個活動可以保護如下:
<清單。。>:許可機器人:名稱= “com.example.project.DEBIT_ACCT。。/> <用途許可機器人:名稱= “com.example.project.DEBIT_ACCT” />。。。<應用程式。。。。>。。。</活動> </申請> </清單>請注意,在這個例子中,DEBIT_ACCT許可不僅宣布 <permission> 元素,它的使用也要求與 <uses-permission> 元素。為了應用程式的啟動保護活動的其他組成部分,必須要求其使用,即使是由應用程式本身施加保護。
同樣的例子,如果在宣布在別處(例如作為android.permission.CALL_EMERGENCY_NUMBERS許可權,許可權屬性設定,它不會有必要宣布它再次 <permission> 元素,但它仍然會一直有必要要求其與使用 <uses-permission>。
<permission-tree> 元素聲明為一組,將在代碼中定義的許可權的命名空間。和 <permission-group> 定義為一組的許可權(包括那些與艙單申報的標籤 <permission> 元素和那些宣布在別處)。它的影響只有許可權如何分組時,呈現給用戶。 <permission-group> 元素沒有指定屬於該組的許可權;它只是給該組的名稱。許可權被放置在該組分配的<permission> 元件的 permissionGroup, 屬性組的名稱。
庫
每一個應用程式連線到默認的Android庫,其中包括建築套用(如活動,服務,意圖,查看“按鈕,套用,ContentProvider的,等通用類)的基本包。
然而,一些軟體包駐留在自己的圖書館。如果您的應用程式使用這些包有任何的代碼,它必須明確要求對他們聯繫。艙單必須包含單獨 <uses-library> 元素,每個命名的圖書館。(庫的名稱,可以發現在檔案包)。
MANIFEST 系統檔案
C:\WINDOWS\WinSxS\Manifests\下有許多XML格式的manifest檔案,這些是服務端的程式清單。WinSxs是windows XP以上版本提供的非託管並行快取,裡面安裝了各種版本的經過強檔案名稱簽名的系統庫,這些檔案正是標註了系統中的強檔案名稱簽名,如果與manifest 清單裡面所列出的依賴項對上的話,就會被載入。
C:\WINDOWS\WinSxS\Manifests\是一個重要的系統資料夾,不能刪除!