1. 程式人生 > >AndroidManifest.xml詳解

AndroidManifest.xml詳解

目錄

一、AndroidManifest.xml整體結構

1、<manifest>屬性

  android:sharedUserLabel="string resource"

  android:versionCode="integer"

  android:

versionName="string"

  android:installLocation=["auto"|"internalOnly"|"preferExternal"]>

    ...

</manifest>

說明:

這個元素是AndroidManifest.xml檔案的根元素。它必須包含一個<application>元素,並且必須要指定xmlns:android和package屬性。

屬性:

xmlns:android:定義android的名稱空間。

package:一個完整的java語言風格的應用程式包的名稱,這個必須是唯一的,名字可以包含大小寫字母、數字和下劃線 ('_'),但只能以字母開頭。

android:sharedUserId:這個屬性定義了一個Linux 使用者ID的名稱,這個名稱能夠跟其他應用程式共享。預設情況下,Android會給它的每個應用程式都分配一個唯一的使用者ID。但是,如果有兩個或更多的應用程式把這個屬性都設定了相同的值,那麼它們將共享這個相同的ID---假如並且它們具有相同的數字簽名。擁有相同使用者ID的應用程式能夠訪問彼此的資料,並且它們也可執行在相同的程序中。

android:sharedUserLabel:(API Level 3)這個屬性給共享的userid定義了一個使用者可讀的標籤。這個標籤必須用字串資源來設定,不能使用原生的字串。只有在sharedUserId屬性被設定,這個屬性才有意義。

android:versionCode:apk版本號,值為數字,用於版本判斷,對使用者不可見。

android:versionName:apk當前版本的名稱,對使用者可見,由三部分組成:<major>.<minor>.<point>,如:3.4.4。

android:installLocation:(API Level 8)apk安裝位置,apk可以安裝在內部儲存上或外部儲存上。

auto

系統自己判斷安裝位置,安裝位置不定,優先安裝在內部儲存上,使用者可以移動安裝位置

internalOnly

預設值)強行安裝在內部儲存上,當內部儲存空間不足時,系統將不會安裝該應用。使用者不能移動安裝位置。

preferExternal

應用程式偏好安裝在外部儲存器 上(SD卡)。系統並不保證恪守這一個規則。如果外部儲存器不可用或空間不足,或者應用程式使用了forward-locking機制(這種機制不支援外 部儲存),那麼應用程式就可以安裝在內部儲存器上。一旦安裝,使用者能夠通過系統設定在內外儲存器之間移動應用程式

警告如果應用程式使用的Google Play的複製保護功能,那麼它就不能被安裝在裝置的SD卡上。但是,如果使用Google Play的應用程式許可,那麼它就能夠被安裝在內部或外部儲存器上,包括SD卡。

注意預設情況下,應用程式會被安裝在內部儲存器上,除非把這個屬性值定義為auto或preferExternal,應用程式才能夠被安裝在外部儲存器上。

當應用程式被安裝在外部儲存器上的時候:

1. .apk檔案被儲存在外部儲存器上,但是任何應用程式資料(如資料庫)依然被儲存在內部裝置儲存器上;

2. 用一個key把儲存器中儲存的.apk檔案加密,只允許應用程式在安裝它的裝置上執行。使用者不能把安裝在SD卡上應用程式轉移到另一個裝置的SD卡上,雖然在一個裝置上能夠使用多個SD卡;

3. 在使用者要求的時候,應用程式能夠被轉移到內部儲存器上。使用者也可以要求把應用程式從內部儲存器移動到外部儲存器上。但是,如果這個屬性被設定為internalOnly,那麼系統不允許使用者把應用程式轉移到外部儲存器上。

2、應用程式執行環境相關

系統版本

<uses-sdk

 android:maxSdkVersion="integer" />

被包含於:

說明:

這個元素用API 的級別(一個整數)來說明應用程式會跟哪些Android平臺版本相容。由應用程式給出的API級別會跟給定不同的裝置中的Android系統的API級別比較。

屬性:

android:minSdkVersion:程式執行的最小API版本,如果Android系統的API級別比該應用程式清單中的這個屬性值小,那麼系統就阻止安裝該應用程式。如果不指定該屬性,預設最小API版本為1,即相容所有版本。

android:targetSdkVersion:(APILevel 4)程式的目標版本,即應用測試時所針對的目標平臺版本。當程式執行在比該版本高的平臺上時,系統將以相容模式來執行程式以確保程式能夠正常執行。不指定該屬性時,該值與minSdkVersion相同。

