Android manifest文件中的標籤詳細介紹

概要

每一個Android應用都應該包含一個manifest文件,即AndroidManifest.xml。它包含了程序運行的一些必備信息,比如:
--爲Java應用程序指定一個獨一無二的名字。
--描述程序所包括的成分,如activities, services, broadcast receivers和content providers等內容。
--定義哪一個成分是主要的。比如主線程等。
--聲明程序正常運行所需要的權限。比如,讀寫SD卡等。
--聲明該程序的API Level,低於該API Level的機器不能運行該程序。
--聲明程序需要使用的設備
--聲明程序支持的分辨率
...

manifest示例如下:

複製代碼
<?xml version="1.0" encoding="utf-8"?>

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>
複製代碼

 

 


PART--01 manifest標籤

<manifest>

語法:

複製代碼
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .
</manifest>
複製代碼

描述:
manifest是AndroidManifest.xml的根節點。它必須包括一個<application>節點, 並且設定xmlns:android和包屬性。

屬性:
A xmlns:android
定義android命名空間,一般爲http://schemas.android.com/apk/res/android,這樣使得Android中各種標準屬性能在文件中使用,提供了大部分元素中的數據。
B package
指定本應用內java主程序包的包名,它也是一個應用進程的默認名稱。它也是生成的應用程序資源文件的索引類(R)的包名。
C sharedUserId
表明數據權限,因爲默認情況下,Android給每個APK分配一個唯一的UserID,所以是默認禁止不同APK訪問共享數據的。若要共享數據, 第一可以採用Share Preference方法,第二種就可以採用sharedUserId了,將不同APK的sharedUserId都設爲一樣,則這些APK之間就可以互相共享數據了。
D sharedUserLabel
一個共享的用戶名,它只有在設置了sharedUserId屬性的前提下纔會有意義
E、versionCode
是給設備程序識別版本(升級)用的必須是一個interger值代表app更新過多少次,比如第一版一般爲1,之後若要更新版本就設置爲2,3等等。
F、versionName
這個名稱是給用戶看的,你可以將你的APP版本號設置爲1.1版,後續更新版本設置爲1.2、2.0版本等等。。。
G、installLocation
程序的安裝位置,有三個值可以選擇:internalOnly、auto、preferExternal
internalOnly--APK必須安裝到內部存儲空間。而且安裝了之後,不能將程序移動到SD卡上。
auto--系統將會根據存儲空間去選擇將APK安裝在內部存儲空間還是SD卡上。安裝之後,可以在內部存儲空間和SD卡之間移動。
preferExternal--系統會優先考慮將APK安裝到SD卡上(當然最終用戶可以選擇爲內部ROM存儲上,如果SD存儲已滿,也會安裝到內部存儲上)

 

 


PART--02 安全機制和permission

01, Android 安全機制概述 Permission

PART--02.01 permission標籤

點擊查看:Android manifest之系統自帶的permission

語法:

複製代碼
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" | 
                                     "signature" | "signatureOrSystem"] />
複製代碼

說明:
定義一個安全訪問許可。其它程序或組件若要訪問該程序,必須先獲取該permission。

屬性:
android:description
權限描述。是用戶可讀的,它稍稍有點不同於android:label屬性。label屬性可以直接賦值爲字符串,而description必須指定定義在string資源文件中的字符串。
android:icon
圖標
android:label
標籤
android:name
權限的名稱。這個非常重要!因爲其它程序或組建若要獲取該權限,必須通過權限的名稱來指定。
android:permissionGroup
該權限所屬的權限組。若不設定,則默認不屬於任何權限組。
android:protectionLevel
設置權限的安全級別。用來指出權限的安全級別,是否對系統的安全構成威脅。有以下4個值:
normal--表示權限是低風險的,不會對系統、用戶或其他應用程序造成危害。用戶使用該權限時,不會彈出對話框讓用戶確認是否允許使用該權限。
dangerous--表示權限是高風險的,系統將可能要求用戶輸入相關信息,纔會授予此權限。用戶使用該權限時,會彈出確認對話框是否同意使用該權限。
signature告訴Android,只有當應用程序所用數字簽名與聲明此權限的應用程序所有數字簽名相同時,才能將權限授給它。
signatureOrSystem告訴Android,將權限授給具有相同數字簽名的應用程序或Android包類,這一級別適用於非常特殊的情況,比如多個供應商需要通過系統影像共享功能時。

 

PART--02.02 permission-group標籤

 

<permission-group android:description="string resource"
                  android:icon="drawable resource"
                  android:label="string resource"
                  android:name="string" />

說明:
描述permission是所屬的組。permission-group本身並不定義權限,它只是權限所屬的一個組。作用是來先區別不同的權限。

屬性:
android:description
權限組描述。它稍稍有點不同於android:label屬性。label屬性可以直接賦值爲字符串,而description必須指定定義在string資源文件中的字符串。
android:icon
圖標
android:label
標籤
android:name
權限組的名稱。當某權限要設置權限組時,就將該權限的permissionGroup設置權限組即可。

參考:
01, android中permission_group與permisson區別、作用 

 

PART--02.03 permission-tree標籤

語法:

<permission-tree android:icon="drawable resource"
                 android:label="string resource" ]
                 android:name="string"/>

說明:
權限樹是一個能夠放置更多權限的命名空間,這個元素本身並不聲明權限。
它的主要作用是用來動態添加一些所謂 Dynamic 的 permission ,這些 permission 可以動態修改。這些 permission 名稱要以 permission-tree 的名稱開頭。它本身不是一種權限,沒有 protectedLevel 和所屬 group 。只是保存了所屬的 packge 和權限名(帶有 package 前綴的)

屬性(ATTRIBUTES):
android:icon
圖標
android:label
標籤
android:name
這個屬性定義了權限樹根節點的名稱。它被用於樹中所有權限名稱的前綴。應該使用Java樣式命名規則,以確保名稱的唯一性。在命名中必須要有兩個以上的”.”來進行分離,例如:com.example.base是正確的,但com.example就是錯誤的。

 

PART--02.04 uses-permission標籤

語法:

<uses-permission android:name="string" />

說明:
程序需要指定<uses-permission>以獲取權限來進行有關操作。這裏的權限值可以是Android系統自帶的,也可以是自定義的。
比如,android.permission.READ_CONTACTS是讀取通訊錄的必備權限;android.permission.SET_WALLPAPER是設置牆紙的必備權限。
屬性:
android:name

參考:
01, Android聲明和使用權限
02, permission和uses-permission的區別

 


 

PART--03 instrumentation標籤

語法:

<instrumentation android:functionalTest=["true" | "false"]
                 android:handleProfiling=["true" | "false"]
                 android:icon="drawable resource"
                 android:label="string resource"
                 android:name="string"
                 android:targetPackage="string"/>

說明:
這個元素聲明瞭一個Instrumentation類,這個類能夠監視應用程序跟系統的交互。Instrumentation對象會在應用的其他所有組件被實例化之前實例化。
它的主要作用是用於進行單元測試。

屬性:
android:functionalTest
這個屬性用於指定Instrumentation類是否應該作爲一個功能性的測試來運行,如果設置爲true,這要運行,否則不應該運行。默認值是false。
android:handleProfiling
這個屬性用於指定Instrumentation對象是否會開啓和關閉分析功能。如果設置爲true,那麼由Instrumentation對象來決定分析功能的啓動和終止時機,如果設置爲false,則分析功能會持續到Instrumentation對象整個運行週期。如果設置爲true,會使Instrumentation對象針對一組特定的操作來進行分析。默認值是false。
android:icon
這個屬性用於給Instrumentation類設置一個圖標。它必須要應用一個可繪製的資源。
android:label
這個屬性用於給Instrumentation類設置一個用戶可讀的標籤。這個標籤可用原生字符串,也可以引用一個字符串資源。
android:name
這個屬性用於設定Instrumentation子類的名稱。應該是完整的Java類名(如:com.example.project.StringInstrumentation)。但是,也可以用簡寫方式(如:.StringInstrumentation),它的包名會使用<manifest>元素的package屬性中指定的包名。 它沒有默認值,必須被指定。
android:targetPackage
這個屬性用於指定Instrumenttation對象所監視的應用程序。由包名所標識的應用程序會跟清單的<manifest>元素的package屬性值相關聯。


