自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AndroidManifest.xml文件內容詳解

移動開發(fā) Android
AndroidManifest.xml是Android應用程序中最重要的文件之一。它是Android程序的全局配置文件,是每個 android程序中必須的文件。它位于我們開發(fā)的應用程序的根目錄下,描述了package中的全局數據,包括package中暴露的組件 (activities, services, 等等),以及他們各自的實現類,各種能被處理的數據和啟動位置等重要信息

一,重要性

AndroidManifest.xml是Android應用程序中最重要的文件之一。它是Android程序的全局配置文件,是每個 android程序中必須的文件。它位于我們開發(fā)的應用程序的根目錄下,描述了package中的全局數據,包括package中暴露的組件 (activities, services, 等等),以及他們各自的實現類,各種能被處理的數據和啟動位置等重要信息。

因此,該文件提供了Android系統(tǒng)所需要的關于該應用程序的必要信息,即在該應用程序的任何代碼運行之前系統(tǒng)所必須擁有的信息。

二,主要功能

它指定了該應用程序的Java包:該包名作為應用程序的一個獨特標識。

它描述了應用程序組件:該應用程序由哪些activity,service,broadcast receiver和content provider組成。它指定了實現每個組件的類以及公開發(fā)布它們的能力(例如,它們能持有哪個Intent信息)。這些聲明使Android系統(tǒng)知道這 兒有什么組件以及在什么條件下它們可以被載入。

它決定那些進程將容納應用程序組件。

它聲明了本應用程序必須擁有哪些許可,以便訪問API的被保護部分,以及與其他應用程序交互。

它也聲明了其他應用程序在和該應用程序交互時需要持有的許可。

它列出了Instrumentation類,可以在應用程序運行時提供簡檔和其他信息。這些聲明僅當應用程序在開發(fā)和測試過程中被提供;它們將在應用程序正式發(fā)布之前被移除。

它聲明了該應用程序所需的Android API的最小化水平。

它列出了該應用程序必須鏈接的庫。

三,主要結構及規(guī)則

下面列表顯示了manifest文件的通常的結構以及它可以含有的元素。每個元素,連同它的所有屬性,會在各個單獨的文檔里進行充分的描繪。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest>  //根節(jié)點,描述了package中所有的內容  
  3.     <uses-permission /> //請求你的package正常運作所需賦予的安全許可。一個manifest能包含零個或更多此元素  
  4.     <permission />  //聲明了安全許可來限制哪些程序能使用你的package中的組件和功能。一個manifest能包含零個或更多此元素  
  5.     <permission-tree />   
  6.     <permission-group />  
  7.     <instrumentation />  //聲明了用來測試此package或其他package指令組件的代碼。一個manifest能包含零個或更多此元素  
  8.     <uses-sdk />  //指定當前應用程序兼容的***sdk版本號  
  9.     <application>  //包含package中application級別組件聲明的根節(jié)點。此元素也可包含 application中全局和默認的屬性,如標簽,icon,主題,必要的權限,等等。一個manifest能包含零個或一個此元素(不允許多余一個)  
  10.         <activity>  //用來與用戶交互的主要工具。當用戶打開一個應用程序的初始頁面時一個activity,大部分被使用到的其他頁面也由不同的activity所實現并聲明在另外的activity標記中。  
  11.             <intent-filter>  //聲明了指定的一組組件支持的Intent值  
  12.                 <action />  
  13.                 <category />  
  14.                 <data />  
  15.                     <type/>  
  16.                     <schema/>  
  17.                     <authority/>  
  18.                     <path/>  
  19.             </intent-filter>  
  20.             <meta-data />  
  21.         </activity>  
  22.         <activity-alias>  
  23.             <intent-filter> . . . </intent-filter>  
  24.             <meta-data />  
  25.         </activity-alias>  
  26.         <service>  //Service是能在后臺運行任意時間的組件  
  27.             <intent-filter> . . . </intent-filter>  
  28.             <meta-data/>  
  29.         </service>  
  30.         <receiver>   //IntentReceiver能使你的application獲得數據的改變或者發(fā)生的操作,即使它當前不在運行  
  31.             <intent-filter> . . . </intent-filter>  
  32.             <meta-data />  
  33.         </receiver>  
  34.         <provider>  //ContentProvider是用來管理持久化數據并發(fā)布給其他應用程序使用的組件  
  35.             <grant-uri-permission />  
  36.             <meta-data />  
  37.         </provider>  
  38.         <uses-library />  
  39.         <uses-configuration />    
  40.     </application>  
  41. </manifest> 

下面是按照字母順序排列的所有可以出現在manifest文件里的元素。它們是唯一合法的元素;你不能加入你自己的元素或屬性。

<action> 

<activity> 

<activity-alias> 

<application> 

<category> 

<data> 

<grant-uri-permission> 

<instrumentation> 

<intent-filter> 

<manifest> 

<meta-data> 

