ZNDS智能電視網 推薦當貝市場

TV應用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 11431|回復: 0
上一主題 下一主題
[教程]

專家專欄:AndroidManifest.xml文件詳解

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2013-8-28 16:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
0本文為安全專家李洋的最新一篇專欄文章《AndroidManifest.xml文件詳解》。AndroidManifest.xml是一個跟安全相關的配置文件,該配置文件是Android安全保障的一個不可忽視的方面,本文對AndroidManifest文件進行詳細介紹。以下為全部內容:   
AndroidManifest.xml主要包含以下功能:   
說明application的java 數據包,數據包名是application的唯一標識;描述application的component;說明application的component運行在哪個process下;聲明application所必須具備的權限,用以訪問受保護的部分API,以及與其他application的交互;聲明application其他的必備權限,用以component之間的交互;列舉application運行時需要的環(huán)境配置信息,這些聲明信息只在程序開發(fā)和測試時存在,發(fā)布前將被刪除;聲明application所需要的AndroidAPI的最低版本級別,例如1.0,1.1,1.5等;列舉application所需要鏈接的庫;   
   
AndroidManifest.xml文件的結構、元素,以及元素的屬性,可以在AndroidSDK文檔中查看詳細說明。而在看這些眾多的元素以及元素的屬性前,需要先了解一下這些元素在命名、結構等方面的規(guī)則:   
元素:在所有的元素中只有<manifest>和<application>是必需的,且只能出現一次。如果一個元素包含有其他子元素,必須通過子元素的屬性來設置其值。處于同一層次的元素,這些元素的說明是沒有順序的。屬性:按照常理,所有的屬性都是可選的,但是有些屬性是必須設置的。那些真正可選的屬性,即使不存在,其也有默認的數值項說明。除了根元素<manifest>的屬性,所有其他元素屬性的名字都是以android:前綴的;定義類名:所有的元素名都對應其在SDK中的類名,如果你自己定義類名,必須包含類的數據包名,如果類與application處于同一數據包中,可以直接簡寫為“.”;多數值項:如果某個元素有超過一個數值,這個元素必須通過重復的方式來說明其某個屬性具有多個數值項,且不能將多個數值項一次性說明在一個屬性中;資源項說明:當需要引用某個資源時,其采用如下格式:@[package:]type:name。例如<activity android:icon=”@drawable/icon ” . . .>字符串值:類似于其他語言,如果字符中包含有字符“”,則必須使用轉義字符“\”;   
   
下面結合cookie實例中的AndroidManifest.xml文件來說明一下,原XML文件如下:   
  1. <?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項(也就是根節(jié)點),其屬性包括:schemas URL地址、包名(moandroid.cookie),以及程序的版本說明。其次是manifest的子節(jié)點application,其屬性包括:程序圖標、程序名稱。前面帶有@表示引用資源,例如:@drawable/icon表示引用的是drawable資源中的icon,可以在其源工程的res/drawable中找到。然后就是application的子節(jié)點activity,其屬性包括:activity的名稱、activity的標簽名,其子節(jié)點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。   
如下所示,文中黑體標記的部分為應用程序權限申請內容:   
  1. <?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>
復制代碼
如上述文件描述中加下劃線的斜體部分,該文件的作用是說明該軟件需要發(fā)送短信的功能。   
Android定義了百余種permission,可供開發(fā)人員使用,具體詳見網址。   
在文件中,用戶還可以自定義權限。permission就是自定義權限的聲明,可以用來限制app中特殊組件,特性與app內部或者和其他app之間訪問。寫了一個引用自定義權限的例子,在安裝app的時候,提示權限:   
定義權限如下:   
  1. <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需要有和系統同樣的簽名才能授予的權限,一般不推薦使用。   
   

上一篇:如何在Android emulator上安裝 APK
下一篇:《Android Dev Guide》系列教程4:應用基礎之Activities 和任務
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標簽|軟件|Sitemap|ZNDS智能電視網 ( 蘇ICP備2023012627號 )

網絡信息服務信用承諾書 | 增值電信業(yè)務經營許可證:蘇B2-20221768 丨 蘇公網安備 32011402011373號

GMT+8, 2025-1-3 09:14 , Processed in 0.065668 second(s), 18 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復 返回頂部 返回列表