1. 程式人生 > >安卓開發——AndroidManifest.xml配置詳解一

安卓開發——AndroidManifest.xml配置詳解一

AndroidManifest.xml配置檔案稱為清單檔案,對於Android應用開發來說是非常重要的基礎知識,在學習中總結該配置檔案中重點的用法,以便日後查閱。下面是一個標準的AndroidManifest.xml檔案樣例。

xml version="1.0" encoding="utf-8"?>  
  
<manifest>  
 
    <uses-permission />  
    <permission />  
    <permission-tree />  
    <permission-group />  
    <instrumentation />  
    <uses-sdk />  
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  
       
    <application>  
        <activity>  
            <intent-filter>  
                <action />  
                <category />  
                <data />  
            intent-filter>  
            <meta-data />  
        activity>  
          
        <activity-alias>  
            <intent-filter> . . . intent-filter>  
            <meta-data />  
        <activity-alias>  
          
        <service>  
            <intent-filter> . . . intent-filter>  
            <meta-data/>  
        service>  
          
        <receiver>  
            <intent-filter> . . . intent-filter>  
            <meta-data />  
        receiver>  
          
        <provider>  
            <grant-uri-permission />  
            <meta-data />  
        provider>  
            
        <uses-library />  
    <application>  
  
manifest>  
Android配置檔案採用XML作為描述語言,每個XML標籤都不同的含義,大部分的配置引數都放在標籤的屬性中,下面我們便按照以上配置檔案樣例中的先後順序來學習Android配置檔案中主要元素與標籤的用法。

AndroidManifest.xml配置檔案的根元素,必須包含一個元素並且指定xlmns:android和package屬性。xlmns:android指定了Android的名稱空間,預設情況下是“http://schemas.android.com/apk/res/android”;而package是標準的應用包名,也是一個應用程序的預設名稱,以本書微博應用例項中的包名為例,即“com.app.demos”就是一個標準的Java應用包名,我們為了避免名稱空間的衝突,一般會以應用的域名來作為包名。當然還有一些其他常用的屬性需要注意一下,比如android:versionCode是給裝置程式識別版本用的,必須是一個整數值代表app更新過多少次;而android:versionName則是給使用者檢視版本用的,需要具備一定的可讀性,比如“1.0.0”這樣的。
標籤語法範例如下。

<manifest xmlns: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"] >

***************************************************************************************************************************************************

為了保證Android應用的安全性,應用框架制定了比較嚴格的許可權系統,一個應用必須聲明瞭正確的許可權才可以使用相應的功能,例如我們需要讓應用能夠訪問網路就需要配置“android.permission.INTERNET”,而如果要使用裝置的相機功能,則需要設定“android.permission.CAMERA”等。就是我們最經常使用的許可權設定標籤,我們通過設定android:name屬性來宣告相應的許可權名,


許可權宣告標籤,定義了供給使用的具體許可權,通常情況下我們不需要為自己的應用程式宣告某個許可權,除非需要給其他應用程式提供可呼叫的程式碼或者資料,這個時候你才需要使用標籤。該標籤中提供了android:name許可權名標籤,許可權圖示android:icon以及許可權描述android:description等屬性,另外還可以和以及配合使用來構造更有層次的、更有針對性許可權系統。標籤語法範例如下。
<permission android:description="string resource" 
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string"
    android:permissionGroup="string"
    android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />
***************************************************************************************************************************************************
用於宣告Instrumentation測試類來監控Android應用的行為並應用到相關的功能測試中,其中比較重要的屬性有:測試功能開關android:functionalTest,profiling除錯功能開關android:handleProfiling,測試用例目標物件android:targetPackage等。另外,我們需要注意的是Instrumentation物件是在應用程式的元件之前被例項化的,這點在組織測試邏輯的時候需要被考慮到。標籤語法範例如下。
<instrumentation android:functionaltest="["true"" |="" "false"]
    android:handleProfiling=["true" | "false"]
    android:icon="drawable resource"
    android:label="string resource"
    android:name="string"
    android:targetPackage="string" />