android:maxSdkVersion:(API Level 4不建議設定該值,指定程式能執行的最高版本,噹噹前系統版本比該值高時,該程式將不能安裝,如果系統升級後的版本號高於該值時,該程式將被刪除。從Android 2.0.1以後系統在安裝程式或系統升級的時候將不再檢測和使用該屬性。但Google Play在把應用程式展示給使用者下載的時候,會繼續使用這個屬性作為過濾條件。

<uses-feature

       android:name="string"

       android:required=["true" | "false"]

       android:glEsVersion="integer" />

被包含於:

說明:

API Level 4)宣告該程式需要的硬體或軟體環境,AndroidMarket會根據uses-feature過濾所有你裝置不支援的應用。android系統本身不會檢測該屬性。建議minSdkVersion小於4的時候也設定該屬性。可包含多個該節點。

屬性:

android:name:指定一個硬體或軟體環境

硬體環境:

硬體型別

名稱

描述

Audio

android.hardware.audio.low_latency

應用程式使用裝置上的低延遲的音訊通道,並且對於輸入或的延遲或之後是敏感的

Bluetooth

android.hardware.bluetooth

藍芽裝置

Camera

android.hardware.camera

攝像頭,如果有多個攝像頭,應用程式使用後置攝像頭

android.hardware.camera.autofocus

自動對焦

android.hardware.camera.flash

閃光燈

android.hardware.camera.front

前置攝像頭

android.hardware.camera.any

至少一個攝像頭,優先後置攝像頭

Location

android.hardware.location

應用程式會使用裝置上的多種功能來判斷位置,如GPS位置、網路位置、或蜂窩位置

android.hardware.location.network

子功能,應用程式要從裝置上所支援的基於網路的定位系統來獲取大概的位置座標

android.hardware.location.gps

應用程式使用了從裝置上的全球定位系統接收器中獲取精確的座標

Microphone

android.hardware.microphone

麥克風

NFC

android.hardware.nfc

近距離無線通訊技術

Sensors

android.hardware.sensor.accelerometer

加速感測器

android.hardware.sensor.barometer

壓力感測器

android.hardware.sensor.compass

應用程式要使用裝置上的羅盤來讀取方向讀數。)

android.hardware.sensor.gyroscope

應用程式要使用裝置上的陀螺儀

android.hardware.sensor.light

應用程式要使用裝置的亮度感測器

android.hardware.sensor.proximity

近距離感測器

Screen

android.hardware.screen.landscape

應用程式需要橫向螢幕

android.hardware.screen.portrait

應用程式需要縱向螢幕

Telephony

android.hardware.telephony

應用程式要使用裝置上的電話功能,如帶有資料通訊服務的無線電話

android.hardware.telephony.cdma

應用程式要使用裝置上的CDMA無線電話功能

android.hardware.telephony.gsm

應用程式要使用裝置上的GSM無線電話功能

Touchscreen

android.hardware.faketouch

應用程式要使用基本的觸屏事件,如“click down”、“click up”和“drag”

android.hardware.faketouch.multitouch.distinct

應用程式要在fake touch(假觸屏)表面上執行區分兩點以上觸控的軌跡的操作,這是fake touce功能的一個超集。

android.hardware.faketouch.multitouch.jazzhand

應用程式要在fake touch(假觸屏)表面上執行區分五點以上觸控的軌跡的操作,這是fake touce功能的一個超集。

android.hardware.touchscreen

應用程式要使用比基本的觸屏事件還要多的手勢互動功能,如,拋物手勢。該功能是基本faketouch功能的一個超集。

android.hardware.touchscreen.multitouch

應用程式要使用多點觸屏上的基本雙點觸控功能,如掐捏手勢,但不需要獨立的軌跡跟蹤。該功能是touchscreen功能的一個超集。

android.hardware.touchscreen.multitouch.distinct

應用程式要使用多點觸屏裝置的高階多點觸控功能,如兩個以上完全獨立的點的軌跡跟蹤。它是multitouch功能的子集

android.hardware.touchscreen.multitouch.jazzhand

該應用程式要使用多點觸屏裝置的多點觸控功能,如五個以上完全獨立的點的軌跡跟蹤。它是multitouch功能的子集

USB

android.hardware.usb.host

