AndroidManifest.xml檔案詳解
本文為安全專家李洋的最新一篇專欄文章《AndroidManifest.xml檔案詳解》。AndroidManifest.xml是一個跟安全相關的配置檔案,該配置檔案是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需要有和系統同樣的簽名才能授予的許可權,一般不推薦使用。
相關文章
- AndroidManifest.xml配置檔案詳解 .AndroidXML
- AndroidManifest.xml檔案內容詳解AndroidXML
- Android學習筆記之AndroidManifest.xml檔案解析(詳解)Android筆記XML
- AndroidManifest.xml檔案解析AndroidXML
- 清單檔案 AndroidManifest.xmlAndroidXML
- Dockerfile檔案詳解Docker
- mtl檔案詳解
- cmake檔案詳解
- BMP檔案詳解
- LD檔案詳解
- java class檔案詳解Java
- JavaScript 檔案物件詳解JavaScript物件
- redis 配置檔案詳解Redis
- Class 檔案格式詳解
- haproxy配置檔案詳解
- Scala檔案操作詳解
- redis配置檔案詳解Redis
- Dockerfile檔案全面詳解Docker
- SSH配置檔案詳解
- zookeeper配置檔案詳解
- nginx配置檔案詳解Nginx
- WCF配置檔案詳解
- Java Class檔案詳解Java
- 控制檔案詳解(轉)
- /etc/fstab檔案詳解
- JPEG檔案編/解碼詳解 .
- Nginx的配置檔案詳解Nginx
- MachO 檔案結構詳解Mac
- managed-schema 檔案詳解
- vim的配置檔案詳解
- C++ 檔案操作詳解C++
- Hibernate配置檔案詳解
- BIND配置檔案詳解(三)
- Spring 配置檔案詳解Spring
- vsftpd配置檔案詳解FTP
- struts檔案上傳詳解
- Nagios配置檔案詳解iOS
- WINDOWS系統檔案詳解Windows