***************************************************************************************************************************************************除了
用於指定Android應用可使用的使用者庫,除了系統自帶的android.app、android.content、android.view和android.widget這些預設類庫之外,有些應用可能還需要一些其他的Java類庫作為支援,這種情況下我們就可以使用標籤讓ClassLoader載入其類庫供Android應用執行時用。標籤的用法很簡單,以下是語法範例。

<uses-library 

android:name="string"
  android:required=["true" | "false"] />

小貼士:

一個Java程式最基本的載入流程。
當執行Java程式時,首先執行JVM(Java虛擬機器),然後再把Java類載入到JVM裡頭執行,負責載入Java類的這部分就叫做ClassLoader。當然,ClassLoader是由多個部分構成的,每個部分都負責相應的載入工作。當執行一個程式的時候,JVM啟動,執行BootstrapClassLoader,該ClassLoader載入java核心API(ExtClassLoader和AppClassLoader也在此時被載入),然後呼叫ExtClassLoader載入擴充套件API,最後AppClassLoader載入CLASSPATH目錄下定義的Class,

***************************************************************************************************************************************************
使用標籤來指定支援的螢幕特徵。其中比較重要的屬性包括:螢幕自適應屬性android:resizeable,小屏(android:smallScreens)、中屏(android:normalScreens)、大屏(android:largeScreens)和特大屏(android:xlargeScreens)支援屬性,按螢幕渲染影象屬性android:anyDensity以及最小螢幕寬度屬性android:requiresSmallestWidthDp等。標籤的語法範例如下。
<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"]
    android:requiresSmallestWidthDp="integer"
    android:compatibleWidthLimitDp="integer"
    android:largestWidthLimitDp="integer"/>
應用配置的根元素,位於下層,包含所有與應用有關配置的元素,其屬性可以作為子元素的預設屬性,常用的屬性包括:應用名android:label,應用圖示android:icon,應用主題android:theme等。


Activity活動元件(即介面控制器元件)的宣告標籤,Android應用中的每一個Activity都必須在AndroidManifest.xml配置檔案中宣告,否則系統將不識別也不執行該Activity。標籤中常用的屬性有:Activity對應類名android:name,對應主題android:theme,載入模式android:launchMode,鍵盤互動模式android:windowSoftInputMode等,其他的屬性用法大家可以參考Android SDK文件學習。另外,標籤還可以包含用於訊息過濾的元素,當然還有可用於儲存預定義資料的元素,以下是標籤的語法範例。

Activity元件別名的宣告標籤,簡單來說就是Activity的快捷方式,屬性android:targetActivity表示的就是其相關的Activity名,當然必須是前面已經宣告過的Activity。除此之外,其他比較常見的屬性有:Activity別名名稱android:name,別名開關android:enabled,許可權控制android:permission等。另外,我們還需要注意的是,Activity別名也是一個獨立的Activity,可以擁有自己的和元素。Intent訊息過濾器的宣告,我們瞭解到Intent訊息對於Android應用系統來說,是非常重要的“粘合劑”,元素可以放在元素標籤中,來區分可用於處理訊息的Activity控制器、Service服務和廣播接收器Broadcast Receiver。

Service服務元件的宣告標籤,用於定義與描述一個具體的Android服務,主要屬性有:Service服務類名android:name,服務圖示android:icon,服務描述android:label以及服務開關android:enabled等。

Boardcast Receiver廣播接收器元件的宣告標籤,用於定義與描述一個具體的Android廣播接收器,其主要屬性和標籤有些類似:Boardcast Receiver接收器類名android:name,接收器圖示android:icon,接收器描述android:label以及接收器開關android:enabled等。

Content Provider內容提供者的宣告標籤。關於內容提供者元件的概念和用法請參考2.1.4.4節的內容,不再贅述。標籤除了和其他元件相同的android:name、android:icon和android:label等基礎屬性之外,還提供了用於支援其功能的特殊屬性,如:內容提供者標識名稱android:authorities,對指定URI授予許可權標識android:grantUriPermission以及具體的讀、寫許可權,即android:readPermission和android:writePermission等。

***************************************************************************************************************************************************