安卓開發——AndroidManifest.xml配置詳解一
AndroidManifest.xml配置檔案稱為清單檔案,對於Android應用開發來說是非常重要的基礎知識,在學習中總結該配置檔案中重點的用法,以便日後查閱。下面是一個標準的AndroidManifest.xml檔案樣例。
Android配置檔案採用XML作為描述語言,每個XML標籤都不同的含義,大部分的配置引數都放在標籤的屬性中,下面我們便按照以上配置檔案樣例中的先後順序來學習Android配置檔案中主要元素與標籤的用法。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>
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等。
***************************************************************************************************************************************************