之前在參加android的培訓時候有接觸過,不過當時沒有進一步了解,。在網(wǎng)上搜索了一下,,很多地方解釋太多,下面摘抄自培訓老師jollen的blog,,簡潔易懂: AndroidManifest.xml 是一個用來描述 Android 應用程式「整體資訊」的設定檔,。簡單來說,這是一個「自我介紹」檔,,我們可以向 Android 系統(tǒng)「介紹」我們的 Android 應用程式,,以便讓 Android 系統(tǒng)完整地了解我們的應用程式資訊。 在 [教學, #9] 中,,我們提及:「在這里修改 AndroidManifest.xml 的目的是為了『在我們的 Android 應用程式里加入一個 Service 類別』,,這樣才有辦法啟動 Service...」這個工作的目的是為了向 Android 系統(tǒng)做二項自我介紹。說明如下,。 1. 應用程式「實作了一個 MokoService 類別」 <application android:icon="@drawable/icon" android:label="@string/app_name"> ...
<service android:name=".MokoService"> ...
</service> ...
</application>
在 application 標簽里加入 ‘service’ 標簽,,告訴 Android 系統(tǒng)我們的應用程式有一個叫做「MokoService」的類別?!?b>android:name」屬性用來指定 Service 的類別名稱,,別忘了在 AndroidManifest.xml 里,類別名稱都是以「.」(小數(shù)點)開始,。 2. MokoService 類別可處理「com.moko.hello.START_MUSIC」意圖 <service android:name=".MokoService"> <intent-filter>
<action android:name="com.moko.hello.START_MUSIC" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter> </service>
在 service 標簽里加入 ‘intent-filter’ 標簽,,告訴 Android 系統(tǒng)我們的應用程式可「濾出」哪一個「Intent」,。在前面的教學里,我們把 Intent 暫時解釋為 Event(事件),;因此,,這里的「自我介紹」用意是為了告訴 Android 系統(tǒng),我們可接受的事件名稱為何,。 我們只要在 intent-filter 標簽里加入 ‘a(chǎn)ction’ 標簽,,并指定 action 標簽的 android:name 屬性即可。Intent 的命名規(guī)則為「xxx.yyy.NAME」的路徑命名法,。 當 Android 收到由 Activity 發(fā)出的 Intent 后,,便去找尋可處理 com.moko.hello.START_MUSIC 的類別,然后載入并啟動此類別,。 最后,,在 ’intent-filter’ 里加入 ‘category’ 標簽,用來定義 com.moko.hello.START_MUSIC 的分類,,在這里指定為預設類別 「android.intent.category.DEFAULT」,,這是一個 Android 定義的常數(shù)。完整的 Service 類別「自我介紹」標簽與屬性,,可參考 Android SDK 的說明,。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------ 每個Android的application都必須包含一個 AndroidManifest.xml,且文件名是固定的,,不能修改,。應用程序需要通過它向Android系統(tǒng)提供一些必需的信息,且需要在 application運行前提供給系統(tǒng)
一個常見的AndroidManifest.xml文件如下:
AndroidManifest.xml描述了該應用的相關信息,,主要包括以下各個元素:
A包名(package):指定本應用內(nèi)java主程序包的包名,。當沒有指定apk的文件名時,編譯后產(chǎn)生程序包將以此命名,。本包名應當在Android系統(tǒng)運行時唯一,。 B認證(certificate):指定本應用程序所授予的信任級別,目前有的認證級別有platform(system),、shared,、media以及應用自定義的認證。不同的認證可以享受不同的權限,。 C權限組(permission-group):權限組的定義是為了描述一組具有共同特性的權限,。 D權限(permission):權限用來描述是否擁有做某件事的權力。Android系統(tǒng)中權限是分級的,,前分為普通級別(Normal),,危險級別(dangerous),簽名級別(signature)和系統(tǒng)/簽名級別(signature or system),。系統(tǒng)中所有預定義的權限根據(jù)作用的不同,,分別屬于不同的級別。對于普通和危險級別的權限,,我們稱之為低級權限,,應用申請即授予。其他兩級權限,,我們稱之為高級權限或系統(tǒng)權限,,應用擁有platform級別的認證才能申請。當應用試圖在沒有權限的情況下做受限操作,,應用將被系統(tǒng)殺掉以警示,。系統(tǒng)應用可以使用任何權限。權限的聲明者可無條件使用該權限,。 E權限樹(permission-tree):權限樹的設置是為了統(tǒng)一管理一組權限,,聲明于該樹下的權限所有者歸屬該應用。系統(tǒng)提供了API,,應用可以在運行時動態(tài)添加,。 PackageManager.addPermission() F使用權限(uses-permission):應用需要的權限應當在此處申請,所申請的權限應當被系統(tǒng)或某個應用所定義,,否則視為無效申請,。同時,使用權限的申請需要遵循權限授予條件,,非platform認證的應用無法申請高級權限,。 GSDK(uses-sdk):標識本應用運行的SDK版本。高兼容性的應用可以忽略此項,。 Happlication:application是Android應用內(nèi)最高級別(top level)的模塊,,每個應用內(nèi)最多只能有一個application,如果應用沒有指定該模塊,,一個默認的application將被啟用,。 application將在應用啟動時最先被加載,并存活在應用的整個運行時生命周期,。因此一些初始化的工作適合在本模塊完成. Application元素有許多屬性,,其中:“persistent”表示本應用是否為常駐內(nèi)存,“enable”表示本應用當前是否應當被加載,。 Iactivity:activity 是application模塊的運行時子元素,,標識了一個UI。除了application,,一個應用可以聲明并實現(xiàn)零至多個其它運行時模塊,,activity也同樣。activity也包含了許多定義它工作狀態(tài)的屬性,,其中:“name”是必須的,,它指定了該activity所在的文件名,,如果該文件所屬包不同于該應用的包名(即本描述文件的最開始處),那么名字前面需要加入所在包名,。activity通過增加intent- fliter來標識哪些intent可以被處理,,同時intent也是調(diào)度activity的主要參數(shù)。 Jreceiver:receiver 也是application的運行時子元素,。receiver通過增加intent-fliter來標識它需要接受哪些intent,。當收到intent 后,receiver將根據(jù)不同的intent進行不同的處理,。當一個Intent發(fā)出后,,所有注冊了該intent的receiver都將會收到,系統(tǒng)會根據(jù)receiver在系統(tǒng)中的注冊次序順序發(fā)送,。當一個receiver處理完該Intent后,,系統(tǒng)才會向下一個receiver發(fā)送。當一個receiver有多個未接收的intent時,,將按照intent發(fā)送的次序順序接收,。 Kservice:service也是application的運行時子元素。Service屬于后臺模塊,,啟動后將長時間運行,,除非停止該service或所在應用進程被殺死。 Lprovider:provider 也是application的運行時子元素,。它繼承于ContentProvider,,是對該應用管理的用戶數(shù)據(jù)的結構化接入,是基于數(shù)據(jù)庫操作方式的封裝,。如果應用允許外部應用訪問/管理它的用戶數(shù)據(jù),,provider是Android平臺提供的最佳方式。 Mactivity-alias:顧名思義,,是已有activity的別名,。 Nuses-library:標識應用啟動所必須的共享庫。
每個元素節(jié)點都有對個屬性來描述該節(jié)點的信息,,最常用的屬性有:android:name=".MyName",定義了節(jié)點的文件名,,這些聲明的屬性共同構成了元素節(jié)點的信息。 例如:Activity的屬性常用的可能為android:name和android:label兩個,,但我們需要了解所有的屬性以幫助解決復雜的問題,,完整的如下: ·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描述。 |
|