<permission> 

<permission-group> 

<permission-tree> 

<provider> 

<receiver> 

<service> 

<uses-configuration> 

<uses-library> 

<uses-permission> 

<uses-sdk>

說明:AndroidManifest.xml文件的結構、元素,以及元素的屬性,可以在Android SDK文檔中查看詳細說明。而在看這些眾多的元素以及元素的屬性前,需要先了解一下這些元素在命名、結構等方面的規(guī)則: 

    元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出現一次。如果一個元素包含有其他子元素,必須通過子元素的屬性來設置其值。處于同一層次的元素,這些元素的說明是沒有順序的。 

    屬性:按照常理,所有的屬性都是可選的,但是有些屬性是必須設置的。那些真正可選的屬性,即使不存在,其也有默認的數值項說明。除了根元素<manifest>的屬性,所有其他元素屬性的名字都是以android:前綴的; 

    定義類名:所有的元素名都對應其在SDK中的類名,如果你自己定義類名,必須包含類的數據包名,如果類與application處于同一數據包中,可以直接簡寫為“.”; 

    多數值項:如果某個元素有超過一個數值,這個元素必須通過重復的方式來說明其某個屬性具有多個數值項,且不能將多個數值項一次性說明在一個屬性中; 

    資源項說明:當需要引用某個資源時,其采用如下格式:@[package :]type :name  例如 <activity android:icon=”@drawable/icon ” . . . > 

    字符串值:類似于其他語言,如果字符中包含有字符“\”,則必須使用轉義字符“\\”; 

四,詳細說明 值得一提一些常用之處: 

1,幾乎所有的AndroidManifest.xml(以及許多其他Android的xml的文件)在***個元 素中包含了命名空間的聲明 xmlns:android="http://schemas.android.com/apk/res/android"。這樣使得Android中各 種標準屬性能在文件中使用,提供了大部分元素中的數據。 

2,大部分manifests包含了單個<application>的元素,它定義了所有的application級別組件和屬性,并能在package中使用。 

3, 任何被用戶看作頂層應用程序,并能被程序啟動器所用的package,需要包含至少一個Activity組件來支持MAIN操作和LAUNCHER種 類。動作android.intent.action.MAIN指示這是應用程序的入口點。類別 android.intent.category.LAUNCHER將此Activity放在啟動器窗口中。

在最外層 的<manifest>中包含了包名如 package="cn.androidlover.demo" 、軟件的版本號 android:versionCode="1" 以及 android:versionName="1.0"的屬性,而里面一層的<application>分支中將可能包含Android程序的 四種對象 Activity、Service、Content Provider以及Receiver。我們每添加上面四個類型中的任一種新對象都需要在androidmanifest.xml文件中添加相應節(jié)點,否 則運行時將會產生異常。每一個activity必須要一個<activity>標記對應,無論它給外部使用或是只用于自己的package 中。如果一個activity沒有對應的標記,你將不能運行它。

此文件一個重要的地方就是它所包含的intent-filters。這些 filters描述了activity啟動的位置和時間。每當一個 activity(或者操作系統(tǒng))要執(zhí)行一個操作,例如:打開網頁或聯系簿時,它創(chuàng)建出一個intent的對象。它能承載一些信息描述了你想做什么,你想 處理什么數據,數據的類型,和一些其他信息。Android比較了intent對象中和每個application所暴露的intent-filter中 的信息,來找到最合適的activity來處理調用者所指定的數據和操作。關于intent的更多信息請訪問Intent參考頁面。

application屬性介紹:

有 關AndroidManifest.xml文件的application分支我們有必要了解一些常見的屬性,這里可以看到一些我們實用的選項,比如允許 調試android:debuggable、任務關系android:taskAffinity,比如我們常見的方式創(chuàng)建一個新的任務實用標記 FLAG_ACTIVITY_NEW_TASK,為程序制定一個主題,可以使用android:theme指向一個主題文件。平時我們創(chuàng)建的程序使用一些 安全敏感項,會需要請求系統(tǒng)許可權限,這里可以使用android:permission來制定相關的許可,每個程序的service、 activity、content provider、receiver都需要在application的節(jié)點內實現。有關完整的屬性可以查看:

:debuggable、任務關系android:taskAffinity,比如我們常見的方式創(chuàng)建一個新的任務實用標記 FLAG_ACTIVITY_NEW_TASK,為程序制定一個主題,可以使用android:theme指向一個主題文件。平時我們創(chuàng)建的程序使用一些 安全敏感項,會需要請求系統(tǒng)許可權限,這里可以使用android:permission來制定相關的許可,每個程序的service、 activity、content provider、receiver都需要在application的節(jié)點內實現。有關完整的屬性可以查看: 

  1. application android:allowClearUserData=["true" | "false"]  
  2.              android:allowTaskReparenting=["true" | "false"]  
  3.              android:debuggable=["true" | "false"]  
  4.              android:description="string resource"  
  5.               android:enabled=["true" | "false"]  
  6.              android:hasCode=["true" | "false"]  
  7.              android:icon="drawable resource"  
  8.               android:label="string resource"  
  9.              android:manageSpaceActivity="string"  
  10.               android:name="string"  
  11.               android:permission="string"  
  12.               android:persistent=["true" | "false"]  
  13.               android:process="string"  
  14.               android:taskAffinity="string"  
  15.               android:theme="resource or theme" >  
  16.      . . .  
  17. </application> 