參考:
01, Android單元測試 Instrumentation
02, 基於UI Automation的自動化測試框架

 

 


 

PART--04 uses-sdk標籤

語法:

<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />

說明:
定義APK能夠運行的版本。

屬性:
android:minSdkVersion
能夠運行APK的最小sdk版本。如果沒有設定的話,默認是1。
android:targetSdkVersion
指定了運行APK的目標的API級別。如果沒有設定的話,默認等於minSdkVersion。
android:maxSdkVersion
能夠運行APK的最大sdk版本。
不推薦聲明這個屬性,首先,沒有必要設置這個屬性是因爲,這樣會阻止該應用程序在新發布的Android平臺版本上運行。通過設計,新的平臺版本時完全向後兼容的。該應用程序應該在升級後的平臺上能夠正常運行。其二,要注意的是,在某些情況中,聲明這個屬性在用戶設備的系統升級較高的API Level之後,能夠導致該應用程序被刪除。大多數應用所在的設備都會定期的接到在線升級的請求,因此在設置這個屬性之前,要仔細考慮該屬性給應用程序所帶來的影響。


點擊查看:Android SDK之API_LEVEL

 

 


PART--05 uses-configuration標籤

語法(SYNTAX):

<uses-configuration android:reqFiveWayNav=["true" | "false"] 
                    android:reqHardKeyboard=["true" | "false"]
                    android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
                    android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
                    android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />

說明:
這個屬性用於指定該應用程序所需要的硬件和軟件功能。例如,應用程序可以用這個元素指定它所需要的物理鍵盤或特殊的導航設備,如軌跡球。使用這個規範可以避免把應用程序安裝在那些不支持其不能工作的設備上。

如果應用程序能夠用不同的設備配置來工作,那麼它就應該給每個配置包含一個獨立的<uses-configuration>聲明。每個聲明必須被完成。例如,應用程序需要一個五嚮導航控制,就要需要一個支持手指操作的觸屏,以及一個標準的QWERTY鍵盤或12鍵的數字鍵盤,因此要用兩個<uses-configuration>元素來指定這些需求:

<uses-configurationandroid:reqFiveWayNav="true"android:reqTouchScreen="finger"
android:reqKeyboardType="qwerty"/>
<uses-configurationandroid:reqFiveWayNav="true"android:reqTouchScreen="finger"
android:reqKeyboardType="twelvekey"/>

 

屬性:
android:reqFiveWayNav
這個屬性用於指定應用程序是否需要五嚮導航控制,如果設置爲true,則需要,否則不需要。五向控制是指能夠上、下、左、右移動所選擇的對象,並提供調用當前選擇對象的方法。它可以是一個D-pad(方向板)、軌跡球等。
如果應用程序需要一個方向控制,但不是一種特殊類型的控制,就可以把這個屬性設置爲true,並且忽略reqNavigation屬性。但是,如果應用程序需要一種特殊的方向控制類型,那麼就可以忽略這個屬性,並用reqNavigation屬性的設置來代替。

android:reqHardKeyboard
這個屬性用於指定應用程序是否需要硬鍵盤,如果設置爲true,則需要,否則不需要。

android:reqKeyboardType
這個屬性用於指定該應用程序需要的任何鍵盤的類型。這個屬性不區分軟/硬鍵盤。如果需要某種類型的硬鍵盤,就用這個屬性來指定類型,並把reqHardKeyboard屬性設置爲true。 它的屬性值必須是下表中值之一:
undefined -- 應用程序不需要鍵盤。(鍵盤的需求沒有被定義。)這是默認值。
nokeys -- 應用程序不需要鍵盤,明確定義該應用不需要鍵盤
qwerty -- 應用程序需要一個標準的QWERTY鍵盤。
twelvekey -- 應用程序需要一個像大多電話那樣的12鍵的數字鍵盤,鍵盤中包括0~9的數字和“*”號鍵、“#”號鍵。

android:reqNavigation
這個屬性定義了應用程序所需要的任何導航設備,屬性值必須是下表中的值之一:
undefined -- 應用程序不需要任何類型的導航控制。(應用程序的導航需求沒有被定義。)這是默認值。
nonav -- 應用程序不需要到導航控制。
dpad -- 應用程序要求使用D-pad(方向板)來進行導航控制
trackball -- 應用程序要求使用軌跡球來進行導航控制
wheel -- 應用程序要求使用一個導航滾輪來進行導航控制。
如果應用程序要求一個導航控制,但並不關心具體的控制類型,那麼就要把reqFiveWayNav屬性設置爲true,而不是隻設置這一個屬性。

android:reqTouchScreen
這個屬性用於設置應用程序所需要的任何觸屏類型。屬性值必須是下表中的字符串之一:
undefined -- 應用程序不需要觸屏。(觸屏的需求不被定義。)這是默認值。
notouch -- 應用程序不需要觸屏
stylus -- 應用程序需要帶有觸控筆操作的觸屏。
finger -- 應用程序需要能夠用一個手指進行操作的觸屏。

 

 


 

PART--06 uses-feature標籤

語法:

<uses-feature android:name="string"
              android:required=["true" | "false"]
              android:glEsVersion="integer"/>

說明:
聲明APK的硬件或軟件功能。
<uses-feature>聲明的目的是通知其他外部實體,該應用程序所依賴的硬件和軟件功能。這個元素提供的required屬性會讓你指定應用程序在所需的功能不存在時,應用程序是否能夠正常運行。因爲功能能夠所支持的Android設備不同,所以<uses-feature>元素被用於描述應用程序所依賴的、重要的、可用的設備功能。

如果應用程序需要多個功能,就要分別使用<uses-feature>元素來指定所需的每一個功能,例如:需要設備中帶有藍牙和camera功能的應用程序,要聲明兩個<uses-feature>元素:

<uses-feature android:name="android.hardware.bluetooth" />
<uses-feature android:name="android.hardware.camera" />

注意:在聲明一個功能時,要記住必須申請相應的權限。例如,在應用程序能夠訪問Camera的API之前,必須申請CAMERA權限。申請權限是讓應用程序能夠訪問相應的軟/硬件,而聲明應用程序所使用的功能是爲了確保正確的設備兼容性。

屬性:
android:name
軟/硬件功能名稱。

android:required
這個屬性用一個布爾值來指定應用程序是否需要在android:name屬性中所指定的功能。
true--默認值。在設備上不存在指定的功能時,則該應用不能夠正常運行。
false--如果設備上存在指定的功能,則應用程序會傾向使用這個功能,但是如果需要,也可設計成沒被指定的功能也能夠正常運行。

android:qlEsVersion
APK需要的OpenGL ES的版本。它的高16位代表主版本號,低16位代表次要版本號,如:要是指定OpenGL ES的版本號是2.0,那麼就要設置爲0x00020000。要指定的OpenGL ES的版本號是2.1,就要設置爲0x00020001。

其他:
硬件設備的特性
------------------------------------------------------

複製代碼
Audio             android.hardware.audio.low_latency
Bluetooth         android.hardware.bluetooth
Camera            android.hardware.camera
                  android.hardware.camera.autofocus
                  android.hardware.camera.flash
                  android.hardware.camera.front
                  android.hardware.camera.any
Location          android.hardware.location
                  android.hardware.location.network
                  android.hardware.location.gps
Microphone        android.hardware.microphone
NFC               android.hardware.nfc
Sensors           android.hardware.sensor.accelerometer
                  android.hardware.sensor.barometer
                  android.hardware.sensor.compass
                  android.hardware.sensor.gyroscope
                  android.hardware.sensor.light
                  android.hardware.sensor.proximity
Screen            android.hardware.screen.landscape
                  android.hardware.screen.portrait
Telephony         android.hardware.telephony
                  android.hardware.telephony.cdma
                  android.hardware.telephony.gsm
Television        android.hardware.type.television
Touchscreen       android.hardware.faketouch
                  android.hardware.faketouch.multitouch.distinct
                  android.hardware.faketouch.multitouch.jazzhand
                  android.hardware.touchscreen
                  android.hardware.touchscreen.multitouch
                  android.hardware.touchscreen.multitouch.distinct
                  android.hardware.touchscreen.multitouch.jazzhand
USB               android.hardware.usb.host
                  android.hardware.usb.accessory
Wifi              android.hardware.wifi
複製代碼

軟件設備的特性
------------------------------------------------------
軟件 軟件對應的特性

Live Wallpaper    android.software.live_wallpaper
SIP/VOIP          android.software.sip
                  android.software.sip.voip

 

 


 

PART--07 supports-screens標籤

標籤:

複製代碼
<supports-screens android:resizeable=["true"|"false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>
複製代碼

說明:
指定應用程序所支持的屏幕尺寸,並針對比應用程序所支持的屏幕還要大屏幕,啓用屏幕兼容模式。

如果應用程序調整尺寸屬性來填充整個屏幕,那麼應用程序就要支持這個給定的尺寸。通常對於大多數應用程序,系統可以很好的完成這種調整工作,並且爲了讓應用程序在比一個手持設備大的屏幕上工作,你不需要做任何額外的工作。但是,針對不同的屏幕尺寸,通過提供可選的佈局資源來優化應用程序的UI經常是很重要的。例如,一個運行在手持設備上的Activity佈局,如果想要運行在平板電腦上,就需要修改這個Activity的佈局。

但是,如果爲了適應不同的屏幕尺寸而調整了尺寸,但應用程序也不能很好的工作,就可以使用<supports-screens>元素的屬性來控制應用程序是否應該發佈給屏幕較小的設備,或者使用系統的屏幕兼容模式,讓UI放大以適應較大屏幕的要求。在沒有針對較大屏幕尺寸的設計,並且普通的尺寸不能達到合適結果時,屏幕的兼容模式會通過模擬普通尺寸的屏幕和中等密度來縮放UI,以便它能夠填充整個屏幕,這樣會導致UI模糊,因此針對大屏幕的優化是比較好的。

屬性(ATTRIBUTES):
android:resizeable
是否可以調整尺寸。默認值是true。如果這個屬性設置了false,在大的屏幕上,系統會在屏幕兼容模式中運行該應用程序。
android:smallScreens
是否支持較小外形的屏幕。默認值是true。
android:normalScreens
是否支持普通外形的屏幕。默認值是true。
android:largeScreens
是否支持較大外形的屏幕。
這個屬性的默認值實際上在某些版本之間是不同的,因此最好在任何時候都明確的聲明這個屬性。如果設置爲false,系統會啓用屏幕兼容模式,這時要格外的小心。
android:xlargeScreens
否支持超大外形的屏幕。
android:anyDensity
是否包含了能夠適用於任何屏幕密度的資源。
默認值是true。除非絕對的確認這是應用程序正常工作所必須的,否則不應該把它設置爲false。只是在應用程序直接操作位圖時才需要禁止這個屬性。
android:requiresSmallestWidthDp
這個屬性用於指定smallestWidth的最小需求。smallestWidth是屏幕空間的最短尺寸(以dp爲單位),它必須是對應用程序的UI是有效的。也就是說它是有效的屏幕的兩個維度的尺寸中最短的那個。因此爲了考慮設備跟應用程序的兼容性,設備的smallestWidth的值必須要大於等於這個屬性所設置的值。通常這個屬性值是針對佈局所支持的最小寬度,而不是屏幕當前的方向。
例如,典型的手持設備屏幕smallestWidth是320dp;7英寸的平板電腦的smallestWidth是600dp;10英寸的平板電腦的smallestWidth是720dp。這些值一般都是最小的寬度,因爲它們是屏幕可用空間中最短的那個尺寸。
android:compatibleWidthLimitDp
這個屬性允許在設計應用程序時,通過指定最大的“smallest screen width”來啓用屏幕兼容模式,作爲一個用戶可選的功能。如果設備的有效屏幕的最小邊比這個屬性值大,那麼用戶依然能夠安裝該應用程序,但是在運行時要使用屏幕兼容模式。默認情況下,屏幕兼容模式似乎被禁止的,並且通過會調整佈局的尺寸來填充屏幕,但是在系統欄中會有一個按鈕,讓用戶選擇屏幕兼容模式的打開和關閉。
android:largestWidthLimitDp
這個屬性允許再設計應用程序時,通過指定最大的“smallest screen width”來強制啓用屏幕兼容模式。如果設備有效屏幕的最小邊比這個屬性值大,應用程序就會運行在屏幕兼容模式中,而用戶沒有辦法禁止這種模式。

參考:
01, Supporting Multiple Screens

 

 


PART--08 compatible-screens標籤

語法:

<compatible-screens>
    <screen android:screenSize=["small" | "normal" | "large" | "xlarge"]
            android:screenDensity=["ldpi" | "mdpi" | "hdpi" | "xhdpi"] />
    ...
</compatible-screens>

說明:
指定那些屏幕配置跟應用程序是兼容的。目的是提供給外部服務使用(如Google Play),以便其判斷兼容性。通常不建議使用該標籤。
在應用的清單中只允許有一個<compatible-screent>元素的實例,但是它能夠包含多個<screen>元素。每個<screen>元素指定一個特定的跟應用程序兼容的尺寸---密度組合。


子元素:
<screen>
指定一個跟應用程序兼容的屏幕配置。
在<compatible-screens>元素內部,至少要有一個這個元素的實例。這個元素必須同時包含android:screenSize和android:screenDensity屬性,如果沒有同時聲明,那麼這個元素就會被忽略。

屬性:
android:screenSize
指定跟應用程序兼容的屏幕配置的屏幕尺寸。可以是以下的值:
· small
· normal
· large
· xlarge
android:screenDensity
指定跟應用程序兼容的屏幕配置的屏幕密度,可以是以下值:
· ldpi
· mdpi
· hdpi
· xhdpi

例子:
如果應用程序僅跟小屏和普通屏幕的設備兼容,而不管屏幕的密度,那麼必須要指定八個不同的<screen>元素,因爲每個屏幕尺寸都有四種不同密度的配置。必須對這些配置逐一聲明;任何沒有指定的尺寸和密度的組合,都會被認爲這個屏幕配置跟應用程序不兼容。如果應用程序只跟小屏幕和普通屏幕兼容,那麼清單配置如下:
<manifest ... >
...
<compatible-screens>
<!-- all small size screens -->
<screenandroid:screenSize="small"android:screenDensity="ldpi"/>
<screenandroid:screenSize="small"android:screenDensity="mdpi"/>
<screenandroid:screenSize="small"android:screenDensity="hdpi"/>
<screenandroid:screenSize="small"android:screenDensity="xhdpi"/>
<!-- all normal size screens -->
<screenandroid:screenSize="normal"android:screenDensity="ldpi"/>
<screenandroid:screenSize="normal"android:screenDensity="mdpi"/>
<screenandroid:screenSize="normal"android:screenDensity="hdpi"/>
<screenandroid:screenSize="normal"android:screenDensity="xhdpi"/>
</compatible-screens>
<application ... >
...
<application>
</manifest>

 

 


 

PART--09 supports-gl-texture標籤

語法:

<supports-gl-textureandroid:name="string"/>

說明:
聲明一個應用程序所支持的GL紋理壓縮格式。

一個應用程序支持一種紋理壓縮格式,如果應用程序提供了用該格式壓縮紋理資源的能力,那麼一旦應用程序被安裝在設備上,應用程序就能夠從.apk文件的內部提供本地的壓縮資源,或者在運行時從服務器上下載它們。

屬性:
android:name
描述字符串給指定一個由應用程序支持的一個GL紋理壓縮格式。支持以下格式:
GL_OES_compressed_ETC1_RGB8_texture
GL_OES_compressed_paletted_texture
GL_AMD_compressed_3DC_texture
GL_AMD_compressed_ATC_texture
GL_EXT_texture_compression_latc
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_s3tc
GL_IMG_texture_compression_pvrtc

 

 

 


PART--10 application標籤

語法:

複製代碼
<application android:allowTaskReparenting=["true" | "false"]
             android:backupAgent="string"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:killAfterRestore=["true" | "false"]
             android:label="string resource"
             android:logo="drawable resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:taskAffinity="string"
             android:theme="resource or theme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"] >
    . . .
</application>
複製代碼

說明:
應用程序的聲明。它包含了每個應用程序組件所聲明的子元素,並且還有能夠影響所有組件的屬性。

屬性:

Android:allowTaskReparenting
當一個與當前任務有親緣關係的任務被帶到前臺時,用這個屬性來指定應用程序中定義的Activity能否從他們當前的任務中轉移到這個有親緣關係的任務中。如果設置爲true,則能夠轉移,如果設置爲false,則應用程序中的Activity必須保留在它們所在的任務中。默認值是false。
用來標記Activity能否從啓動的Task移動到有着affinity的Task(當這個Task進入到前臺時)——“true”,表示能移動,“false”,表示它必須呆在啓動時呆在的那個Task裏。
如果這個特性沒有被設定,設定到<application>元素上的allowTaskReparenting特性的值會應用到Activity上。默認值爲“false”。
一般來說,當Activity啓動後,它就與啓動它的Task關聯,並且在那裏耗盡它的整個生命週期。噹噹前的Task不再顯示時,你可以使用這個特性來強制Activity移動到有着affinity的Task中。典型用法是:把一個應用程序的Activity移到另一個應用程序的主Task中。
例如,如果e-mail中包含一個web頁的鏈接,點擊它就會啓動一個Activity來顯示這個頁面。這個Activity是由Browser應用程序定義的,但是,現在它作爲e-mail Task的一部分。如果它重新宿主到Browser Task裏,當Browser下一次進入到前臺時,它就能被看見,並且,當e-mail Task再次進入前臺時,就看不到它了。
Actvity的affinity是由taskAffinity特性定義的。Task的affinity是通過讀取根Activity的affinity決定。因此,根據定義,根Activity總是位於相同affinity的Task裏。由於啓動模式爲“singleTask”和“singleInstance”的Activity只能位於Task的底部,因此,重新宿主只能限於“standard”和“singleTop”模式。


android:backupAgent
用於定義應用程序備份代理的實現類的名稱,這個類是BackupAgent類的一個子類。

android:debuggable
指定應用程序是否能夠被調試,即使是以用戶模式運行在設備上的時候。如果設置爲true,則能夠被調試,否則不能調試,默認值是false。

android:description
定義應用程序相關的用戶可讀文本。它的的值必須被設置成一個字符串資源的引用。跟label屬性不一樣,label屬性可以使用原生的字符串。這個屬性沒有默認值。

android:enabled
指定Android系統能否實例化應用程序組件。如果設置爲true,這個可以實例化其組件,否則不能夠實例化。 默認值是true。

android:hasCode
設置應用程序是否包含了代碼,如果設置爲true,則包含代碼,否則不包含任何代碼。在這個屬性被設置爲false的時候,系統在加載組件的時候不會試圖加載任何應用程序的代碼。默認值是true。

android:hardwareAccelerated
設置能夠給應用程序中的所有Activity和View對象啓用硬件加速渲染。如果設置爲true,則應該啓用,如果設置爲false,則不會啓用。默認值是false。

android:icon
設置應用程序的整個圖標,以及每個應用組件的默認圖標。對於<activity>、<activity-alias>、<service>、<service>、<receiver>和<provider>元素,請看它們各自的icon屬性。

android:killAfterRestore
在整型系統重置操作中,當他的設置被重置後,應用是否應該被終止。單個包的重置操作不會引起應用被關閉。整個系統的恢復操作僅代表
性的發生一次,當電話第一次被設置時。第三方應用將不會經常使用此屬性。
默認值爲true,意思是,當整個系統被恢復時,應用運行玩他的數據後,將會終止。

android:label
標籤。

android:logo
這個屬性用於給整個應用程序設置一個Logo,而且它也是所有Activity的默認Logo。設置這個屬性時,必須要引用一個包含圖片的可繪製資源(如:“@drawable/logo”)。沒有默認的Logo。

android:manageSpaceActivity
定義了一個完整的Activity子類的名字,系統能夠把這個名字加載到由用戶管理被應用程序所佔用的設備上的內存。這個Activity也應該用<activity>元素來聲明。

android:name
這整個屬性用完整的Java類名,給應用程序定義了一個Application子類的實現。當應用程序進程被啓動時,這個類在其他任何應用程序組件被實例化之前實例化。
這個子類實現是可選的,大多數應用程序不需要一個子類的實現。如果沒有實現自己的子類,Android系統會使用基本的Application類的一個實例。

android:permission
這個屬性定義了一個權限,爲了跟應用程序進行交互,客戶端必須要有這個權限。這個屬性是爲給所有的應用程序組件設置權限提供了便利的方法。它能夠被獨立組件所設置的permission屬性所覆蓋。

android:persistent
這個屬性用戶設置應用程序是否應該時刻保持運行狀態,如果設置爲true,那麼就保持,否則不保持。默認值是false。普通的應用程序不應該設置這個屬性,持久運行模式僅用於某些系統級的應用程序。

android:process
這個屬性用於定義一個進程名稱,應用程序的所有組件都應該運行在這個進程中。每個組件都能夠用它自己process屬性的設置來覆蓋這個<application>元素中的設置。
默認情況下,當應用程序的第一個組件需要運行時,Android系統就會給這個應用程序創建一個進程。然後,應用中的所有組件都運行在這個進程中。默認的進程名是跟<manifest>元素中設置的包名進行匹配的。
通過設置這個屬性,能夠跟另外一個應用程序共享一個進程名,能夠把這兩個應用程序中的組件都安排到同一個進程中運行---但是僅限於這兩個應用程序共享一個用戶ID,並且帶有相同的數字證書。
如果這個進程名稱用“:”開頭,那麼在需要的時候,就會給應用程序創建一個新的、私有的進程。如果進程名用小寫字符開頭,就會用這個名字創建一個全局的進程,這個全局的進程能夠被其他應用程序共享,從而減少資源的使用。

android:restoreAnyVersion
設置這個屬性表示應用程序準備嘗試恢復任何備份的數據集,即使備份比設備上當前安裝的應用程序的版本要新。這個屬性設置爲true,即使是在版本不匹配而產生數據兼容性提示的時候,也會允許備份管理來恢復備份的數據,所以要謹慎使用。
這個屬性的默認值是false。

android:taskAffinity
這個屬性給應用的所有的Activity設置了一個親緣關係名,除了那些用它們自己的taskAffinity屬性設置不同親緣關係的組件。
默認情況下,應用程序中的所有Activity都會共享相同的親緣關係,親緣關係的名稱跟由<manifest>元素設置的包名相同。

android:theme
這個屬性給應用程序中所有的Activity設置默認的主題,屬性值要引用一個樣式資源。每個獨立的Activity的主題會被它們自己的theme屬性所覆蓋。

android:uiOptions
這個屬性設置了Activity的UI的額外選項。


參考:
01, Android的Task和Activity相關

 

 


 

PART--11 activity標籤

語法:

複製代碼
<activity android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale", "uiMode",
                                 "orientation", "screenSize", "smallestScreenSize"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:launchMode=["multiple" | "singleTop" |
                              "singleTask" | "singleInstance"]
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:permission="string"
          android:process="string"
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "sensor" | "fullSensor" | "nosensor"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>
複製代碼

屬性(ATTRIBUTES):

android:allowTaskReparenting
這個屬性用於設定Activity能夠從啓動它的任務中轉移到另一個與啓動它的任務有親緣關係的任務中,轉移時機是在這個有親緣關係的任務被帶到前臺的時候。如果設置了true,則能夠轉移,如果設置了false,則這個Activity必須要保留在啓動它的那個任務中。

如果這個屬性沒有設置,那麼其對應的<application>元素的allowTaskReparenting屬性值就會應用到這個Activity上。它的默認值是false。

通常,當Activity被啓動時,它會跟啓動它的任務關聯,並它的整個生命週期都會保持在那個任務中。但是當Activity的當前任務不在顯示時,可以使用這個屬性來強制Activity轉移到與當前任務有親緣關係的任務中。這種情況的典型應用是把應用程序的Activity轉移到與這個應用程序相關聯的主任務中。

例如,如果一個電子郵件消息中包含了一個網頁的鏈接,點擊這個鏈接會啓動一個顯示這個網頁的Activity。但是,由e-mail任務部分啓動的這個Activity是由瀏覽器應用程序定義的。如果把它放到瀏覽器的任務中,那麼在瀏覽器下次啓動到前臺時,這個網頁會被顯示,並且在e-mail任務再次顯示時,這個Activity有會消失。

Activity的親緣關係是由taskAffinity屬性定義的。通過讀取任務的根Activity的親緣關係來判斷任務的親緣關係。因此,通過定義,任務中的根Activity與任務有着相同的親緣關係。因此帶有singleTask或singleInstance啓動模式的Activity只能是任務的根節點,Activity的任務歸屬受限於standard和singleTop模式。


android:alwaysRetainTaskState
這個屬性用於設置Activity所屬的任務狀態是否始終由系統來維護。如果設置爲true,則由系統來維護狀態,設置爲false,那麼在某些情況下,系統會允許重設任務的初始狀態。默認值是false。這個屬性只對任務根節點的Activity有意義,其他所有的Activity都會被忽略。

通常,在某些情況中,當用戶從主屏中重新啓動一個任務時,系統會先清除任務(從堆棧中刪除根節點Activity之上的所有Activity)。

但是,當這個屬性被設置爲true時,用戶會始終返回到這個任務的最後狀態,而不管中間經歷了哪些操作。這樣做是有好處的,例如,Web瀏覽器的應用就會保留很多用戶不想丟失的狀態,如多個被打開的標籤頁。


android:clearTaskOnLaunch
這個屬性用於設定在從主屏中重啓任務時,處理根節點的Activity以外,任務中的其他所有的Activity是否要被刪除。如果設置爲true,那麼任務根節點的Activity之上的所有Activity都要被清除,如果設置了false,就不會被清除。默認設置時false。這個屬性只對啓動新任務(或根Activity)的那些Activity有意義,任務中其他所有的Activity都會被忽略。

當這個屬性值被設置爲true,用戶再次啓動任務時,任務根節點的Activity就會被顯示,而不管在任務的最後做了什麼,也不管任務使用Back按鈕,還是使用Home離開的。當這個屬性被設置爲false時,在某些情況中這個任務的Activity可以被清除,但不總是這樣的。

例如,假設某人從主屏中啓動了Activity P,並且又從P中啓動了Activity Q。接下來用戶按下了Home按鈕,然後由返回到Activity P。通常用戶會看到Activity Q,因爲這是在P的任務中所做的最後的事情。但是,如果P把這個屬性設置爲true,那麼在用戶按下Home按鈕,任務被掛起時,Activity P之上的所有Activity(本例中是Activity Q)都會被刪除。因此當用戶再次返回到本任務時,用戶只能看到Activity P。

如果這個屬性和allowTaskReparenting屬性都被設置爲true,那些被設置了親緣關係的Activity會被轉移到它們共享的親緣任務中,然後把剩下的Activity都給刪除。


android:configChanges
這個屬性列出了那些需要Activity進行自我處理的配置變化。當在運行時配置變化發生的時候,默認情況下,這個Activity會被關掉並重啓,但是用這個屬性聲明一個配置,就會阻止Activity被重啓。相反,這個Activity會保持運行,並且它的onConfigurationChanged()方法會被調用。
下面中列出了這個屬性的有效值,要設置多個值的時候,用“|”符號連接,例如:“locale|navigation|orientation”
mcc -- IMSI移動國家編碼改變時要進行自我處理---系統發現了一個新的SIM卡,並且更新了MCC。
mnc -- IMSI移動網絡編碼改變時要進行自我處理---系統發現了一個新的SIM卡,並且更新了MNC
locale -- 語言環境發生變化時要進行自我處理---用戶選擇了一種用於顯示文本的新語言。
touchscreen -- 觸屏發生變化時要進行自我處理。(這種情況通常不會發生)
keyboard -- 鍵盤類型發生變化時,要進行自我處理。例如用戶插入了一個外部鍵盤
keyboardHidden -- 鍵盤的可用性發生變化時,要進行自我處理。例如用戶啓用了硬件鍵盤。
navigation -- 導航類型(軌跡球/方向板)發生變化時,要進行自我處理。這種情況通常不會發生。
screenLayout -- 屏幕布局發生變化時,要進行自我處理。這可能是由被激活的不同的顯示方式所導致的變化。
fontScale -- 字體的縮放因子發生變化時,要進行自我處理。如用戶選擇了一個新的全局字體尺寸。
uiMode -- 用戶界面發生變化時,要進行自我處理。在把設備放入桌面/轎車內或夜間模式變化時,會導致這種情況發生。它在API級別8中被引入。
orientation -- 屏幕的方向發生變化時,要進行自我處理。用戶旋轉設備時會發生這種變化。
注意:如果應用程序的目標API級別是13或更高的版本,那麼還應該聲明screenSize配置,因爲設備在橫向和縱向之間切換時,對應的尺寸也會發生變化。
screenSize -- 當前有效的屏幕尺寸發生變化時,要進行自我處理。這種變化意味着當前可用的相對長、寬比的尺寸發生了變化,因此當用戶在橫向和縱向之間切換時,就會產生屏幕可用尺寸的變化。但是,如果應用程序是在API級別12或更低的版本上編譯的,那麼Activity就要始終自己來處理這種變化(這個配置的變化不會重啓Activity,即使是運行在Android3.2或更高版本的設備上)。
smallestScreenSize -- 物理尺寸發生變化時,要進行自我處理。這種變化不關注屏幕方向的變化,只在實際的物理屏幕尺寸發生變化時纔會發生,如切換到另一個顯示器上的時候。這個變化對應smallestWidth屬性的配置來進行改變。如果應用程序是在API級別12或更低的版本上編譯的,那麼Activity就要始終自己來處理這種變化(這個配置的變化不會重啓Activity,即使是運行在Android3.2或更高版本的設備上)。


android:enabled
這個屬性用於設置Activity是否能夠被系統實例化。如果設置爲true,則可以被實例化,如果設置爲false,則不能被實例化。默認值是true。

android:excledeFromRecents
這屬性用於設置由該Activity所啓動的任務是否應該被排除在最近使用的應用程序列表之外。也就是說,當這個Activity是一個新任務的根節點時,這個屬性決定了這個任務適應要顯示在用戶最近使用的應用程序列表中。如果設置爲true,則這個任務會被排除在列表之外,如何設置爲false,則應該包含在最近使用的應用列表中。默認值是false。

android:exported
這個屬性用於設置該Activity能否由另一個應用程序的組件來啓動,如果設置爲true,則可以啓動,否則不能啓動。如果設置爲false,那麼該Activity只能被同一個應用程序中的組件或帶有相同用戶ID的應用程序來啓動。默認值是true。

android:finishOnTaskLaunch
這個屬性用於設置既存的Activity實例,在用戶再次啓動(在主屏上選擇這個任務)它所屬的任務時,是否應該被關閉。設置爲true,則要關閉,否則不關閉,默認值是false。

android:hardwareAccelerated
這個屬性用於設置該Activity是否應該啓用硬件加速渲染。如果設置爲true,則啓用硬件加速,否則不啓用。默認設置是false。

android:icon
圖標

android:label
標籤


android:launchMode
這個屬性定義了應該如何啓動Activity的一個指令。有四種工作模式會跟Intent對象中的Activity標記(FLAG_ACTIVITY_*常量)結合在一起用來決定被調用Activity在處理Intent對象時應該發生的事情,這四種模式是:
standard
singleTop
singleTask
singleInstance
默認的模式是standard。

這四種模式被分成兩組,standard和singleTop爲一組,singleTask和singleInstance爲一組。帶有standard和singleTop啓動模式的Activity能夠被實例化多次。其實例能夠屬於任何任務,並且能夠在Activity的堆棧中被定爲。通常是調用startActivity()方法把它們加載到任務中(除非Intent對象包含了一個FLAG_ACTIVITY_NEW_TASK指令,這種情況下會選擇啓動一個新的任務。)

相比之下,singleTask和singleInstance啓動模式的Activity只能啓動一個任務。它們始終是Activity堆棧的根節點。並且設備每次只能擁有一個這樣的Activity---只有一個這樣的任務。

standard和singleTop模式彼此在一個方面有所不同:對於standard啓動模式的Activity,每次要有一個新的Intent對象才能啓動,系統會創建一個新的Activity類的實例來響應Intent對象的請求。每個實例處理一個Intent對象。同樣,singleTop啓動模式的Activity也會創建一個新的實例來處理一個新的Intent對象。但是,如果目標任務中在堆棧的頂部已經有了這個Activity的實例,那麼這個實例會接受這個新的Intent對象(在onNewIntent()回調方法中調用);而不是創一個新的Activity實例。另一種情況,如:如果singleTop啓動模式的Activity的一個實例,在目標任務中已經存在,但是它沒有在任務堆棧的頂部,或者是在堆棧的頂部,卻不是目標任務,那麼就會創建一個新的Activity實例,並把它壓入目標任務堆棧。

singleTask和singleInstance模式彼此也在一個方面有所不同:singleTask模式的Activity,允許其他Activity作爲它所在任務的一部分。它始終在所在任務的根節點,但是其他的Activity(需要是standard和singleTop模式的Activity)能夠被加載到它的任務中。而singleInstance模式的Activity,不允許其他的Activity做它所在任務的一部分。它是其任務中唯一的Activity。如果要啓動另外的Activity,那麼被啓動的Activity要關聯到不同的任務中---就像是在Intent對象中設置了FLAG_ACTIVITY_NEW_TASK標記一樣。


android:multiprocess
這個屬性用於設置Activity的實例能否被加載到與啓動它的那個組件所在的進程中,如果設置爲true,則可以,否則不可以。默認值是false。
通常,一個新的Activity實例會被加載到定義它的應用程序的進程中,以便應用程序的所有Activity都運行在同一個進程中。但是,如果這個屬性被設置爲true,那麼這個Activity的實例就可以運行在多個進程中,允許系統在使用它們的進程中來創建實例(權限許可的情況下),這幾乎是從來都不需要的事情。

android:name
名字。 這個屬性沒有默認值,名稱必須被指定。

android:noHistory
這個屬性用於設置在用戶離開該Activity,並且它在屏幕上不再可見的時候,它是否應該從Activity的堆棧被刪除。如果設置了true,則要刪除,否則不刪除。默認值是false。

android:permission
這個屬性用於設定啓動Activity的客戶端或者是響應一個Intent對象的請求所必須要有的權限。如果startActivity()方法或startActivityForResult()方法的調用者沒有被授予指定的權限,那麼它的Intent對象就不會發送給對應的Activity。

android:process
這個屬性用於設置Activity應該運行的那個進程的名字。通常,應用程序的所有組件都運行在爲這個程序所創建的一個默認的進程中。它跟應用程序的包有相同的名字。<application>元素的process屬性能夠給所有的組件設置一個不同的默認值。但是每個組件都能夠覆蓋這個默認設置,允許把應用程序分離到多個進程中。

android:screenOrientation
設置Activity在設備上顯示的方向。
屬性值可以以下值:
unspecified -- 默認值,由系統來選擇方向。它的使用策略,以及由於選擇時特定的上下文環境,可能會因爲設備的差異而不同。
user -- 使用用戶當前首選的方向。
behind -- 使用Activity堆棧中與該Activity之下的那個Activity的相同的方向。
landscape -- 橫向顯示(寬度比高度要大)
portrait -- 縱向顯示(高度比寬度要大)
reverseLandscape -- 與正常的橫向方向相反顯示,在API Level 9中被引入。
reversePortrait -- 與正常的縱向方向相反顯示,在API Level 9中被引入。
sensorLandscape -- 橫向顯示,但是基於設備傳感器,既可以是按正常方向顯示,也可以反向顯示,在API Level 9中被引入。
sensorPortrait -- 縱向顯示,但是基於設備傳感器,既可以是按正常方向顯示,也可以反向顯示,在API Level 9中被引入。
sensor -- 顯示的方向是由設備的方向傳感器來決定的。顯示方向依賴與用戶怎樣持有設備;當用戶旋轉設備時,顯示的方向會改變。但是,默認情況下,有些設備不會在所有的四個方向上都旋轉,因此要允許在所有的四個方向上都能旋轉,就要使用fullSensor屬性值。
fullSensor -- 顯示的方向(4個方向)是由設備的方向傳感器來決定的,除了它允許屏幕有4個顯示方向之外,其他與設置爲“sensor”時情況類似,不管什麼樣的設備,通常都會這麼做。例如,某些設備通常不使用縱向倒轉或橫向反轉,但是使用這個設置,還是會發生這樣的反轉。這個值在API Level 9中引入。
nosensor -- 屏幕的顯示方向不會參照物理方向傳感器。傳感器會被忽略,所以顯示不會因用戶移動設備而旋轉。除了這個差別之外,系統會使用與“unspecified”設置相同的策略來旋轉屏幕的方向。

android:stateNotNeeded
這個屬性用於設置在沒有保存Activity狀態的情況下,它能否被銷燬且成功的重

android:taskAffinity
用於跟Activity有親緣關係。默認情況下,在一個應用程序中的所有Activity都有相同的親緣關係。能夠通過設置這個屬性把Activity分到不同的組中。甚至能夠把定義在不同應用程序中的Activity放到同一個任務中。要指定一個跟任何任務沒有親緣關係的Activity,就要把這個屬性設置爲空字符串。

android:theme
設定Activity整體主題,它會應用一個樣式資源。

android:uiOptions
設置Activity的UI的額外選項

android:windowSoftInputMode
設定Activity的主窗口與軟件鍵盤的窗口如何交互。

 

 


PART--12 intent-filter標籤

語法:

<intent-filter android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer">
    . . .
</intent-filter>

說明:
這個元素用於指定Activity、Service或Broadcast Receiver能夠響應的Intent對象的類型。
過濾器的大多數內容是通過<action>、<category>和<data>子元素來描述的。

屬性:
android:icon
圖片
android:label
標籤
android:priority="integer"
優先級

 

 


PART--13 action標籤

語法:

<action android:name="string"/>

說明:
給Intent過濾器添加一個操作。一個<intent-filter>元素必須包含一個或多個<action>元素,如果一個也沒有包含,那麼就不會有Intent對象通過過濾器。

屬性:
android:name
操作的名稱。 在Intent類中用ACTION_string常量定義一些標準的操作。要把這些操作跟這個屬性關聯,就要把前置的ACTION_字符串換成“android.intent.action.”。例如,對於ACTION_MAIN操作,要使用android.intent.action.MAIN來作爲屬性值,對於ACTION_WEB_SEARCH操作,要使用android.intent.action.WEB_SEATCH來作爲屬性值。
對於自定義的操作,最好使用包名來作爲前綴,以確保唯一性。例如,TRANSMOGRIFY操作可以像下例這樣定義:
<action android:name="com.example.project.TRANSMOGRIFY"/>

 

 


 

PART--14 category標籤

語法:

<category android:name="string"/>

說明:
給一個過濾器添加一個分類的名稱。

屬性:
android:name
定義分類的名稱。標準的分類是在Intent類中用CATEGORY_name常量來定義的。在定義這個屬性值的時候,要用“andoid.intent.category.”來代替GATEGORY_,從而實現定義與常量的關聯。例如:Intent類中的常量CATEGORY_LAUNCHER,在過濾器分類中的定義是:android.intent.category.LAUNCHER。
自定義的分類應該使用包名作爲前綴,以確保他們是唯一的。

 

 


 

PART--15 data標籤

語法:

複製代碼
<data android:host="string"
      android:mimeType="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:port="string"
      android:scheme="string"/>
複製代碼

說明:
這個元素用於把數據規範添加到一個Intent過濾器中,數據規範能夠只是數據類型(mimeType屬性)、或數據位置標識(URI),也可以是數據類型和數據位置標識(URI)。一個URI(如下格式)被分成幾個獨立的屬性來分別指定:

scheme://host:port/path or pathPrefix or pathPattern

這些屬性是可選的,但也是相互依賴的。如果沒有給Intent過濾器指定scheme屬性,那麼所有其他的URI屬性都會被忽略。如果沒有給過濾器指定host屬性,那麼port屬性和所有的路徑屬性都會被忽略。

包含在同一個<intent-filter>元素中所有的<data>元素只會對這個過濾器起作用,例如:

<intent-filter . . . >
<data android:scheme="something" android:host="project.example.com" />
. . .
</intent-filter>

等同於

<intent-filter . . . >
<data android:scheme="something" />
<data android:host="project.example.com" />
. . .
</intent-filter>

可以在<intent-filter>元素內放置多個<data>元素,來給過濾器設置多個數據選項。<data>元素的屬性沒有默認值。

屬性:
android:host
URI授權的主機部分,除非給過濾器也指定了<data>元素的scheme屬性,否則這個屬性沒有意義。
android:mimeType
設定數據的MIME類型,如:image/jpeg或audio/mpeg4-generic。其子類型可用星號通配符(*)來代替,指示能夠跟任何子類型匹配。
android:path
android:pathPrefix
android:pathPattern
這個三個屬性用於指定URI的路徑部分。Path屬性指定一個完整的路徑,這個路徑會跟Intent對象中的路徑進行匹配。PathPrefix屬性只指定了部分路徑,它會跟Intent對象中的路徑初始部分匹配。pathPattern屬性指定一個要跟Intent對象中的路徑進行匹配的完整路徑,但是這個路徑中可以包含下列通配符:
1. 星號(*)通配符,路徑中的*星號代表任意多個星號之前的那個字符,如a*,可跟a、aa、aaa、aaaa、...字符串匹配。
2. 點跟星號的組合(.*)通配符,它可以跟任意字符串進行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因爲系統讀取XML中的字符串時,會把’\’符號作爲強制轉義字符,因此就需要兩次轉義。例如,符號”*”要被寫成”\\*”,符號’\’要被寫成”\\\\”。這與Java代碼中的寫法基本相同。
android:port
定義URI授權的端口部分。只有給過濾器指定了scheme和host屬性時,這個屬性纔有意義。
android:scheme
這個屬性用於設定URI的scheme部分。它是給指定URI設置的最基本的屬性,至少要給過濾器設置一個scheme屬性,否則,其他的URI屬性就沒有意義了。scheme屬性值沒有”:”符號結尾(如,http,而不是http: )

 

 

 


PART--16 meta-data標籤

語法:

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string"/>

說明:
這個元素用name-value對的格式給其父組件提供任意可選的數據。一個組件元素能夠包含任意多個<meta-data>子元素,所有這些元素中定義的值會被收集到一個Bundle對象中,並且提供給組件的PackageItemInfo.metaData屬性字段。

通常值是通過其value屬性來指定的。但是,也可以使用resource屬性來代替,把一個資源ID跟值進行關聯。
例如,下面的代碼就是把值"hello world"跟”zoo”名稱進行關聯:
<meta-data android:name="zoo" android:value="hello world" />
另一個方面,使用resource屬性會給zoo分配一個數字資源ID,而不是保存在資源中的值。例如:
<meta-data android:name="zoo" android:resource="@string/kangaroo" />

屬性:
android:name
針對項目的一個唯一名稱。使用Java樣式的命名規則,可以確保名稱的唯一性,例如:
com.example.project.activity.fred。
android:resource
這個屬性定義了一個要引用的資源。資源的ID會跟這個項目進行關聯。通過Bundle.getInt()方法能夠從meta-data的Bundle對象中獲取這個ID。
android:value
這個屬性會給這個項目分配一個值。可以分配int、String等不同類型,不同類型的獲取方法也不同。
例如,若android:value設爲字符串,則獲取的方法爲getString()。

參考:
01, Android 讀取<meta-data>元素的數據

 

 


 

PART--17 activity-alias標籤

語法:

複製代碼
<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string">
    . . .
</activity-alias>
複製代碼

說明:
這個元素用於給targetActivity屬性所指定Activity設定一個別名,目標Activity必須跟別名Activity在同一個應用程序中,並且這個Activity必須在別名之前被聲明。
別名會作爲一個獨立的實體來代表目標Activity。它能夠有自己的Intent過濾器設置,而不是目標Activity自己的Intent過濾器,通過別名和系統處理別名的方式來判斷哪個Intent對象能夠激活目標。例如:別名中的Intent過濾器可以指定“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”標記,這樣即使在目標Activity的過濾器上沒有指定這些標記,也會讓它在應用的啓動器窗口中表示。

除了targetActivity屬性以外,<activity-alias>的其他屬性是<activity>屬性的一個子集。對於子集中的屬性,不會把目標Activity中所設置的任何值轉交給別名Activity。但是,對於子集中所沒有的屬性,則給目標Activity所設置的值也會應用到別名Activity。

屬性:
android:enabled
設定系統能否通過這個別名來實例化目標Activity,如果設置爲true,則可以實例化,否則不能實例化。默認值是true。

android:exported
設定其他的應用程序組件能否通過這個別名來啓動目標Activity,如果設置爲true,則能夠啓動,否則不能啓動。默認值是false。

android:icon
圖標。

android:label
標籤。

android:name
給別名設置一個唯一的名字。這個名字應該像一個完全限定的類名,但是不想目標Activity的名字那樣,別名的名稱是任意的,它不對應一個實際的類名。

android:permission
設定權限的名稱,客戶端必須有這個權限才能啓動目標Activity或通過別名來獲取目標Activity以便做某些事情。如果startActivity()或startActivityForResult()方法的調用者沒有被授予指定的權限,那麼目標Activity就不會被激活。

android:targetActivity
這個屬性用於設置通過別名所能夠激活的那個Activity的名字。這個名字必須跟它前面的<activity>元素的name屬性匹配。

參考:
01, activity-alias的使用

 

 


 

PART--18 service標籤

語法:

複製代碼
<service android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:icon="drawable resource"
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string">
    . . .
</service>
複製代碼

說明:
這個元素用於聲明一個服務(Service類的子類)作爲應用程序的組件之一。跟Activity不一樣,服務沒有可見的用戶界面。它們被用於實現長時的後臺操作,或提供能夠被其他應用程序調用的通信API。
所有的服務都必須用清單文件中的<service>元素來代表。任何沒有在清單中聲明的服務都不能被系統看到,也不會被運行。

屬性:
android:enabled
是否能夠被實例化。默認值是true。
android:exported
否能夠被其他應用程序組件調用或跟它交互。默認值是true。
android:icon
圖標
android:label
標籤
android:name
定實現該服務的Service子類的類名。它應該是完整的Java類名(如:com.example.project.RoomService)。但是,也可以使用簡寫(如:.RoomService),系統會把<manifest>元素中package屬性所設定的值添加到簡寫名稱的前面。這個屬性沒有默認值,名稱必須要指定。
android:permission
這個屬性定義了要啓動或綁定服務的實體必須要有的權限。如果調用者的startService()、bindService()和stopService()方法沒有被授予這個權限,那麼這些方法就不會工作,並且Intent對象也不會發送給改服務。如果這個屬性沒被設置,那麼通過<appliction>元素的permission屬性所設定的權限就會適用於該服務。如果<application>元素也沒有設置權限,則該服務不受權限保護。
android:process
設定服務所運行的進程名稱。通常,應用程序的所有組件都運行在給應用程序創建的進程中,進程名與應用程序的包名相同。<application>元素的process屬性能夠給應用程序的所有組件設置一個不同的默認名稱。但是每個組件自己的process屬性都能夠覆蓋這個默認值,這樣允許把應用程序分離到不同的多個進程中。
如果這個屬性值用“:”開頭,則在需要的時候系統會創建一個新的,應用程序私有的進程,並且該服務也會運行在這個進程中。如果這個屬性值用小寫字母開頭,那該服務就會運行在以這個屬性值命名的全局進程中,它提供了使其工作的權限。這樣就允許不同的應用程序組件來共享這個進程,從而降低資源的使用。

 

 


 

PART--19 receiver標籤

語法(SYNTAX):

複製代碼
<receiver android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:name="string"
          android:permission="string"
          android:process="string">
    . . .
</receiver>
複製代碼

說明:
這個元素用於聲明一個廣播接收器(一個BroadcastReceiver 子類),作爲應用程序的組件之一。廣播接收器能夠讓應用程序接收那些由系統或其他應用程序發出的廣播Intent對象,即使是在該應用程序的其他組件沒有運行的時候,也能夠接收來自系統或其他應用程序的廣播消息。
有兩種方式讓系統知道本應用程序用戶一個廣播接收器:
1. 在應用程序的清單文件中,使用本元素來聲明註冊一個廣播接收器;
2. 在代碼中動態的創建一個廣播接收器,並使用Context.registerReceiver()方法來註冊它。有關更多動態創建接收器的方法,請看BoradcastReceiver類說明。

屬性:
android:enabled
是否能夠實例化這個廣播接收器。默認值是true。
android:exported
是否能夠接收來自應用程序外部的消息。默認值是true。
android:icon
圖標
android:label
標籤
android:name
這個屬性值要用廣播接收器的實現類的類名來設置,它是BroadcastReceiver類的一個子類。通常要使用類的全名來設置(如:com.example.project.ReportReceiver)。但是,也可以使用簡寫(如:.ReportReceiver)。系統會自動的把<manifest>元素中的package屬性所設定的包名添加到這個簡寫的名稱上。這個屬性沒有默認值,這個名字必須被指定。
android:permission
定義把消息發送給該廣播接收器的廣播器所必須要有的權限。如果沒有設置這個屬性,那麼<application>元素的permission屬性所設置的權限就適用於這個廣播接收器。如果<application>元素也沒有設置權限,那麼該接收器就不受權限的保護。
android:process
設置該廣播接收器應該運行在那個進程中的進程名。通常,應用程序的所有組件都在給應用程序創建的默認進程中運行,它有與應用程序包名相同的名稱。<application>元素的process屬性能夠給它的所有組件設置一個不同的默認進程,但是它的每個組件自己的process屬性能夠覆蓋這個默認設置,這樣就允許把一個應用程序分離到多個進程中。

 

 


PART--20 provider標籤

語法:

複製代碼
<provider android:authorities="list"
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string">
    . . .
</provider>
複製代碼

說明:
這個元素用於聲明一個內容提供器,它對應一個ContentProvider類的子類。它提供了對由應用程序管理的數據的結構化的訪問。應用程序使用的所有的內容提供器都必須在其清單文件中由<provider>元素來聲明。對於那些沒有在清單中聲明的內容提供器,系統看不到,也不會運行。(只需要聲明那些作爲該應用程序一部分的來開發的那些內容提供器,而不是那些由應用程序使用的由其他人開發本應用之外的那些內容提供器)。

Android系統通過content:URI的授權部分來識別內容提供器。例如,假設下列的URI要傳遞給ContentResolver.query()方法:
content://com.example.project.healthcareprovider/nurses/rn
content:表示數據是屬於內容提供器的,授權(com.example.project.healthcareprovider):標識着一個具體的提供器。因此授權必須唯一的。通常,就像這個例子一樣,授權是一個完整的ContentProvider子類的名稱。URI的路徑部分被內容提供器用來標識具體的數據子集,但是那些路徑沒有被聲明在清單文件中。

屬性:
android:authorities
標識內容提供器範圍內的數據URI的授權列表,有多個授權時,要用分號來分離每個授權。爲了避免衝突,授權名應該使用Java樣式的命名規則(如:com.example.provider.cartoonprovider)。通常,用ContentProvider子類名稱來設定這個屬性。
這個屬性沒有默認值,至少要指定一個授權。

android:enabled
指定這個內容提供器是否能夠被系統安裝。默認值是true。

android:exported
指定該內容提供器是否能夠被其他的應用程序組件使用。默認值是true。

android:grantUriPermission
設定那些對內容提供的數據沒有訪問權限的訪問者,是否能夠被授予訪問的權限,這個權限是臨時性的,它會克服由readPermission、writePermission和permission屬性的設置限制。如果這個屬性設置爲true,那麼權限就可以授予訪問者,否則不會授予沒有訪問權限的訪問者。如果設置爲true,則權限可以臨時被授予內容提供器的任何數據。如果設置爲false,則權限只能被授予<gran-uri-permission>子元素中所列出的數據子集。默認值是false。

android:icon
圖標。

android:initOrder
定義內容提供器應該被實例化的順序,這個順序是相對與相同進程所擁有的其他內容提供器的。當內容提供器間有相互的依賴時,就需要設置這個屬性,以確保它們能夠按照其依賴的順序被創建。這個屬性值是一個簡單的整數,大的數字要被優先初始化。

Android:label
標籤。

android:multiprocess
設定是否能夠在每個使用該內容提供器的客戶端進程中都創建一個內容提供器的實例。默認值是false。

android:name
名稱。

android:permission
設定客戶端在讀寫內容提供器的數據時必須要有的權限的名稱。

android:process
定義內容提供器應該運行在那個進程中的進程名稱。通常,應用程序的所有組件都運行在給應用程序創建的默認進程中。它有與應用程序包相同的名稱。<application>元素的process屬性能夠給其所有的組件設置一個不同的默認進程。但是每個組件都能夠用它們自己的process屬性來覆蓋這個默認設置,從而允許把應用程序分離到不同的多個進程中。

android:readPermission
設置查詢內容提供器的數據時,客戶端所必須要有的權限。

android:syncable
設定內容提供器控制下的數據是否要與服務器上的數據進行同步。

android:writePermission
設置修改內容提供器的數據時,客戶端所必須要有的權限。

 

 

 


PART--21 grant-uri-permission標籤

語法:

<grant-uri-permission android:path="string"
                      android:pathPattern="string"
                      android:pathPrefix="string"/>

說明:
這個元素用於給內容提供器的數據子集授權。數據子集是由content:URI的路徑部分來標識的。授權是提供器給客戶端提供的一種能力,這樣客戶就可以訪問通常沒有權限訪問的數據,從而克服基於單次訪問的限制。

如果內容提供器的grantUriPermissions屬性被設置爲true,那麼權限能夠被授予內容提供器範圍內的任何數據。但是,如果grantUriPermission屬性被設置爲false,那麼權限就只能授予這個元素所指定的數據子集。一個內容提供器能夠包含任意多個個<grant-uri-permission>元素。每個都只能指定一個路徑(三個可能屬性中的一個)。

屬性:
android:path
android:pathprefix
android:pathPattern
一個路徑標識了能夠被授權的一個或多個數據子集。path屬性指定了一個完整的路徑,權限只能被授予這個路徑所標識的具體的數據子集。pathPrefix屬性指定了路徑的初始部分,權限能夠被授予共享這個初始路徑的所有數據子集。pathPattern屬性指定了一個完整的路徑,但是這個路徑中包含了通配符:
1. 星號(*)通配符,路徑中的*星號代表任意多個星號之前的那個字符,如a*,可跟a、aa、aaa、aaaa、...字符串匹配。
2. 點跟星號的組合(.*)通配符,它可以跟任意字符串進行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。

 

 

 


PART--22 uses-library標籤

語法:

<uses-library android:name="string"
              android:required=["true" | "false"] />

說明:
這個元素用於指定該應用程序必須鏈接的共享類庫。這個元素告訴系統該應用程序包的類裝載器中所包含的類庫代碼。
Android的所有包(如andorid.app,android.content,android.view和android.widget等)都在應用程序自動鏈接的默認類庫中。但是,有些包是在於獨立的類庫中,它們不能被自動的鏈接到應用程序包中,要查看這些包的文檔,以確定要把哪些類庫包含到包的代碼中。

屬性:
android:name
指定類庫的名稱。這個名稱是在對應的類庫文檔中提供的。例如:android.test.runner庫就是包含Android測試類的一個程序包。

android:required
指定應用程序是否需要有android:name屬性所指定的類庫:
true -- 沒有這個庫應用程序無法工作。如果用戶設備設備上沒有這個類庫,系統不允許該應用程序安裝在這個設備上。
false -- 如果該類庫存在,則應用程序能夠使用這個類庫,但是如果有必要,也可以設計成沒有該類庫,應用程序也能夠工作。系統會允許應用程序安裝,即使該類庫不存在。如果使用false,就要在運行時對類庫的有效性進行必要的檢查。
默認值是true。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章