應用程式要使用USB主機模式功能(應用程式以主機的方式連線到USB裝置上

android.hardware.usb.accessory

應用程式要使用訪問USB的功能(應用程式以USB裝置的方式連線到USB主機上)

Wifi

android.hardware.wifi

應用程式要使用裝置上的802.11網路(wifi)功能

軟體環境:

軟體型別

名稱

描述

Live Wallpaper

android.software.live_wallpaper

應用程式需要活動桌布功能

SIP/VOIP

android.software.sip

應用程式使用SIP服務裝置

android.software.sip.voip

應用程式使用基於sip的網路電話服務裝置,子功能

android:required:當設定上沒有指定功能是,程式是否能正常執行,true:不能正常執行,false:能正常執行,預設值為true

android:glEsVersion:宣告應用程式所需要的OpenGL ES的版本,它的高16位代表主版本號,低16位代表次要版本號,如:要是指定OpenGL ES的版本號是2.0,那麼就要設定為0x00020000。要指定的OpenGL ES的版本號是2.1,就要設定為0x00020001。應用程式在它的清單中應該最多隻能指定一個android:glEsVersion屬性,如果指定了多個,那麼只會使用版本最高的那個android:glEsVersion屬性,而其他的將會被忽略。如果應用程式沒有指定一個android:glEsVersion屬性,那麼就假定應用程式僅需要OpenGLES1.0,它是在所有的Android裝置上都支援的版本。

<uses-configuration

  android:reqFiveWayNav=["true" | "false"]

  android:reqHardKeyboard=["true" | "false"]

  android:reqKeyboardType=["undefined"|"nokeys"|"qwerty"|"twelvekey"]

  android:reqNavigation=["undefined"|"nonav"|"dpad"|"trackball"|"wheel"]

  android:reqTouchScreen=["undefined"|"notouch"|"stylus"|"finger"]/>

被包含於:

說明:

API Level 3)這個屬性用於指定該應用程式所需要的硬體和軟體功能。例如,應用程式可以用這個元素指定它所需要的物理鍵盤或特殊的導航裝置,如軌跡球。使用這個規範可以避免把應用程式安裝在那些不支援其不能工作的裝置上。可包含多個該節點。

屬性:

android:reqFiveWayNav:是否需要5位導航鍵。

android:reqHardKeyboard:是否需要物理鍵盤。

android:reqKeyboardType:鍵盤型別,此處不區分物理鍵盤和軟鍵盤。

undefined

應用程式不需要鍵盤,預設值

nokeys

應用程式不需要鍵盤

qwerty

應用程式需要一個標準的QWERTY鍵盤

twelvekey

應用程式需要一個12鍵鍵盤,類似於大多數手機——鍵從0到9的數字加上星號(*)和英鎊(#)鍵。

android:reqNavigation:導航控制。

undefined

應用程式不需要任何導航控制,預設值

nonav

應用程式不需要任何導航控制

dpad

應用程式需要一個方向鍵(方向鍵)進行導航

trackball

應用程式需要導航球

wheel

應用程式需要一個導航輪

 注意:如果一個應用程式需要一個導航制,但具體型別的控制並不重要,可以將 reqFiveWayNav設定為true,而不用設定該屬性。

android:reqTouchScreen:觸控式螢幕型別。

undefined

應用程式不需要觸控式螢幕,預設值

notouch

應用程式不需要觸控式螢幕

stylus

應用程式需要一個使用觸控筆的觸控式螢幕

finger

應用程式需要一個使用手指的觸控式螢幕

3、螢幕尺寸相關

<supports-screens

        android:resizeable=["true"| "false"]

      android:smallScreens=["true" | "false"]

     android:normalScreens=["true" | "false"]

     android:largeScreens=["true" | "false"]

     android:xlargeScreens=["true" | "false"]

     android:anyDensity=["true" | "false"]

被包含於:

說明:

API Level 4)這個元素用於指定應用程式所支援的螢幕尺寸,當比支援的螢幕還要大螢幕時將啟用螢幕相容模式。在應用程式中使用這個元素指定應用程式所支援的螢幕尺寸是至關重要的。

屬性:

android:resizeable:針對不同的螢幕尺寸,應用程式是否可以調整尺寸。預設值是true。如果這個屬性設定了false,在大的螢幕上,系統會以螢幕相容模式執行該應用程式。

這個屬性被廢棄了,引入這個屬性主要是為了幫助應用程式從1.5過渡到1.6。當多螢幕支援被引入時,就不應該在使用它了。

android:smallScreens:這個屬性用於指定應用程式是否支援較小外形的螢幕。一個small型別的螢幕被定義成一個比normal(傳統的HVGA)型別的螢幕還要小的螢幕。外部服務(如Google Play)不會把不支援小屏的應用程式提供給小屏裝置,因為很少有能夠確保該應用程式在小螢幕的裝置上正常工作的平臺。預設為true