另外:Activity的屬性常用的可能為android:name和android:label兩個,但我們需要了解所有的屬性以幫助解決復雜的問題,完整的如下:

  1. android:allowTaskReparenting=["true" | "false"
  2. android:alwaysRetainTaskState=["true" | "false"
  3. android:clearTaskOnLaunch=["true"" | "false"] 
  4. android:configChanges=[one or more of: "mcc" "mnc" "locale" "touchscreen" "keyboard" "keyboardHidden" "navigation" "orientation" "fontScale"
  5. android:enabled=["true" | "false"
  6. android:excludeFromRecents=["true" | "false"
  7. android:exported=["true" | "false"
  8. android:finishOnTaskLaunch=["true" | "false"
  9. android:icon="drawable resource" 
  10. android:label="string resource" 
  11. android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"
  12. android:multiprocess=["true" | "false"
  13. android:name="string" 
  14. android:noHistory=["true" | "false"
  15. android:permission="string" 
  16. android:process="string" 
  17. android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nonsensor"
  18. android:stateNotNeeded=["true" | "false"
  19. android:taskAffinity="string" 
  20. android:theme="resource or theme" 
  21. android:windowSoftInputMode=[one or more of: "stateUnspecified" "stateUnchanged" "stateHidden" "stateAlwaysHidden" "stateVisible" "stateAlwaysVisible" "adjustUnspecified" "adjustResize" "adjustPan"

從Provider節(jié)點中用到的定義,可以看到包含了權限控制、排序方式完整的如下:

  1. <provider android:authorities="list"  

  2.            android:enabled=["true" | "false"]  

  3.            android:exported=["true" | "false"]  

  4.            android:grantUriPermissions=["true" | "false"]  

  5.            android:icon="drawable resource"  

  6.            android:initOrder="integer"  

  7.            android:label="string resource"  

  8.           android:multiprocess=["true" | "false"]  

  9.           android:name="string"  

  10.            android:permission="string"  

  11.            android:process="string"  

  12.            android:readPermission="string"  

  13.            android:syncable=["true" | "false"]  

  14.            android:writePermission="string" >  

  15. </provider>

而對于服務相關定義如下:

  1. <service android:enabled=["true" | "false"]  

  2.           android:exported[="true" | "false"]  

  3.           android:icon="drawable resource"  

  4.           android:label="string resource"  

  5.          android:name="string"  

  6.           android:permission="string"  

  7.           android:process="string" >  

  8. </service>

***是Broadcast使用的Receiver定義,一般配合和隱式處理。

  1. <receiver android:enabled=["true" | "false"]  

  2.            android:exported=["true" | "false"]  

  3.            android:icon="drawable resource"  

  4.           android:label="string resource"             

  5.           android:name="string"  

  6.           android:permission="string"  

  7.           android:process="string" >  

  8. </receiver> 

總之,AndroidManifest.xml文件雖然看起來復雜,但是,只要我們理清中里面各元素的作用,那么一切就變得簡單了。

本文鏈接:http://www.cnblogs.com/xiaochao1234/p/3884355.html

責任編輯:chenqingxiang 來源: xiaochao1234博客
相關推薦

2012-06-05 10:09:45

AndroidManiAndroidMani

2013-06-28 13:38:45

AndroidAndroidMani

2011-03-30 17:32:28

androidmaniAndroid開發(fā)

2013-12-04 10:21:38

AndroidAndroidMani

2009-09-09 18:20:29

C# XML編程

2023-08-31 07:55:21

Android系統(tǒng)壓縮處理

2023-11-17 08:23:10

Android開發(fā)

2009-09-09 18:00:55

C# XML編程

2010-01-26 13:33:26

Android構建模塊

2009-08-18 17:05:08

C#操作xml文件

2010-02-04 09:55:46

Android DEX

2023-10-23 19:58:01

Android

2022-04-06 09:02:58

JS反編譯App

2013-12-27 14:34:46

Android開發(fā)Android應用短信觸發(fā)示例

2023-10-31 12:59:00

C++編程語言

2015-01-12 13:48:55

Android應用組件

2023-12-09 08:58:30

AndroidActivity啟動模式

2021-11-09 17:51:58

多進程通信網絡

2017-05-22 16:32:53

AndroidFrameworkManifest

2010-02-05 17:02:13

Android
點贊
收藏

51CTO技術棧公眾號