乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      AndroidManifest.xml文件綜合詳解

       jemeen 2012-01-30
      一,重要性AndroidManifest.xml是Android應(yīng)用程序中最重要的文件之一。它是Android程序的全局配置文件,是每個(gè)android程序中必須的文件。它位于我們開(kāi)發(fā)的應(yīng)用程序的根目錄下,描述了package中的全局?jǐn)?shù)據(jù),包括package中暴露的組件(activities, services, 等等),以及他們各自的實(shí)現(xiàn)類,各種能被處理的數(shù)據(jù)和啟動(dòng)位置等重要信息。
      因此,該文件提供了Android系統(tǒng)所需要的關(guān)于該應(yīng)用程序的必要信息,即在該應(yīng)用程序的任何代碼運(yùn)行之前系統(tǒng)所必須擁有的信息。一個(gè)典型的Android應(yīng)用程序的結(jié)構(gòu)如下圖所示:


      二,主要功能它指定了該應(yīng)用程序的Java包:該包名作為應(yīng)用程序的一個(gè)獨(dú)特標(biāo)識(shí)。
      它描述了應(yīng)用程序組件:該應(yīng)用程序由哪些activity,service,broadcast receiver和content provider組成。它指定了實(shí)現(xiàn)每個(gè)組件的類以及公開(kāi)發(fā)布它們的能力(例如,它們能持有哪個(gè)Intent信息)。這些聲明使Android系統(tǒng)知道這兒有什么組件以及在什么條件下它們可以被載入。
      它決定那些進(jìn)程將容納應(yīng)用程序組件。
      它聲明了本應(yīng)用程序必須擁有哪些許可,以便訪問(wèn)API的被保護(hù)部分,以及與其他應(yīng)用程序交互。
      它也聲明了其他應(yīng)用程序在和該應(yīng)用程序交互時(shí)需要持有的許可。
      它列出了Instrumentation類,可以在應(yīng)用程序運(yùn)行時(shí)提供簡(jiǎn)檔和其他信息。這些聲明僅當(dāng)應(yīng)用程序在開(kāi)發(fā)和測(cè)試過(guò)程中被提供;它們將在應(yīng)用程序正式發(fā)布之前被移除。
      它聲明了該應(yīng)用程序所需的Android API的最小化水平。
      它列出了該應(yīng)用程序必須鏈接的庫(kù)。

      三,主要結(jié)構(gòu)及規(guī)則下面列表顯示了manifest文件的通常的結(jié)構(gòu)以及它可以含有的元素。每個(gè)元素,連同它的所有屬性,會(huì)在各個(gè)單獨(dú)的文檔里進(jìn)行充分的描繪。

      <?xml version="1.0" encoding="utf-8"?>
      <manifest>  //根節(jié)點(diǎn),描述了package中所有的內(nèi)容
          <uses-permission /> //請(qǐng)求你的package正常運(yùn)作所需賦予的安全許可。一個(gè)manifest能包含零個(gè)或更多此元素
          <permission />  //聲明了安全許可來(lái)限制哪些程序能使用你的package中的組件和功能。一個(gè)manifest能包含零個(gè)或更多此元素
          <permission-tree />  
          <permission-group />
          <instrumentation />  //聲明了用來(lái)測(cè)試此package或其他package指令組件的代碼。一個(gè)manifest能包含零個(gè)或更多此元素
          <uses-sdk />  //指定當(dāng)前應(yīng)用程序兼容的最低sdk版本號(hào)
          <application>  //包含package中application級(jí)別組件聲明的根節(jié)點(diǎn)。此元素也可包含application中全局和默認(rèn)的屬性,如標(biāo)簽,icon,主題,必要的權(quán)限,等等。一個(gè)manifest能包含零個(gè)或一個(gè)此元素(不允許多余一個(gè))
              <activity>  //用來(lái)與用戶交互的主要工具。當(dāng)用戶打開(kāi)一個(gè)應(yīng)用程序的初始頁(yè)面時(shí)一個(gè)activity,大部分被使用到的其他頁(yè)面也由不同的activity所實(shí)現(xiàn)并聲明在另外的activity標(biāo)記中。
                  <intent-filter>  //聲明了指定的一組組件支持的Intent值
                      <action />
                      <category />
                      <data />
                          <type/>
                          <schema/>
                          <authority/>
                          <path/>
                  </intent-filter>
                  <meta-data />
              </activity>
              <activity-alias>
                  <intent-filter> . . . </intent-filter>
                  <meta-data />
              </activity-alias>
              <service>  //Service是能在后臺(tái)運(yùn)行任意時(shí)間的組件
                  <intent-filter> . . . </intent-filter>
                  <meta-data/>
              </service>
              <receiver>   //IntentReceiver能使你的application獲得數(shù)據(jù)的改變或者發(fā)生的操作,即使它當(dāng)前不在運(yùn)行
                  <intent-filter> . . . </intent-filter>
                  <meta-data />
              </receiver>
              <provider>  //ContentProvider是用來(lái)管理持久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序使用的組件
                  <grant-uri-permission />
                  <meta-data />
              </provider>
              <uses-library />
              <uses-configuration />   
          </application>
      </manifest>
      下面是按照字母順序排列的所有可以出現(xiàn)在manifest文件里的元素。它們是唯一合法的元素;你不能加入你自己的元素或?qū)傩浴?BR><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>
      說(shuō)明:AndroidManifest.xml文件的結(jié)構(gòu)、元素,以及元素的屬性,可以在Android SDK文檔中查看詳細(xì)說(shuō)明。而在看這些眾多的元素以及元素的屬性前,需要先了解一下這些元素在命名、結(jié)構(gòu)等方面的規(guī)則:
          元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出現(xiàn)一次。如果一個(gè)元素包含有其他子元素,必須通過(guò)子元素的屬性來(lái)設(shè)置其值。處于同一層次的元素,這些元素的說(shuō)明是沒(méi)有順序的。
          屬性:按照常理,所有的屬性都是可選的,但是有些屬性是必須設(shè)置的。那些真正可選的屬性,即使不存在,其也有默認(rèn)的數(shù)值項(xiàng)說(shuō)明。除了根元素<manifest>的屬性,所有其他元素屬性的名字都是以android:前綴的;
          定義類名:所有的元素名都對(duì)應(yīng)其在SDK中的類名,如果你自己定義類名,必須包含類的數(shù)據(jù)包名,如果類與application處于同一數(shù)據(jù)包中,可以直接簡(jiǎn)寫為“.”;
          多數(shù)值項(xiàng):如果某個(gè)元素有超過(guò)一個(gè)數(shù)值,這個(gè)元素必須通過(guò)重復(fù)的方式來(lái)說(shuō)明其某個(gè)屬性具有多個(gè)數(shù)值項(xiàng),且不能將多個(gè)數(shù)值項(xiàng)一次性說(shuō)明在一個(gè)屬性中;
          資源項(xiàng)說(shuō)明:當(dāng)需要引用某個(gè)資源時(shí),其采用如下格式:@[package:]type:name。例如 <activity android:icon=”@drawable/icon ” . . . >
          字符串值:類似于其他語(yǔ)言,如果字符中包含有字符“\”,則必須使用轉(zhuǎn)義字符“\\”;

      四,詳細(xì)說(shuō)明值得一提一些常用之處:
      1,幾乎所有的AndroidManifest.xml(以及許多其他Android的xml的文件)在第一個(gè)元素中包含了命名空間的聲明xmlns:android="http://schemas./apk/res/android"。這樣使得Android中各種標(biāo)準(zhǔn)屬性能在文件中使用,提供了大部分元素中的數(shù)據(jù)。
      2,大部分manifests包含了單個(gè)<application>的元素,它定義了所有的application級(jí)別組件和屬性,并能在package中使用。
      3,任何被用戶看作頂層應(yīng)用程序,并能被程序啟動(dòng)器所用的package,需要包含至少一個(gè)Activity組件來(lái)支持MAIN操作和LAUNCHER種類。動(dòng)作android.intent.action.MAIN指示這是應(yīng)用程序的入口點(diǎn)。類別android.intent.category.LAUNCHER將此Activity放在啟動(dòng)器窗口中。
      在最外層的<manifest>中包含了包名如 package="cn.androidlover.demo" 、軟件的版本號(hào) android:versionCode="1" 以及 android:versionName="1.0"的屬性,而里面一層的<application>分支中將可能包含Android程序的四種對(duì)象 Activity、Service、Content Provider以及Receiver。我們每添加上面四個(gè)類型中的任一種新對(duì)象都需要在androidmanifest.xml文件中添加相應(yīng)節(jié)點(diǎn),否則運(yùn)行時(shí)將會(huì)產(chǎn)生異常。每一個(gè)activity必須要一個(gè)<activity>標(biāo)記對(duì)應(yīng),無(wú)論它給外部使用或是只用于自己的package中。如果一個(gè)activity沒(méi)有對(duì)應(yīng)的標(biāo)記,你將不能運(yùn)行它。
      此文件一個(gè)重要的地方就是它所包含的intent-filters。這些filters描述了activity啟動(dòng)的位置和時(shí)間。每當(dāng)一個(gè)activity(或者操作系統(tǒng))要執(zhí)行一個(gè)操作,例如:打開(kāi)網(wǎng)頁(yè)或聯(lián)系簿時(shí),它創(chuàng)建出一個(gè)intent的對(duì)象。它能承載一些信息描述了你想做什么,你想處理什么數(shù)據(jù),數(shù)據(jù)的類型,和一些其他信息。Android比較了intent對(duì)象中和每個(gè)application所暴露的intent-filter中的信息,來(lái)找到最合適的activity來(lái)處理調(diào)用者所指定的數(shù)據(jù)和操作。關(guān)于intent的更多信息請(qǐng)?jiān)L問(wèn)Intent參考頁(yè)面。
      application屬性介紹:
      有關(guān)AndroidManifest.xml文件的application分支我們有必要了解一些常見(jiàn)的屬性,這里可以看到一些我們實(shí)用的選項(xiàng),比如允許調(diào)試android:debuggable、任務(wù)關(guān)系android:taskAffinity,比如我們常見(jiàn)的方式創(chuàng)建一個(gè)新的任務(wù)實(shí)用標(biāo)記FLAG_ACTIVITY_NEW_TASK,為程序制定一個(gè)主題,可以使用android:theme指向一個(gè)主題文件。平時(shí)我們創(chuàng)建的程序使用一些安全敏感項(xiàng),會(huì)需要請(qǐng)求系統(tǒng)許可權(quán)限,這里可以使用android:permission來(lái)制定相關(guān)的許可,每個(gè)程序的service、activity、content provider、receiver都需要在application的節(jié)點(diǎn)內(nèi)實(shí)現(xiàn)。有關(guān)完整的屬性可以查看:
      <application android:allowClearUserData=["true" | "false"]
                   android:allowTaskReparenting=["true" | "false"]
                   android:debuggable=["true" | "false"]
                   android:description="string resource"
                    android:enabled=["true" | "false"]
                   android:hasCode=["true" | "false"]
                   android:icon="drawable resource"
                    android:label="string resource"
                   android:manageSpaceActivity="string"
                    android:name="string"
                    android:permission="string"
                    android:persistent=["true" | "false"]
                    android:process="string"
                    android:taskAffinity="string"
                    android:theme="resource or theme" >
           . . .
      </application>
      另外:Activity的屬性常用的可能為android:name和android:label兩個(gè),但我們需要了解所有的屬性以幫助解決復(fù)雜的問(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"
      • android:theme="resource or theme"
      • android:windowSoftInputMode=[one or more of: "stateUnspecified" "stateUnchanged" "stateHidden" "stateAlwaysHidden" "stateVisible" "stateAlwaysVisible" "adjustUnspecified" "adjustResize" "adjustPan"]
      從Provider節(jié)點(diǎn)中用到的定義,可以看到包含了權(quán)限控制、排序方式完整的如下:
      <provider android:authorities="list"
                 android:enabled=["true" | "false"]
                 android:exported=["true" | "false"]
                 android:grantUriPermissions=["true" | "false"]
                 android:icon="drawable resource"
                 android:initOrder="integer"
                 android:label="string resource"
                android:multiprocess=["true" | "false"]
                android:name="string"
                 android:permission="string"
                 android:process="string"
                 android:readPermission="string"
                 android:syncable=["true" | "false"]
                 android:writePermission="string" >
      </provider>
      而對(duì)于服務(wù)相關(guān)定義如下:
      <service android:enabled=["true" | "false"]
                android:exported[="true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
               android:name="string"
                android:permission="string"
                android:process="string" >
      </service>
      最后是Broadcast使用的Receiver定義,一般配合和隱式處理。
      <receiver android:enabled=["true" | "false"]
                 android:exported=["true" | "false"]
                 android:icon="drawable resource"
                android:label="string resource"            
                android:name="string"
                android:permission="string"
                android:process="string" >
      </receiver>
      總之,AndroidManifest.xml文件雖然看起來(lái)復(fù)雜,但是,只要我們理清中里面各元素的作用,那么一切就變得簡(jiǎn)單了。
      《完》

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多