android:normalScreens:是否支援普通螢幕,典型的是HVGA中等密度的螢幕,但是WQVGA低密度和WVGA高密度螢幕也被認為是普通螢幕。預設為true

android:largeScreens:這個屬性用於指示應用程式是否支援較大外形的螢幕。一個large型別的螢幕被定義成一個比normal型別的手持裝置的螢幕明顯還要大的螢幕,並且為了讓應用程式能夠良好的使用,使用這個屬性時要特別小心,儘管可以依賴系統來調整尺寸,以便能夠填充螢幕。

這個屬性的預設值實際上在某些版本之間是不同的,因此最好在任何時候都明確的宣告這個屬性。如果設定為false,系統會啟用螢幕相容模式,這時要格外的小心。

android:xlargeScreens:(API Level 9)這個屬性用於指示應用程式是否支援超大外形的螢幕。一個xlarge螢幕被定義成一個比large螢幕還要大的螢幕,如平板電腦,為了能夠讓應用程式良好的使用,需要特別小心的使用這個屬性,儘管可以依賴系統來UI的尺寸來填充螢幕。

android:anyDensity:應用程式是否有資源來適應所有密度的螢幕,APILevel 4以上的程式的預設值為true

android:requiresSmallestWidthDp:(API level 13)螢幕寬度的最小尺寸(dp)(螢幕的兩個維度的尺寸中最短的那個)。

注意:Android系統不會關注這個屬性,因此它不會影響應用程式在執行時的行為。相反,它被服務(如Google Play)用於過濾應用程式。但是,當前Google Play不支援用這個屬性來過濾(在Android3.2上),因此如果應用程式不支援小螢幕裝置,就應該繼續使用其他的尺寸屬性。

android:compatibleWidthLimitDp:(API level 13)這個屬性允許在設計應用程式 時,通過指定最大的“smallest screenwidth”來啟用螢幕相容模式,作為一個使用者可選的功能。如果裝置的有效螢幕的最小邊比這個屬性值大,那麼使用者依然能夠安裝該應用程式,但是在執行時要使用螢幕相容模式。預設情況下,螢幕相容模式似乎被禁止的,並且通過會調整佈局的尺寸來填充螢幕,但是在系統欄中會有一個按鈕,讓使用者選擇螢幕相容模式的 開啟和關閉。

注意:當前,螢幕相容模式只能模擬320dp寬度的手持裝置螢幕,因此如果android:compatibleWidthLimitDp的值比320大,那麼螢幕相容模式就不被適用。

android:largestWidthLimitDp:(API level 13)這個屬性允許在設計應用程式時,通過指定最大的“smallest screenwidth”來強制啟用螢幕相容模式。如果裝置有效螢幕的最小邊比這個屬性值大,應用程式就會執行在螢幕相容模式中,而使用者沒有辦法禁止這種模式。只有在因大螢幕尺寸調整而導致破壞了應用程式的功能的時候,並且使用螢幕相容模式是唯一的方法的時候,才應該使用這個屬性。

注意:當前,螢幕相容模式只能模擬320dp寬度的手持裝置螢幕,因此如果android:compatibleWidthLimitDp的值比320大,那麼螢幕相容模式就不被適用。

  android:screenSize=["small"|"normal"|"large"|"xlarge"]

 android:screenDensity=["ldpi"|"mdpi"|"hdpi"|"xhdpi"]/>

...

</compatible-screens>

被包含於:

說明:

API Level 9)至少包含一個screen標籤,每個screen標籤包含android:screenSize和android:screenDensity 這兩個屬性,當不指定這兩個屬性時該標籤將被忽略。

系統不會檢測該屬性,用於google Play

警告:通常不應該使用這個清單元素。因為使用這個元素會顯著的降低應用程式潛在的使用者群。如果裝置帶有一個應用程式清單中沒有列出螢幕配置,那麼就不會允許使用者安裝這個應用程式。在肯定應用程式在所有的螢幕配置上都不會工作時,最後才使用這個方法。

屬性:

android:screenSize:指定一個要配置的螢幕,small、normal、large、xlarge。

android:screenDensity:指定這個螢幕的密度。ldpi、mdpi、hdpi、xhdpi。

4、許可權相關

<uses-permission android:name="string" />

被包含於:

說明:

這個屬性用於給應用程式授予正確的操作的所必須的許可權。這些許可權是在應用程式安裝時被授予的,而不是在執行時授予的。

