【The Manifest File】 在Android系統(tǒng)能夠啟動(dòng)一個(gè)應(yīng)用程序組件之前,系統(tǒng)必須通過閱讀應(yīng)用程序AndroidManifest.xml文件來知道組件的存在。你的應(yīng)用程序必須聲明它所有的組件在這個(gè)文件中,必須放在應(yīng)用程序項(xiàng)目根目錄。 Manifest文件做一系列事情包括聲明應(yīng)用程序組件,例如: 1、認(rèn)證任何應(yīng)用程序請(qǐng)求的用戶權(quán)限,例如網(wǎng)絡(luò)訪問或者讀用戶聯(lián)系人的權(quán)限。 2、聲明應(yīng)用程序所需要的最小的API級(jí)別。 3、聲明該應(yīng)用程序使用的硬件或軟件的特點(diǎn),例如攝像頭、藍(lán)牙或多等觸摸。 4、需要鏈接的API庫,例如Google Maps Library。 5、其它 【Declareing components】 Manifest的主要的任務(wù)是通知系統(tǒng)關(guān)于應(yīng)用程序的組件信息。例如,一個(gè)manifest文件可以聲明一個(gè)activity像下面這樣:
在<application>元素中,android:icon屬性指定一個(gè)用來標(biāo)識(shí)應(yīng)用程序的圖標(biāo)。 在<activity>元素中,android:name屬性指明了Activity子類的全稱,android:label屬性指定一個(gè)字符串作為用戶可見的activity標(biāo)簽。 你必須像下面一樣聲明所有的應(yīng)用程序組件: 1、<activity>元素聲明activities 2、<service>元素聲明services 3、<receiver>元素聲明broadcast receivers 4、<provider>元素聲明content provider 你代碼中無聲明的Activities、services、和content providers對(duì)系統(tǒng)是不可見的,并且相反地,永遠(yuǎn)都無法運(yùn)行??墒牵琤roadcast receivers可以被聲明在manifest中或者用代碼動(dòng)態(tài)(就像BroadcastReceiver對(duì)象)并且注冊(cè)進(jìn)系統(tǒng)通過registerReceiver()。 【Declaring component capabilities】 就像上面討論的,在activiting組件,你可以使用Intent來啟動(dòng)activities、service、和broadcast receiver。你可以通過顯示地命名目標(biāo)組件(使用組件類名)在intent中。然而,intent的真下能力在于intent actions的概念。在intent actions,你簡(jiǎn)單的描述你想要執(zhí)行的動(dòng)作類型(或者是你希望實(shí)現(xiàn)操作的數(shù)據(jù))并且允許系統(tǒng)找一個(gè)設(shè)備上的組件來實(shí)現(xiàn)action并且啟動(dòng)它。如果有多個(gè)組件能完成那個(gè)intent描述的動(dòng)作,那么由用戶選擇哪一個(gè)來用。(PS:像windows注冊(cè)表和擴(kuò)展名的概念) 系統(tǒng)辨別哪個(gè)組件能響應(yīng)一個(gè)intent通過比較intent filters,被設(shè)備上的其它應(yīng)用程序的manifest文件提供。 當(dāng)你在應(yīng)用程序manifest中聲明一個(gè)組件時(shí),你可選的可以包含intent filters,用來聲明你組件的能力,以致它可以響應(yīng)來自其它應(yīng)用程序的intent。你可聲明一個(gè)intent filter給你的組件通過添加<intent-filter>元素作為組件聲明元素的子元素。 例如,一個(gè)郵件應(yīng)用程序有一個(gè)activity用來組建一個(gè)新郵件,或者會(huì)聲明一個(gè)intent filter在它的manifest入口點(diǎn)來響應(yīng)"發(fā)送"intents(為了發(fā)送郵件)。那一個(gè)Activity在你應(yīng)用程序里可以創(chuàng)建一個(gè)intent帶上“發(fā)送”動(dòng)作(ACTION_SEND),系統(tǒng)匹配郵件應(yīng)用程序的“發(fā)送”activity,然后用startActivity()啟動(dòng)它。 【Declaring application requirements】 有各種各樣的設(shè)備被Android管理,并不是他們中的所有都提供相同的特點(diǎn)和能力。為了防止你的應(yīng)用程序安裝在缺少設(shè)備環(huán)境的機(jī)器上,所以清晰的定義一個(gè)你的應(yīng)用需要的設(shè)備和軟件要求在你的manifest中顯得非常重要。它們中大多數(shù)只是傳達(dá)信息,系統(tǒng)不會(huì)閱讀它們,但是外部services例如Android Market會(huì)閱讀他們目的是給用記提供過濾當(dāng)他們搜索應(yīng)用程序在他們的機(jī)器上時(shí)?! ?/p> 例如,如果你的應(yīng)用程序要求一個(gè)攝像頭然后使用2.1的API(Level 7),你應(yīng)該聲明 這些作為要求在你的manifest文件里。這樣的話,沒有攝像頭的和Android version小于2.1的機(jī)器就不能安裝Android Market。 可是,你也可以聲明你的應(yīng)用程序使用攝像頭,但并不一定要求。在這種情況下,你的應(yīng)用程序在運(yùn)行時(shí)會(huì)檢查以決定是不否這個(gè)設(shè)備有一個(gè)攝像頭并且關(guān)閉所有使用使用攝像頭的功能在沒有攝像頭的情況下。 下面是一些重要的設(shè)備特性你應(yīng)該考慮的在你設(shè)計(jì)和開發(fā)你的應(yīng)用程序的時(shí)候。 1、Screen size and density 為了分類設(shè)備的屏幕類型,Android為每種設(shè)備定義了兩種屬性:屏幕大小(屏幕物理尺寸)和屏幕分辨率(屏幕物理像素密度或每英寸DPI-DOT)。為了簡(jiǎn)化各種類型屏幕的配置,Android系統(tǒng)把他們生來可選擇的組讓他們更容易被定位。 屏幕大小是:small, normal, large 和extra larege. 屏幕分辨率是:low density, medium density, hidensity 和extra hight density 默認(rèn),你的應(yīng)用程序兼容所有的屏幕大小和分辨率,因?yàn)閍ndroid系統(tǒng)生成全適的調(diào)整對(duì)你的UI布局和圖像資源??墒牵銘?yīng)該建立獨(dú)特的布局為某一種特定的屏幕大小并且提供特定的圖片為特定的密度,使用可選的布局和資源,并且聲明在你的manifest文件中哪個(gè)屏幕大小你的應(yīng)用程序支持通過<support-screens>元素。 2、Input configurations 3、Device features 會(huì)有很多的硬件和軟件特性可能存在或不存在在一個(gè)給定的android設(shè)備上,例如攝像頭、光感器、藍(lán)牙、某種版本的OpenGL、或者是觸摸屏的精確性。你應(yīng)該永遠(yuǎn)不假設(shè)某種特性在Android設(shè)備上具有(不是說標(biāo)準(zhǔn)Android庫),所以你應(yīng)該聲明任何特點(diǎn)你應(yīng)用程序會(huì)使用到的通過<uses-feature>元素。 4、Platform Version 你聲明所有的要求為你的應(yīng)用程序非常重要,因?yàn)?,?dāng)你發(fā)布你的應(yīng)用程序在Android Market時(shí),Market使用這些聲明來過濾哪些程序在各個(gè)設(shè)備上是可用的。這校報(bào)話,你的應(yīng)用程序?qū)⒊霈F(xiàn)在符合你所有要求的設(shè)備上。 |
|