本文爲安全專家李洋的最新一篇專欄文章,來自51CTO.COM的專欄java
AndroidManifest.xml文件是Android系統重要的權限申請和定義配置文件,程序員在開發時須要經過其來向系統預先定義和申請應用程序運行所須要的權限。靈活、安全地使用該配置文件是Android安全保障的一個不可忽視的方面。android
瞭解AndroidManifest.xml文件的主要用途程序員
AndroidManifest.xml主要包含如下功能:安全
說明application的java 數據包,數據包名是application的惟一標識;
描述application的component;
說明application的component運行在哪一個process下;
聲明application所必須具有的權限,用以訪問受保護的部分API,以及與其餘application的交互;
聲明application其餘的必備權限,用以component之間的交互;
列舉application運行時須要的環境配置信息,這些聲明信息只在程序開發和測試時存在,發佈前將被刪除;
聲明application所須要的AndroidAPI的最低版本級別,例如1.0,1.1,1.5等;
列舉application所須要連接的庫;
熟悉AndroidManifest.xml文件的結構及元素cookie
AndroidManifest.xml文件的結構、元素,以及元素的屬性,能夠在AndroidSDK文檔中查看詳細說明。而在看這些衆多的元素以及元素的屬性前,須要先了解一下這些元素在命名、結構等方面的規則:app
元素:在全部的元素中只有<manifest>和<application>是必需的,且只能出現一次。若是一個元素包含有其餘子元素,必須經過子元素的屬性來設置其值。處於同一層次的元素,這些元素的說明是沒有順序的。
屬性:按照常理,全部的屬性都是可選的,可是有些屬性是必須設置的。那些真正可選的屬性,即便不存在,其也有默認的數值項說明。除了根元素<manifest>的屬性,全部其餘元素屬性的名字都是以android:前綴的;
定義類名:全部的元素名都對應其在SDK中的類名,若是你本身定義類名,必須包含類的數據包名,若是類與application處於同一數據包中,能夠直接簡寫爲「.」;
多數值項:若是某個元素有超過一個數值,這個元素必須經過重複的方式來講明其某個屬性具備多個數值項,且不能將多個數值項一次性說明在一個屬性中;
資源項說明:當須要引用某個資源時,其採用以下格式:@[package:]type:name。例如<activity android:icon=」@drawable/icon 」 . . .>
字符串值:相似於其餘語言,若是字符中包含有字符「\」,則必須使用轉義字符「\\」;測試
下面結合cookie實例中的AndroidManifest.xml文件來講明一下,原XML文件以下:spa
<?xmlversion=」1.0″ encoding=」utf-8″?>
<manifestxmlns:android=」http://schemas.android.com/apk/res/android」
package=」moandroid.cookie」
android:versionCode=」1″
android:versionName=」1.0″>
<applicationandroid:icon=」@drawable/icon」 android:label=」@string/app_name」>
<activityandroid:name=」.cookie」 android:label=」@string/app_name」>
<intent-filter>
<actionandroid:name=」android.intent.action.MAIN」 />
<categoryandroid:name=」android.intent.category.LAUNCHER」 />
</intent-filter>
</activity>
</application>
<uses-sdkandroid:minSdkVersion=」3″ />
</manifest>component
除了頭部的XML信息說明外,首先是manifest項(也就是根節點),其屬性包括:schemas URL地址、包名(moandroid.cookie),以及程序的版本說明。其次是manifest的子節點application,其屬性包括:程序圖標、程序名稱。前面帶有@表示引用資源,例如:@drawable/icon表示引用的是drawable資源中的icon,能夠在其源工程的res/drawable中找到。而後就是application的子節點activity,其屬性包括:activity的名稱、activity的標籤名,其子節點intent-filter則是對activity的說明。xml
而在intent-filter中,actionandroid:name=」android.intent.action.MAIN」和categoryandroid:name=」android.intent.category.LAUNCHER」用以說明程序啓動時的入口activity是哪一個。若是這兩個屬性值中分別含有MAIN和LAUNCHER,則說明它就是啓動程序時的入口活動。uses-sdkandroid:minSdkVersion=」3″說明程序使用的Android SDK的最低版本,其中1表示Android1.0,2表示Android 1.1,而3則表示Android1.5。