Android開發指南-框架主題-清單文件

清單文件The AndroidManifest.xml Fileandroid

每一個應用程序都有一個AndroidManifest.xml文件(必定是這個名字)在它的根目錄裏。這個清單文件給Android系統提供了關於這個應用程序的基本信息,系統在能運行任何程序代碼以前必須知道這些信息。AndroidManifest.xml主要包含如下功能:app

命名應用程序的Java包,這個包名用來惟一標識應用程序;
描述應用程序的組件-活動,服務,廣播接收者,以及組成應用程序的內容提供器;對實現每一個組件和公佈其能力(好比,能處理哪些意圖消息)的類進行命名。這些聲明使得Android系統瞭解這些組件以及在什麼條件下能夠被啓動;
決定應用程序組件運行在哪一個進程裏面;
聲明應用程序所必須具有的權限,用以訪問受保護的部分API,以及和其它應用程序交互;
聲明應用程序其餘的必備權限,用以組件之間的交互;
列舉測試設備Instrumentation類,用來提供應用程序運行時所需的環境配置及其餘信息,這些聲明只在程序開發和測試階段存在,發佈前將被刪除;
聲明應用程序所要求的Android API的最低版本級別;
列舉application所須要連接的庫;
 ide

清單文件結構Structure of the Manifest File函數

下面的圖表顯示了清單文件的基本結構以及它能包含的全部元素。每一個元素,和它全部的屬性,在一個單獨的文件中完整描述。要查看任何元素的細節信息,可在圖表下方的以字符序排列的元素列表中點擊其元素名稱。測試

 

 

   

   

   

   

 

   

 

   

 

   

 

       

           

               

               

               

           

           

       

 

       

            . . . .net

           

       

 

       

            . . . code

           

       

 

       

            . . . xml

           

       

 

       

           

           

       

 

       

         

 

   

 

全部清單文件中可能出現的元素按字符序排列以下。只有這些元素是合法的,你不能添加本身的元素或屬性:對象





















文件約定File Conventionsblog

下面是一些清單文件中適用於全部元素和屬性的約定和規則:

元素Elements:

在全部的元素中只有 是必需的,且只能出現一次。不少其餘元素能夠出現屢次甚或一次都沒有-儘管若是清單文件想要完成一些有意義的工做,必須設置至少其中的一些。若是一個元素包含點什麼,那就是包含其餘元素。全部的值必須經過屬性來設置,而不是元素中的字符數據。同一級別的元素通常是沒有順序的。好比, , , 和 元素能夠以任意順序混合使用。( 元素是個例外:它必須跟在該別名所指的 後面。)

屬性Attributes:

正規意義上,全部的屬性都是可選的,但實際上有些屬性是必須爲一個元素指定來完成其目標。把這篇文檔看成一個指南。對於那些真正可選的屬性,即便不存在一個規格,也會有默認的數值或狀態。

除了根元素 的一些屬性,全部其餘元素屬性的名字都是以android:做爲前綴的-好比, android:alwaysRetainTaskState。由於這個前綴是通用的,這篇文檔說起屬性名稱時通常會忽略它。

聲明類名Declaring class names:

不少對應於Java對象的元素,包括應用程序本身( 元素)以及它的基礎組件-活動( ),服務( ),廣播接收器( ),以及內容提供器( )。

若是你定義一個子類,就像你將常常爲組件類(Activity, Service, BroadcastReceiver, 和ContentProvider)所作的那樣,這個子類經過一個名字屬性來聲明。這個名字必須包含完整的包名稱。好比,一個服務Service子類可能會聲明以下:

   

       

            . . .

       

        . . .

   

不過,做爲類名的簡寫,若是這個字符串的第一個字符是一個點號「.」,那麼這個字符串將被擴展到應用程序包名的後面(正如 元素的package屬性所指明的那樣)。下面這個賦值和上面效果同樣:

   

       

            . . .

       

        . . .

   

當啓動一個組件時,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 許可並不是僅僅在 元素中聲明,它一樣聲明在 元素裏。爲了應用程序的其餘組件能夠啓動這個受保護的活動,必須請求它的使用(use),即便這個保護是應用程序本身引入的。

若是,就在這個例子裏,這個permission 屬性被設置爲在其餘地方聲明的權限許可(例如android.permission.CALL_EMERGENCY_NUMBERS,它將不須要再次聲明它,可是,它仍然須要經過 來請求它的使用。

這個 元素爲一組想在代碼中定義的權限許可聲明瞭一個命名空間。而 元素爲一系列許可定義了一個標籤(用 元素定義在manifest中的以及其餘地方聲明的)。它僅僅影響這些權限許可在顯示給用戶時如何分組。 元素並不指明哪一個權限屬於這個分組;它只是給這個組命名。一個權限許可經過給 元素的permissionGroup屬性賦予這個組名來放置到這個權限組中。

庫Libraries

每一個應用程序都連接到缺省的Android庫,這個庫包含了基礎應用程序開發包(實現了基礎類如活動,服務,意圖,視圖,按鈕,應用程序,內容提供器,等等)

然而,一些包處於它們本身的庫中。若是你的應用程序使用了其餘開發包中的代碼,它必須顯式的請求連接到它們。這個manifest必須包含一個單獨的 元素來命名每個庫。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/iefreer/archive/2009/09/10/4540172.aspx

相關文章
相關標籤/搜索