應用清單
每個應用程序都必須在其根目錄中的Andr??oidManifest.xml文件(正是名)。清單文件提供了關於您的應用程序到Android系統,該系統必須具備才可以運行任何應用程序的代碼信息的基本信息。除其他事項外,清單執行以下操作:
它的名字的Java包的應用程序。該包名作為應用程序的唯一標識符。
它描述了應用程序的組件 - 該應用程序是由活動,服務,廣播接收機,和內容提供商。它指定了實現每個組件並公布它們的能力(例如,其意圖的消息,他們可以處理)類。這些聲明使Android系統知道這兒有什麼組件和下它們可以被載入什麼條件。
它決定那些進程將容納應用程序組件。
它聲明其權限的應用程序必須擁有訪問API的被保護部分,並與其他應用程序進行交互。
它也聲明了其他需要有以與應用程序的組件進行交互的權限。
它列出了Instrumentation類,可以在應用程序運行時提供簡檔和其他信息。這些聲明出現在清單中僅當應用程序被開發和測試;在應用程序發布之前他們刪除。
它聲明應用程序所需的Andr??oid API的最低水平。
它列出了該應用程序必須鏈接的庫。
清單文件的結構
下面的圖顯示了清單文件,並且它可以包含每一元件的一般結構。每個元素,與所有它的屬性一起被記錄在全在一個單獨的文件中。要查看有關的任何元素的詳細信息,點擊該元素的名稱在圖中,在下面的圖,或元素名稱的任何其他提及的元素的字母順序排列。
?xml version="1.0" encoding="utf-8"?>
. . .
. . .
. . .
所有可以出現在manifest文件裡的元素按字母順序列出。這是唯一合法的元素;您不能添加自己的元素或屬性。
文件約定
一些約定和規則普遍適用於在清單中的所有元素和屬性:
分子
只有<清單>和<應用>元素是必需的,它們都必須存在,並且只能出現一次。大部分的人都可以發生多次或根本不出現 - 盡管至少他們中的一些必須存在的清單來完成任何有意義的事。
如果一個元素包含任何東西,它包含其他元素。所有值都通過屬性設置,而不是一個元素內的字符數據。
在同一水平的元素之間通常是無序。例如,<活動>,<提供商>和<服務>元素可以任意順序混合。 (安<活動別名>元素是例外:它必須遵循<活動>它是一個別名)。
屬性
在形式上,所有的屬性都是可選的。然而,也有一些必須為實現其目的的元件被指定。使用文件作為指導。對於真正的可選屬性,它記載了默認值或狀態在沒有規范的會發生什麼。
除了根<清單>元素的一些屬性,所有的屬性名開頭的機器人:前綴 - 例如,Android版:alwaysRetainTaskState。因為前綴是共通的,文件的名字提及一個屬性時忽略它。
聲明類名
許多元素對應的Java對象,包括應用程序本身(元素)和它的主要成分元素 - 活動(<活動>),服務(<服務>),廣播接收機(<接收>)和內容提供商(<提供商>)。
如果你定義一個子類,如同你總是會為組件類(活動,服務,廣播接收器和ContentProvider的),該子類通過一個name屬性聲明。該名稱必須包括完整的包。例如,一個服務子類可以聲明如下
. . .
. . .
但是,作為一個縮寫,如果字符串的第一個字符是句號,該字符串添加到應用程序的包名(由<清單>元素的package屬性指定)。以下分配是與上述相同的操作之一:
. . .
. . .
當開始一個部件,機器人創建名稱子類的實例。如果沒有指定一個子類,它創建的基類的一個實例。
多個值
如果可以指定一個以上的值,該元素將被重復,而不是一個單一的元素中列出的多個值。例如,一個意圖過濾器可以列出幾個動作:
. . .
資源值
一些屬性具有可以顯示給用戶的值 - 例如,一個標簽和一個活動的圖標。這些屬性的值應該被本地化,由一個資源或主題設置。資源值在以下格式表示,
@ [包:]類型:名稱
這兒,如果該資源在同一個包中的應用程序可以省略包名,類型是資源的種類 - 例如“string”或“繪” - 和名稱是標識特定資源的名稱。 例如:
從一個主題的值以類似的方式表示,但與初始“?”而不是 '@':
?[包:]類型:名稱
字符串值
當一個屬性值是一個字符串,反斜槓('\\')必須使用轉義字符 - 例如,'\\ n'但對一個新行或'\\ uxxxx'代表一個Unicode字符。
文件功能
下面的章節描述了一些Android功能是如何體現在manifest文件。
意圖過濾器
一個應用程序的核心組件(活動,服務和廣播接收器)被激活的意圖。一個意圖是信息描述所需的操作捆綁(一個Intent對象) - 包含了要執行的數據,分量應該執行的操作的類別,以及其他相關的說明。機器人定位一個適當的部件向意圖做出響應,啟動是否需要一個組件的一個新實例,並將其傳遞意圖對象。
組件公布其功能的 - 種意圖,他們可以回應 - 通過意圖過濾器。由於Android系統必須了解哪些主意,組件它啟動組件之前可以處理,意圖過濾器清單中指定為<意圖過濾器>元素。一個組件可以具有任何數量的過濾器,每一個描述一個不同的能力。
意圖明確指定了目標組件將激活該組件;過濾器不發揮作用。但是,這並不以名稱指定的目標的意圖可以激活僅當它可以穿過組件的過濾器中的一個組成部分。
關於intent對象如何對抗意圖過濾器進行測試的信息,請參閱單獨的文檔,意圖和意圖過濾器。
圖標和標簽
許多元素都有一個小圖標,可以顯示給用戶的文本標簽圖標和標簽的屬性。有些人也有,也可以在屏幕上顯示較長的說明性文字描述屬性。例如,在<權限>元件具有這三個屬性,從而當用戶被詢問是否許可授予已經請求它的應用程序,代表許可,許可的名稱和描述的圖標的它需要什麼都可以呈現給用戶。
在任何情況下,在一個包含元素的圖標和標簽設置成為所有容器的子元素的默認圖標和標簽設置。因此,在元素的圖標和標簽設置是每個應用程序的組件的默認圖標和標簽。同樣,圖標和標簽設置一個組件 - 例如,<活動>元素 - 是每個組件的<意向過濾>元素的默認設置。如果元素設置了一個標簽,但是activity和它的intent filter沒有,應用標簽將被視為標簽活動和意圖過濾兩種。
對於意圖濾波器中設定的圖標和標簽被用於每當組件被呈現給用戶作為滿足由過濾器發布的函數來表示的部件。例如,一個帶有“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”設置的filter的活動為一體,啟動一個應用程序 - 也就是說,作為一個應該被顯示在應用程序啟動器。因此,在過濾器中設置的圖標和標簽都顯示在啟動器的人。
權限
權限是對代碼的或在設備上的數據的一部分的限制的限制訪問。的限制,以保護關鍵數據和可能被濫用扭曲或破壞用戶體驗的代碼。
每個權限是由一個唯一的標簽識別。通常情況下,標簽表明是受限制的動作。例如,這裡是由Android定義的一些權限:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一個功能可以最多由一個權限進行保護。
如果應用程序需要訪問由權限保護的功能,它必須聲明它需要在清單的<使用許可權>元素的權限。然後,當安裝在設備上的應用程序,安裝程序判斷是否通過檢查簽名應用程序的證書,並且在一些情況下,當局,要求用戶授予所請求的權限。如果授予權限,應用程序能夠使用受保護的功能。如果沒有,嘗試訪問那些特性將直接失敗並且沒有任何通知給用戶。
應用程序還可以保護它自己的組件(活動,服務,廣播接收器,和內容提供商)的權限。它可以使用任何由Android(在android.Manifest.permission列出)定義或其他應用程序中聲明的權限。或者,它可以定義自己。一個新的許可申報與<許可>元素。例如,一個活動可以得到保護如下:
. . .
. . .
需要注意的是,在這個例子中,DEBIT_ACCT權限不僅與<權限>元素聲明,它的使用也要求與<用途-權限>元素。其使用必須請求,以便啟動保護的活動的應用程序的其它部件,即使保護是由應用自身強加的。
如果在相同的例子,許可屬性被設置為其他地方聲明權限(比如android.permission.CALL_EMERGENCY_NUMBERS,它不會有必要用<許可>元素再次聲明。但是,它仍然會被必要要求它的使用與<使用許可權>。
在<許可樹>元素為一組,將在代碼中被定義權限的命名空間。和<權限組>定義標簽一組權限(包括那些在清單與<許可>元素和其他那些宣稱聲明)。它僅影響如何呈現給用戶時的權限進行分組。在<權限組>元素不指定哪些許可屬於該組;它只是提供了一個組名。權限是通過分配組名稱為<許可>元素的permissionGroup屬性,放置在一組。
圖書館
每一個應用程序對默認的Andr??oid庫,其中包括用於構建應用程序的基本包聯(與普通類,如活動,服務,意圖,浏覽,按鈕,應用程序,ContentProvider的,等等)。
然而,一些軟件包駐留在自己的圖書館。如果應用程序使用任何這些軟件包的代碼,就必須明確要求對他們進行聯系。清單必須包含一個單獨的<用途庫>元素命名每個庫。 (庫名可以為包的文檔中找到。)
句法
name="string" />
包含於:
描述:
增加了一個意圖過濾器的操作。一個<意圖-filter>元素必須包含一個或多個<動作>元素。如果它不包含任何沒有意圖目的將通過過濾器得到的。請參閱有關意圖過濾器的細節和動作規格的過濾器中的作用意圖和意圖過濾器。
屬性:
android:name
動作的名稱。某些標准動作是在意圖類操作字符串常量定義。為了分配這些行動,這個屬性之一,在前面加上“android.intent.action”。到後面ACTION_字符串。例如,對於ACTION_MAIN,用“android.intent.action.MAIN”和ACTION_WEB_SEARCH,用“android.intent.action.WEB_SEARCH”。
對於您定義的動作,最好使用包名作為前綴,以確保其唯一性。例如,如下一個TRANSMOGRIFY操作可能指定: