1. 程式人生 > >AndroidManifest.xml中常用屬性及含義

AndroidManifest.xml中常用屬性及含義

一、 關於AndroidManifest.xml

      AndroidManifest.xml 是每個android程式中必須的檔案。它位於整個專案的根目錄,描述了package中暴露的元件(activities, services, 等等),他們各自的實現類,各種能被處理的資料和啟動位置。 除了能宣告程式中的Activities, ContentProviders, Services,Intent Receivers,還能指定permissionsinstrumentation(安全控制和測試)

、 第一層(<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>

Axmlns:android

Bpackage

指定本應用內java主程式包的包名,它也是生成的應用程式資原始檔的索引類(R)的包名。

CsharedUserId

預設情況下,Android給每個APK分配一個唯一的UserID將不同APKsharedUserId都設為一樣,則這些APK之間就可以互相共享資料了。

DsharedUserLabel

一個共享的使用者名稱,它只有在設定了sharedUserId屬性的前提下才會有意義

EversionCode

給裝置程式識別版本(升級)用的版本號。

FversionName

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>

Aandroid:allowBackup

allowBackup標誌值為true時,即可通過adb backupadb restore來備份和恢復應用程式資料;

B、android:allowClearUserData

  使用者是否能選擇自行清除資料,預設為true

C、android:allowTaskReparenting

是否允許activity更換從屬的任務

Dandroid:icon

  宣告APP圖示。

Eandroid:description/android:label

此兩個屬性都是為許可提供的,均為字串資源,當用戶去看許可列表(android:label)或者某個許可的詳細資訊(android:description)時,這些字串資源就可以顯示給使用者。label應當儘量簡短,之需要告知使用者該許可是在保護什麼功能就行。 而description可以用於具體描述獲取該許可的程式可以做哪些事情,實際上讓使用者可以知道如果他們同意程式獲取該許可權的話,該程式可以做什麼。我 們通常用兩句話來描述許可,第一句描述該許可,第二句警告使用者如果批准該許可權會可能有什麼不好的事情發生

Fandroid: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>

Aandroid:name

  Activity 名。

Bandroid:label

  引用。

Candroid:clearTaskOnLaunch 

比如 P activity, Q 是被P觸發的 activity,然後返回Home,重新啟動 P,是否顯示Q

Dandroid:enabled

Android系統是否能夠例項化該應用程式的元件,如果為true,每個元件的enabled屬性決定那個元件是否可以被enabled。如果為false,它覆蓋元件指定的值;所有元件都是disabled

Eandroid:finishOnTaskLaunch

當用戶重新啟動這個任務的時候,是否關閉已開啟的activity,預設是false,優先於allowTaskReparenting

Fandroid:multiprocess

是否允許多程序,預設是false

Gandroid:permission

設定許可名,這個屬性若在<application>上定義的話,是一個給應用程式的所有元件設定許可的便捷方式,當然它是被各元件設定的許可名所覆蓋的

Handroid:process

應用程式執行的程序名,預設值為<manifest>元素裡設定的包名

Iandroid: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>

Aaction屬性

action很簡單,只有android:name這個屬性。常見的android:name值為android.intent.action.MAIN,表明此activity是作為應用程式的入口。

Bcategory屬性

  Category、只有android:name屬性。常見的android:name值為android.intent.category.LAUNCHER(決定應用程式是否顯示在程式列表裡)

Cdata屬性

<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型別)。它有四個屬性schemehostportpath對應於URI的每個部分:

scheme://host:port/path

scheme的值一般為"http"host為包名,port為埠號,path為具體地址。如:http://com.test.project:200/folder/etc

其中hostport合起來構成URI的憑據(authority),如果host沒有指定,則port也會被忽略

要讓authority有意義,scheme也必須要指定。要讓path有意義,scheme+authority也必須要指定

2mimeType(指定資料型別),若mimeType'Image',則會從content Provider的指定地址中獲取image型別的資料。還有'video'啥的,若設定為video/mp4,則表示在指定地址中獲取mp4格式的video檔案

3】而pathPatternPathPrefix主要是為了格式化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)

Bandroid:resource

  (解釋:資源的一個引用,指定給這個項的值是該資源的id。該id可以通過方法Bundle.getInt()來從meta-data中找到。)

Candroid: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