android之AndroidManifest.xml簡述

 

AndroidManifest.xml文件是Android系統重要的權限申請和定義配置文件,程序員在開發時需要通過其來向系統預先定義和申請應用程序運行所需要的權限。靈活、安全地使用該配置文件是Android安全保障的一個不可忽視的方面,本文對AndroidManifest文件進行詳細介紹。
 

瞭解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文件的結構及元素


AndroidManifest.xml文件的結構、元素,以及元素的屬性,可以在AndroidSDK文檔中查看詳細說明。而在看這些衆多的元素以及元素的屬性前,需要先了解一下這些元素在命名、結構等方面的規則:
元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出現一次。如果一個元素包含有其他子元素,必須通過子元素的屬性來設置其值。處於同一層次的元素,這些元素的說明是沒有順序的。
屬性:按照常理,所有的屬性都是可選的,但是有些屬性是必須設置的。那些真正可選的屬性,即使不存在,其也有默認的數值項說明。除了根元素<manifest>的屬性,所有其他元素屬性的名字都是以android:前綴的;
定義類名:所有的元素名都對應其在SDK中的類名,如果你自己定義類名,必須包含類的數據包名,如果類與application處於同一數據包中,可以直接簡寫爲“.”;
多數值項:如果某個元素有超過一個數值,這個元素必須通過重複的方式來說明其某個屬性具有多個數值項,且不能將多個數值項一次性說明在一個屬性中;
資源項說明:當需要引用某個資源時,其採用如下格式:@[package:]type:name。例如<activity android:icon=”@drawable/icon ” . . .>
字符串值:類似於其他語言,如果字符中包含有字符“\”,則必須使用轉義字符“\\”;
下面結合cookie實例中的AndroidManifest.xml文件來說明一下,原XML文件如下:

<?xml version=”1.0″ encoding=”utf-8″?> 
<manifest xmlns:android=”http://schemas.android.com/apk/res/android” 
package=”moandroid.cookie” 
android:versionCode=”1″ 
android:versionName=”1.0″> 
<application android:icon=”@drawable/icon” android:label=”@string/app_name”> 
<activity android:name=”.cookie” android:label=”@string/app_name”> 
<intent-filter> 
<action android:name=”android.intent.action.MAIN” /> 
<category android:name=”android.intent.category.LAUNCHER” /> 
</intent-filter> 
</activity> 
</application> 
<uses-sdk android:minSdkVersion=”3″ /> 
</manifest> 


除了頭部的XML信息說明外,首先是manifest項(也就是根節點),其屬性包括:schemas URL地址、包名(moandroid.cookie),以及程序的版本說明。其次是manifest的子節點application,其屬性包括:程序圖標、程序名稱。前面帶有@表示引用資源,例如:@drawable/icon表示引用的是drawable資源中的icon,可以在其源工程的res/drawable中找到。然後就是application的子節點activity,其屬性包括:activity的名稱、activity的標籤名,其子節點intent-filter則是對activity的說明。
而在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。
如何進行應用程序權限申請
如下所示,文中黑體標記的部分爲應用程序權限申請內容:
<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="cn.com.fetion.android" 
     android:versionCode="1" 
     android:versionName="1.0.0"> 
   <application android:icon="@drawable/icon" android:label="@string/app_name"> 
       <activity android:name=".welcomActivity" 
                  android:label="@string/app_name"> 
            <intent-filter> 
                <action android:name="android.intent.action.MAIN" /> 
                <category android:name="android.intent.category.LAUNCHER" /> 
            </intent-filter> 
        </activity> 
   </application> 
  <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
</manifest> 


如上述文件描述中加下劃線的斜體部分,該文件的作用是說明該軟件需要發送短信的功能。
Android定義了百餘種permission,可供開發人員使用,具體詳見網址。
自定義權限
在文件中,用戶還可以自定義權限。permission就是自定義權限的聲明,可以用來限制app中特殊組件,特性與app內部或者和其他app之間訪問。寫了一個引用自定義權限的例子,在安裝app的時候,提示權限:
定義權限如下:
<permission android:label="”自定義權限”"  
    android:description=”@string/test”  
    android:name=”com.example.project.TEST”  
    android:protectionLevel=”normal”  
    android:icon=”@drawable/ic_launcher”>

 
聲明的含義如下;
android:label:權限名字,顯示給用戶的,值可是一個string數據,例如這裏的“自定義權限”。
android:description:比label更長的對權限的描述。值是通過resource文件中獲取的,不能直接寫string值,例如這裏的”@string/test”。
android:name:權限名字,如果其他app引用該權限需要填寫這個名字。
android:protectionLevel:權限級別,分爲4個級別:
normal:低風險權限,在安裝的時候,系統會自動授予權限給application。
dangerous:高風險權限,系統不會自動授予權限給app,在用到的時候,會給用戶提示。
signature:簽名權限,在其他app引用聲明的權限的時候,需要保證兩個app的簽名一致。這樣系統就會自動授予權限給第三方app,而不提示給用戶。
signatureOrSystem:這個權限是引用該權限的app需要有和系統同樣的簽名才能授予的權限,一般不推薦使用。
發佈了91 篇原創文章 · 獲贊 88 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章