之前在參加android的培訓時(shí)候有接觸過(guò),不過(guò)當時(shí)沒(méi)有進(jìn)一步了解。在網(wǎng)上搜索了一下,很多地方解釋太多,下面摘抄自培訓老師jollen的blog,簡(jiǎn)潔易懂:
AndroidManifest.xml 是一個(gè)用來(lái)描述 Android 應用程式「整體資訊」的設定檔。簡(jiǎn)單來(lái)說(shuō),這是一個(gè)「自我介紹」檔,我們可以向 Android 系統「介紹」我們的 Android 應用程式,以便讓 Android 系統完整地了解我們的應用程式資訊。
在 [教學(xué), #9] 中,我們提及:「在這里修改 AndroidManifest.xml 的目的是為了『在我們的 Android 應用程式里加入一個(gè) Service 類(lèi)別』,這樣才有辦法啟動(dòng) Service...」這個(gè)工作的目的是為了向 Android 系統做二項自我介紹。說(shuō)明如下。
1. 應用程式「實(shí)作了一個(gè) MokoService 類(lèi)別」
在 application 標簽里加入 ‘service’ 標簽,告訴 Android 系統我們的應用程式有一個(gè)叫做「MokoService」的類(lèi)別?!?b>android:name」屬性用來(lái)指定 Service 的類(lèi)別名稱(chēng),別忘了在 AndroidManifest.xml 里,類(lèi)別名稱(chēng)都是以「.」(小數點(diǎn))開(kāi)始。
2. MokoService 類(lèi)別可處理「com.moko.hello.START_MUSIC」意圖
在 service 標簽里加入 ‘intent-filter’ 標簽,告訴 Android 系統我們的應用程式可「濾出」哪一個(gè)「Intent」。在前面的教學(xué)里,我們把 Intent 暫時(shí)解釋為 Event(事件);因此,這里的「自我介紹」用意是為了告訴 Android 系統,我們可接受的事件名稱(chēng)為何。
我們只要在 intent-filter 標簽里加入 ‘a(chǎn)ction’ 標簽,并指定 action 標簽的 android:name 屬性即可。Intent 的命名規則為「xxx.yyy.NAME」的路徑命名法。
當 Android 收到由 Activity 發(fā)出的 Intent 后,便去找尋可處理 com.moko.hello.START_MUSIC 的類(lèi)別,然后載入并啟動(dòng)此類(lèi)別。
最后,在 ’intent-filter’ 里加入 ‘category’ 標簽,用來(lái)定義 com.moko.hello.START_MUSIC 的分類(lèi),在這里指定為預設類(lèi)別 「android.intent.category.DEFAULT」,這是一個(gè) Android 定義的常數。完整的 Service 類(lèi)別「自我介紹」標簽與屬性,可參考 Android SDK 的說(shuō)明。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
每個(gè)Android的application都必須包含一個(gè) AndroidManifest.xml,且文件名是固定的,不能修改。應用程序需要通過(guò)它向Android系統提供一些必需的信息,且需要在 application運行前提供給系統
一個(gè)常見(jiàn)的AndroidManifest.xml文件如下:

AndroidManifest.xml描述了該應用的相關(guān)信息,主要包括以下各個(gè)元素:
A包名(package):指定本應用內java主程序包的包名。當沒(méi)有指定apk的文件名時(shí),編譯后產(chǎn)生程序包將以此命名。本包名應當在Android系統運行時(shí)唯一。
B認證(certificate):指定本應用程序所授予的信任級別,目前有的認證級別有platform(system)、shared、media以及應用自定義的認證。不同的認證可以享受不同的權限。
C權限組(permission-group):權限組的定義是為了描述一組具有共同特性的權限。
D權限(permission):權限用來(lái)描述是否擁有做某件事的權力。Android系統中權限是分級的,前分為普通級別(Normal),危險級別(dangerous),簽名級別(signature)和系統/簽名級別(signature or system)。系統中所有預定義的權限根據作用的不同,分別屬于不同的級別。對于普通和危險級別的權限,我們稱(chēng)之為低級權限,應用申請即授予。其他兩級權限,我們稱(chēng)之為高級權限或系統權限,應用擁有platform級別的認證才能申請。當應用試圖在沒(méi)有權限的情況下做受限操作,應用將被系統殺掉以警示。系統應用可以使用任何權限。權限的聲明者可無(wú)條件使用該權限。
E權限樹(shù)(permission-tree):權限樹(shù)的設置是為了統一管理一組權限,聲明于該樹(shù)下的權限所有者歸屬該應用。系統提供了API,應用可以在運行時(shí)動(dòng)態(tài)添加。 PackageManager.addPermission()
F使用權限(uses-permission):應用需要的權限應當在此處申請,所申請的權限應當被系統或某個(gè)應用所定義,否則視為無(wú)效申請。同時(shí),使用權限的申請需要遵循權限授予條件,非platform認證的應用無(wú)法申請高級權限。
GSDK(uses-sdk):標識本應用運行的SDK版本。高兼容性的應用可以忽略此項。
Happlication:application是Android應用內最高級別(top level)的模塊,每個(gè)應用內最多只能有一個(gè)application,如果應用沒(méi)有指定該模塊,一個(gè)默認的application將被啟用。 application將在應用啟動(dòng)時(shí)最先被加載,并存活在應用的整個(gè)運行時(shí)生命周期。因此一些初始化的工作適合在本模塊完成. Application元素有許多屬性,其中:“persistent”表示本應用是否為常駐內存,“enable”表示本應用當前是否應當被加載。
Iactivity:activity 是application模塊的運行時(shí)子元素,標識了一個(gè)UI。除了application,一個(gè)應用可以聲明并實(shí)現零至多個(gè)其它運行時(shí)模塊,activity也同樣。activity也包含了許多定義它工作狀態(tài)的屬性,其中:“name”是必須的,它指定了該activity所在的文件名,如果該文件所屬包不同于該應用的包名(即本描述文件的最開(kāi)始處),那么名字前面需要加入所在包名。activity通過(guò)增加intent- fliter來(lái)標識哪些intent可以被處理,同時(shí)intent也是調度activity的主要參數。
Jreceiver:receiver 也是application的運行時(shí)子元素。receiver通過(guò)增加intent-fliter來(lái)標識它需要接受哪些intent。當收到intent 后,receiver將根據不同的intent進(jìn)行不同的處理。當一個(gè)Intent發(fā)出后,所有注冊了該intent的receiver都將會(huì )收到,系統會(huì )根據receiver在系統中的注冊次序順序發(fā)送。當一個(gè)receiver處理完該Intent后,系統才會(huì )向下一個(gè)receiver發(fā)送。當一個(gè)receiver有多個(gè)未接收的intent時(shí),將按照intent發(fā)送的次序順序接收。
Kservice:service也是application的運行時(shí)子元素。Service屬于后臺模塊,啟動(dòng)后將長(cháng)時(shí)間運行,除非停止該service或所在應用進(jìn)程被殺死。
Lprovider:provider 也是application的運行時(shí)子元素。它繼承于ContentProvider,是對該應用管理的用戶(hù)數據的結構化接入,是基于數據庫操作方式的封裝。如果應用允許外部應用訪(fǎng)問(wèn)/管理它的用戶(hù)數據,provider是Android平臺提供的最佳方式。
Mactivity-alias:顧名思義,是已有activity的別名。
Nuses-library:標識應用啟動(dòng)所必須的共享庫。
每個(gè)元素節點(diǎn)都有對個(gè)屬性來(lái)描述該節點(diǎn)的信息,最常用的屬性有:android:name=".MyName",定義了節點(diǎn)的文件名,這些聲明的屬性共同構成了元素節點(diǎn)的信息。
例如:Activity的屬性常用的可能為android:name和android:label兩個(gè),但我們需要了解所有的屬性以幫助解決復雜的問(wèn)題,完整的如下:
·android:allowTaskReparenting=["true" | "false"]
·android:alwaysRetainTaskState=["true" | "false"]
·android:clearTaskOnLaunch=["true"" | "false"]
·android:configChanges=[one or more of: "mcc" "mnc" "locale" "touchscreen" "keyboard" "keyboardHidden" "navigation" "orientation" "fontScale"]
·android:enabled=["true" | "false"]
·android:excludeFromRecents=["true" | "false"]
·android:exported=["true" | "false"]
·android:finishOnTaskLaunch=["true" | "false"]
·android:icon="drawable resource"
·android:label="string resource"
·android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"]
·android:multiprocess=["true" | "false"]
·android:name="string"
·android:noHistory=["true" | "false"]
·android:permission="string"
·android:process="string"
·android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nonsensor"]
·android:stateNotNeeded=["true" | "false"]
·android:taskAffinity="string"
具體屬性含義可參考SDK描述。
聯(lián)系客服