屬性:

android:name:許可權名稱。

<permission

        android:description="string resource"

     android:icon="drawable resource"

     android:label="string resource"

     android:name="string"

     android:protectionLevel=["normal"|"dangerous"|"signature"|"signatureOrSystem"]/>

被包含於:

說明:

這個元素用於宣告一個安全許可權,以便限制對具體的元件、或元件功能、或其他的應用的訪問。

屬性:

android:description:這個屬性用於給許可權定義一個使用者可讀的懂的描述,它要比標籤更長更詳細。它可以顯示給使用者,以便向用戶解釋許可權的含義---例如,當詢問使用者是否要給另一個應用程式授予對應的許可權的時候,就會把這個屬性所定義的說明顯示給使用者。

android:icon:許可權icon,必須引用一個可繪製的圖示資源。

android:label:定義一個能夠顯示給使用者的許可權名稱。

android:name:許可權的名稱,它是在程式程式碼中引用的許可權的名稱。例如,在一個<uses-permission>元素中和應用程式元件中的permission屬性。這個名稱必須是唯一的

android:permissionGroup:該許可權所屬的許可權組,它必須是在本應用程式或另一個應用中用<permission-group>元素宣告的許可權組。如果這個屬性沒有被設定,那麼這個許可權不屬於任何許可權分組。

android:protectionLevel:定義許可權級別。

normal

預設值。這是讓請求的應用程式訪問獨立的應用程式級功能的一個較低風險的許可權,它會給另一個應用程式、系統、或使用者帶來最小化的風險。系統在安裝應用程式時會自動的把這種型別的許可權授予請求的應用程式,而不需要使用者明確的批准(雖然在安裝應用程式之前,使用者始終可以有選擇的檢視這些許可權);

dangerous

這個是一個較高風險的授權,它會讓請求該許可權的應用程式訪問私有的使用者資料,或者控制使用者裝置,從而給使用者帶來負面影響。因為這種許可權會引入潛在的風險,因此係統不會自動把這種許可權授予請求這個許可權的應用程式。例如,應用程式所請求的這些dangerous型別的許可權,在確認處理之前,可以顯示給使用者,或者採用一些其他的方法,以避免使用者自動把許可權授予所請求的應用程式。

signature

系統只會把這種許可權授予具有相同數字簽名的應用程式,也就是說,請求該許可權的應用程式要與宣告該許可權的應用程式具有相同的數字簽名。如果證書匹配,系統就會自動的把該許可權請求許可權的應用程式,而不會通知使用者,也不會要求使用者明確的批准;

signatureOrSystem

系統只會把這種許可權授予Android系統映象中應用程式,或者是那些與系統映象中具有相同證書籤名的應用程式。請避免使用這個選項,因為signature型別的許可權應該足以滿足大多數工作的需要。SingatureOrSystem許可權主要用於某些特定的場景,如:多個廠商有一些要構建在系統映象中的應用程式,並且它們共享一些明確的特殊功能。

<permission-group

        android:description="string resource"

     android:icon="drawable resource"

     android:label="string resource"

     android:name="string" />

被包含於:

說明:

給相關的許可權宣告一個邏輯上的分組名稱。獨立的許可權要通過<permission>元素的permissionGroup屬性來加入許可權分組。同一分組的中成員會一起展現在使用者的介面中。

要注意的是這個元素本身並不能宣告許可權,它只是放置相關許可權的一個分類。

屬性:

android:description:這個屬性用於給許可權組定義一個使用者可讀的說明性文字。這個文字應該比標籤更長、更詳細。這個屬性必須要引用一個字串資源,跟label屬性不一樣,它不能夠使用原生的字串。

android:icon:屬性定義了一個代表權限的圖示。這個屬性要使用包含圖片定義的可繪製資源來定義。

android:label:這個屬性給許可權組定義了一個使用者可讀的名稱。

android:name:定義了許可權組的名稱。

<permission-tree

        android:icon="drawable resource"

     android:label="string resource" ]

     android:name="string" />

被包含於:

說明:

這個元素用於宣告許可權樹的根節點名稱,應用程式持有樹中定義的所有許可權名稱所對應的許可權。通過呼叫PackageManager.addPermission()方法能夠動態的來新增新的許可權。樹中的名稱是通過”.”來分離的。例如:如果跟節點的名稱是com.example.project.taxes,那麼可以使用下面的格式來新增許可權:

com.example.project.taxes.CALCULATE

com.example.project.taxes.deductions.MAKE_SOME_UP

com.example.project.taxes.deductions.EXAGGERATE

要注意的是,這個元素本身並不宣告許可權,它只是一個能夠放置更多許可權的名稱空間 。

屬性:

android:icon:屬性定義了一個代表數中所有許可權的圖示。這個屬性要使用包含圖片定義的可繪製資源來定義。

android:label:給許可權樹定義一個使用者可讀的名稱。

android:name:這個屬性定義了許可權樹根節點的名稱,在命名中必須要有兩個以上的”.”來進行分離。這個名稱必須是唯一的

5、測試標籤屬性

<instrumentation

        android:functionalTest=["true" | "false"]

     android:handleProfiling=["true" | "false"]

     android:icon="drawable resource"

     android:label="string resource"

     android:name="string"

被包含於:

說明:

測試工程的屬性,該元素宣告一個測試類,用於測試指定的應用程式。該測試類的物件會在應用的其他所有元件被例項化之前例項化。

屬性:

android:functionalTest:(測試功能開關)這個屬性用於指定Instrumentation類是否應該作為一個功能性的測試來執行。如果設定為true,這要執行,否則不應該執行。預設值是false。

android:handleProfiling:(除錯功能開關)這個屬性用於指定Instrumentation物件是否會開啟和關閉分析功能。如果設定為true,那麼由Instrumentation物件來決定分析功能的啟動和終止時機,如果設定為false,則分析功能會持續到Instrumentation物件整個執行週期。如果設定為true,會使Instrumentation物件針對一組特定的操作來進行分析。預設值是false。

android:icon:測試類圖示

android:label:定義一個使用者可讀的名稱。

android:name:測試類的名稱

android:targetPackage:指定要測試的應用程式

6、系統標籤

這幾個標籤第三方app是不能使用的,只有系統app才能使用。

<protected-broadcast android:name="action string" />

被包含於:

說明:

此處指定一個廣播,該廣播只能被系統傳送。

注意:只有系統appliaction才能在其AndroidManifest.xml中定義Protected Broadcast,系統appliaction包括/system/framework、/system/app、vendor/app下的package,因此裝置中安裝的第三方apk中如果定義了Protected Broadcast,那麼這個Protected Broadcast將不生效。

<package-verifier />

被包含於:

說明:

待補充…

<original-package />

被包含於:

說明:

待補充…

7、<application>屬性

<application

     android:backupAgent="string"

     android:debuggable=["true" | "false"]

     android:description="string resource"

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

     android:hasCode=["true" | "false"]

     android:icon="drawable resource"

     android:killAfterRestore=["true" | "false"]

     android:largeHeap=["true" | "false"]

     android:label="string resource"

     android:logo="drawable resource"

     android:name="string"

     android:permission="string"

     android:persistent=["true" | "false"]

     android:process="string"

     android:supportsRtl=["true" | "false"]

     android:theme="resource or theme"

     android:uiOptions=["none" |"splitActionBarWhenNarrow"] >

         .. .

</application>

被包含於:

包含:

說明:

這個元素用於應用程式的宣告。它包含了每個應用程式元件所宣告的子元素,並且還有能夠影響所有元件的屬性。其中的很多屬性(如icon、label、permission、 process、taskAffinity和allowTaskReparenting)會給元件元素中對應的屬性設定預設值。其他的給是應用程式整體設定的值(如debuggable、enabled、description、allowClearUserData),並且這些屬性值不能被元件的屬性所 覆蓋。

屬性:

Android:allowTaskReparenting:當一個與當前任務有親緣關係的任務(也就是android:taskAffinity指定的task)被帶到前臺時,用這個屬性來指定應用程式中定義的Activity能否從他們當前的任務中轉移到這個有親緣關係的任務中。如果設定為true,則能夠轉移,如果設定為false,則應用程式中的Activity必須保留在它們所在的任務中。預設值是false。

android:taskAffinity:這個屬性給應用的所有的Activity設定了一個親緣關係名,除了那些用它們自己的taskAffinity屬性設定不同親緣關係的元件。預設情況下,應用程式中的所有Activity都會共享相同的親緣關係,親緣關係的名稱跟<manifest>元素設定的包名相同。

經典理解:就是說,一個activity1原來屬於task1,但是如果task2啟動起來的話,activity1可能不再屬於task1了,轉而投奔task2去了。

注意:以上兩個屬性一般一起使用,它們可以在application中設定(這樣對所有的activity有效),也可以對單個的activity進行設定。

android:backupAgent