AndroidManifest.xml中常用屬性及含義
一、 關於AndroidManifest.xml
AndroidManifest.xml 是每個android程式中必須的檔案。它位於整個專案的根目錄,描述了package中暴露的元件(activities, services, 等等),他們各自的實現類,各種能被處理的資料和啟動位置。 除了能宣告程式中的Activities, ContentProviders, Services,和Intent Receivers,還能指定permissions和instrumentation(安全控制和測試)
二、 第一層(<Manifest>)屬性
<span style="font-size:14px;"><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.edu.bztc.happyidiom" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="1" android:versionName="1.0" </manifest></span>
A、xmlns:android
B、package
指定本應用內java主程式包的包名,它也是生成的應用程式資原始檔的索引類(R)的包名。
C、sharedUserId
預設情況下,Android給每個APK分配一個唯一的UserID。將不同APK的sharedUserId都設為一樣,則這些APK之間就可以互相共享資料了。
D、sharedUserLabel
一個共享的使用者名稱,它只有在設定了sharedUserId屬性的前提下才會有意義。
E、versionCode
給裝置程式識別版本(升級)用的版本號。
F、versionName
App版本號(使用者可見)。
三、第二層(<Application>)
<strong><span style="font-size:14px;"><application android:allowBackup="true" android:allowClearUserData=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:icon="@drawable/logo" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> </application></span></strong>
A、android:allowBackup
當allowBackup標誌值為true時,即可通過adb backup和adb restore來備份和恢復應用程式資料;
B、android:allowClearUserData
使用者是否能選擇自行清除資料,預設為true
C、android:allowTaskReparenting
是否允許activity更換從屬的任務。
D、android:icon
宣告APP圖示。
E、android:description/android:label
此兩個屬性都是為許可提供的,均為字串資源,當用戶去看許可列表(android:label)或者某個許可的詳細資訊(android:description)時,這些字串資源就可以顯示給使用者。label應當儘量簡短,之需要告知使用者該許可是在保護什麼功能就行。 而description可以用於具體描述獲取該許可的程式可以做哪些事情,實際上讓使用者可以知道如果他們同意程式獲取該許可權的話,該程式可以做什麼。我 們通常用兩句話來描述許可,第一句描述該許可,第二句警告使用者如果批准該許可權會可能有什麼不好的事情發生
F、android:theme
是一個資源的風格,它定義了一個預設的主題風格給所有的activity,當然也可以在自己的theme裡面去設定它,有點類似style。
四、第三層(<Activity>)屬性
<span style="font-size:14px;"><activity android:name="cn.edu.bztc.happyidiom.activity.MainActivity"
android:label="@string/title_activity_main"
android:clearTaskOnLaunch=["true" | "false"]
android:enabled=["true" | "false"]
android:finishOnTaskLaunch=["true" | "false"]
android:multiprocess=["true" | "false"]
android:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nosensor"]>
</activity></span>
A、android:name
Activity 名。
B、android:label
引用。
C、android:clearTaskOnLaunch
比如 P 是activity, Q 是被P觸發的 activity,然後返回Home,重新啟動 P,是否顯示Q。
D、android:enabled
Android系統是否能夠例項化該應用程式的元件,如果為true,每個元件的enabled屬性決定那個元件是否可以被enabled。如果為false,它覆蓋元件指定的值;所有元件都是disabled。
E、android:finishOnTaskLaunch
當用戶重新啟動這個任務的時候,是否關閉已開啟的activity,預設是false,優先於allowTaskReparenting
F、android:multiprocess
是否允許多程序,預設是false
G、android:permission
設定許可名,這個屬性若在<application>上定義的話,是一個給應用程式的所有元件設定許可的便捷方式,當然它是被各元件設定的許可名所覆蓋的。
H、android:process
應用程式執行的程序名,預設值為<manifest>元素裡設定的包名。
I、android:screenOrientation
activity顯示的模式
預設為unspecified:由系統自動判斷顯示方向
andscape橫屏模式,寬度比高度大
portrait豎屏模式,高度比寬度大
user模式,使用者當前首選的方向
behind模式:和該Activity下面的那個Activity的方向一致(在Activity堆疊中的)
sensor模式:有物理的感應器來決定。如果使用者旋轉裝置這螢幕會橫豎屏切換
nosensor模式:忽略物理感應器,這樣就不會隨著使用者旋轉裝置而更改了
五、第四層(<Activity>)屬性
<span style="font-size:14px;"><strong><intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data />
</intent-filter> </strong></span>
A、action屬性
action很簡單,只有android:name這個屬性。常見的android:name值為android.intent.action.MAIN,表明此activity是作為應用程式的入口。
B、category屬性
Category、只有android:name屬性。常見的android:name值為android.intent.category.LAUNCHER(決定應用程式是否顯示在程式列表裡)
C、data屬性
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string"/>
【1】每個<data>元素指定一個URI和資料型別(MIME型別)。它有四個屬性scheme、host、port、path對應於URI的每個部分:
scheme://host:port/path
scheme的值一般為"http",host為包名,port為埠號,path為具體地址。如:http://com.test.project:200/folder/etc
其中host和port合起來構成URI的憑據(authority),如果host沒有指定,則port也會被忽略
要讓authority有意義,scheme也必須要指定。要讓path有意義,scheme+authority也必須要指定
【2】mimeType(指定資料型別),若mimeType為'Image',則會從content Provider的指定地址中獲取image型別的資料。還有'video'啥的,若設定為video/mp4,則表示在指定地址中獲取mp4格式的video檔案
【3】而pathPattern和PathPrefix主要是為了格式化path所使用的.
七、第四層<meta-data>
<span style="font-size:14px;"><strong>meta-data android:name="string"
android:resource="resource specification"
android:value="string"/></strong></span>
這是該元素的基本結構.可以包含在<activity> <activity-alias> <service> <receiver>四個元素中。
A、android:name
(解釋:元資料項的名字,為了保證這個名字是唯一的,採用java風格的命名規範,如com.woody.project.fried)
B、android:resource
(解釋:資源的一個引用,指定給這個項的值是該資源的id。該id可以通過方法Bundle.getInt()來從meta-data中找到。)
C、android:value
(解釋:指定給這一項的值。可以作為值來指定的資料型別並且元件用來找回那些值的Bundle方法:[getString],[getInt],[getFloat],[getString],[getBoolean])
八、其他屬性
1.<uses-sdk />
<span style="font-size:14px;"><uses-sdk android:minSdkVersion="integer"
android:targetSdkVersion="integer"
android:maxSdkVersion="integer"/></span>
描述應用所需的api版本,在此屬性中可以指定支援的最小版本,目標版本以及最大版本
2.<instrumentation />
<span style="font-size:14px;"><instrumentation android:functionalTest=["true" | "false"]
android:handleProfiling=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:targetPackage="string"/></span>
定義一些用於探測和分析應用效能等等相關的類,可以監控程式。在各個應用程式的元件之前instrumentation類被例項化
android:functionalTest(解釋:instrumentation類是否能執行一個功能測試,預設為false)
3.<permission>、<uses-permission>、<permission-tree />、<permission-group />
當我們需要獲取某個許可權才能訪問某個元件(Activity,Serivice,ContentProver)或資料時,就必須在我們的manifest檔案中使用<uses-permission>來宣告獲得該許可權。注意此<uses-permission>與<application>同級元件。
為了安全,我們可以在元件(Activity,Serivice,ContentProver)中宣告別的應用程式需要某些permission才能訪問它們,這樣別的應用程式如果要訪問這些元件的話,就需要在他們manifest檔案中使用<uses-permission>來宣告獲得這些許可權
比如:
<permission android:name="com.teleca.project.MY_SECURITY" . . . />
那麼在activity中就可以宣告需要這個自定義許可權才能啟動該Activity了。
當別的應用程式需要啟動你的名為“XXX”的Activity時,就需要使用<uses-permission>來宣告需要獲得許可權com.teleca.project.MY_SECURITY<permission-group>就是宣告一個標籤,該標籤代表了一組permissions,而<permission-tree>是為一組permissions聲明瞭一個namespace。