AndroidManifest.xml文件詳解(manifest)

語法(SYNTAX):

<manifestxmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" |"preferExternal"]>
    . . .
</manifest>

被包含於(CONTAINED IN):

必須包含的元素(MUST CONTAIN):

<application>

可能包含的元素(CAN CONTAIN):

<instrumentation>

<permission>

<permission-group>

<permission-tree>

<uses-configuration>

<uses-permission>

<uses-sdk>

說明(DESCRIPTION):

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

屬性(ATTRIBUTES):

xmlns:android

這個屬性用於定義Android的命名空間。始終應該設置為:http://schemas.android.com/apk/android。

package

這個屬性給應用程序定義瞭一個完整的Java樣式的包名。這個名稱應該是唯一的。名稱中可以包含大寫或小寫字母、數字以及下劃線(‘_’)。但是包名的每段都隻能用字母開始。

應該使用所擁有的互聯網域名作為基本的包名,以避免與其他開發者的沖突。例如,由Google發佈的應用程序的包名都用com.google開始。在發佈應用程序時永遠不要使用com.example命名空間。

包名用於唯一的標識應用程序。它還是應用程序進程的默認名稱(看<application>元素的process屬性)和Activity的默認親緣任務(請看<activity>元素的taskAffinity屬性)。

警告:應用程序一旦發佈,就不能夠改變它的包名稱瞭。包名定義瞭應用程序的標識,因此如果改變它,那麼它就會被認為是不同的應用程序,並且之前版本的用戶就不能夠把應用升級到新版本。

android:sharedUserId

這個屬性定義瞭一個Linux用戶ID的名稱,這個名稱能夠跟其他應用程序共享。默認情況下,Android會給它的每個應用程序都分配一個唯一的用戶ID。但是,如果有兩個或更多的應用程序把這個屬性都設置瞭相同的值,那麼它們將共享這個相同的ID—具有相同的數字簽名。擁有相同用戶ID的應用程序能夠訪問彼此的數據,並且如果期望,它們也可運行在相同的進程中。

android:sharedUserLabel

這個屬性給共享的用戶ID定義瞭一個用戶可讀的標簽。這個標簽必須用字符串資源來設置,不能使用原生的字符串。

這個屬性在API Level 3中被引入,隻有在sharedUserId屬性被設置,這個屬性才有意義。

android:versionCode

這個屬性定義一個內部版本號,它僅用於判斷一個版本是否比另一個版本新,數字越大表明版本越新。這個版本號不顯示給用戶,顯示給用戶的版本號要用versionName屬性設置。

它的屬性值必須是一個整數,如100。你可以按照自己的想法來定義它,隻要保持後續版本號的數字更大。例如,它可以是一個版本號;也可以把x.y格式中的版本數字轉換成一個由x和y分別編碼的16位整數,x在低8位,y在高8位;也可以在每次發佈版本時簡單的增加數字的大小。

android:versionName

這個屬性用於設置一個顯示給永的版本號。屬性值可以是原生的字符串,也可以引用一個字符串資源。這個字符串除瞭顯示給用戶之外,沒有其他用途。而versionCode屬性卻擁有內部使用的版本號。

android:installLocation

這個屬性用於設置應用程序默認的安裝位置。

用下表中的關鍵詞來設置屬性值。

  

說明
internalOnly 應用程序必須隻被安裝在內部設備存儲器上。如果設置這個值,應用程序永遠不會被安裝在外部存儲器上。如果內部存儲空間不足,那麼系統不會安裝這個應用程序。如果沒有定義android:installLocation屬性,就會使用這個值作為默認值。
auto 應用程序可以安裝在外部存儲器上,但是,默認情況下,系統會把應用程序安裝在內部存儲器上。如果內部存儲空間不足,那麼系統會把應用程序安裝在外部存儲器上。一旦安裝,用戶能夠通過系統設置在內外存儲器之間來移動應用程序。
preferExternal 應用程序偏好安裝在外部存儲器上(SD卡)。系統並不保證恪守這一個規則。如果外部存儲器不可用或空間不足,或者應用程序使用瞭forward-locking機制(這種機制不支持外部存儲),那麼應用程序就可以安裝在內部存儲器上。一旦安裝,用戶能夠通過系統設置在內外存儲器之間移動應用程序。

 

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

註意:默認情況下,應用程序會被安裝在內部存儲器上,除非把這個屬性值定義為auto或preferExternal,應用程序才能夠被安裝在外部存儲器上。
當應用程序被安裝在外部存儲器上的時候:

1. .apk文件被保存在外部存儲器上,但是任何應用程序數據(如數據庫)依然被保存在內部設備存儲器上;

2. 用一個key把存儲器中保存的.apk文件加密,隻允許應用程序在安裝它的設備上運行。用戶不能把安裝在SD卡上應用程序轉移到另一個設備的SD卡上,雖然在一個設備上能夠使用多個SD卡。

3. 在用戶要求的時候,應用程序能夠被轉移到內部存儲器上。

用戶也可以要求把應用程序從內部存儲器移動到外部存儲器上。但是,如果這個屬性被設置為internalOnly,那麼系統不允許用戶把應用程序轉移到外部存儲器上。

這個屬性在API Level 8中被引入。

被引入的版本(INTRODUCED IN):

除非屬性說明中註釋瞭引入的API Level版本,否則都是在API Level 1中引入的。

 

 

摘自 FireOfStar的專欄

發佈留言