【Android】The Manifest File清單文件

在Android系統能夠啓動一個應用程序組件之前,系統必須通過閱讀應用程序AndroidManifest.xml文件(清單文件)來知道組件的存在。你的應用程序必須聲明它所有的組件在這個文件中,必須放在應用程序項目根目錄。

  Manifest文件做一系列事情包括聲明應用程序組件,例如:

  1、認證任何應用程序請求的用戶權限,例如網絡訪問或者讀用戶聯繫人的權限。

  2、聲明應用程序所需要的最小的API級別。

  3、聲明該應用程序使用的硬件或軟件的特點,例如攝像頭、藍牙或多點觸摸。

  4、需要鏈接的API庫,例如Google Maps Library。

  5、其它


聲明組件(Declaring components)

Manifest的主要的任務是通知系統關於應用程序的組件信息。例如,一個manifest文件可以聲明一個activity,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:icon="@drawable/app_icon.png" ... >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" ... >
        </activity>
        ...
    </application>
</manifest>

在<application>元素中,android:icon屬性指定一個用來標識應用程序的圖標。

在<activity>元素中,android:name屬性指明瞭Activity子類的全稱,android:label屬性指定一個字符串作爲用戶可見的activity標籤。

你必須像下面一樣聲明所有的應用程序組件:

1、<activity>元素聲明activities

2、<service>元素聲明services

3、<receiver>元素聲明broadcast receivers

4、<provider>元素聲明content provider

    你代碼中無聲明的Activities、services、和content providers對系統是不可見的,因此永遠都無法運行。可是,broadcast receivers可以被聲明在manifest中或者用代碼動態(就像BroadcastReceiver對象)並且註冊進系統通過registerReceiver()。


聲明組件功能(Declaring component capabilities)

就像上面討論的,在activiting組件,你可以使用Intent來啓動activities、service、和broadcast receiver。你可以通過顯示地命名目標組件(使用組件類名)在intent中。然而,intent的真下能力在於intent actions的概念。在intent actions,你簡單的描述你想要執行的動作類型(或者是你希望實現操作的數據)並且允許系統找一個設備上的組件來實現action並且啓動它。如果有多個組件能完成那個intent描述的動作,那麼由用戶選擇哪一個來用。(PS:像windows註冊表和擴展名的概念)

  系統辨別哪個組件能響應一個intent通過比較intent filters,被設備上的其它應用程序的manifest文件提供。

  當你在應用程序manifest中聲明一個組件時,你可選的可以包含intent filters,用來聲明你組件的能力,以致它可以響應來自其它應用程序的intent。你可聲明一個intent filter給你的組件通過添加<intent-filter>元素作爲組件聲明元素的子元素。

  例如,一個郵件應用程序有一個activity用來組建一個新郵件,或者會聲明一個intent filter在它的manifest入口點來響應"發送"intents(爲了發送郵件)。那一個Activity在你應用程序裏可以創建一個intent帶上“發送”動作(ACTION_SEND),系統匹配郵件應用程序的“發送”activity,然後用startActivity()啓動它。



聲明應用程序需求(Declaring application requirements)

有各種各樣的設備被Android管理,並不是他們中的所有都提供相同的特點和能力。爲了防止你的應用程序安裝在缺少設備環境的機器上,所以清晰的定義一個你的應用需要的設備和軟件要求在你的manifest中顯得非常重要。它們中大多數只是傳達信息,系統不會閱讀它們,但是外部services例如Android Market會閱讀他們目的是給用記提供過濾當他們搜索應用程序在他們的機器上時。  

  例如,如果你的應用程序要求一個攝像頭然後使用2.1的API(Level 7),你應該聲明 這些作爲要求在你的manifest文件裏。這樣的話,沒有攝像頭的和Android version小於2.1的機器就不能安裝Android Market。

  可是,你也可以聲明你的應用程序使用攝像頭,但並不一定要求。在這種情況下,你的應用程序在運行時會檢查以決定這個設備是否有一個攝像頭並且關閉所有使用使用攝像頭的功能在沒有攝像頭的情況下。

  下面是一些重要的設備特性你應該考慮的在你設計和開發你的應用程序的時候。

  1、Screen size and density 

    爲了分類設備的屏幕類型,Android爲每種設備定義了兩種屬性:屏幕大小(屏幕物理尺寸)和屏幕分辨率(屏幕物理像素密度或每英寸DPI-DOT)。爲了簡化各種類型屏幕的配置,Android系統把他們生來可選擇的組讓他們更容易被定位。

    屏幕大小是:small, normal, large 和extra larege.

    屏幕分辨率是:low density, medium density, hidensity 和extra hight density

    默認,你的應用程序兼容所有的屏幕大小和分辨率,因爲android系統生成全適的調整對你的UI佈局和圖像資源。可是,你應該建立獨特的佈局爲某一種特定的屏幕大小並且提供特定的圖片爲特定的密度,使用可選的佈局和資源,並且聲明在你的manifest文件中哪個屏幕大小你的應用程序支持通過<support-screens>元素。

  2、Input configurations 
    很多設備提供不同類型的輸入機制,例如硬件鍵盤,跟蹤球,或者是five-way瀏覽器。如果你的應用程序要求一個特別各類的輸入硬件,那麼你應該聲明它在你的manifest文件中通過<uses-configuration>元素。可是,極少數情況下一個應用程序應該聲明某種輸入配置。

  3、Device features 

    會有很多的硬件和軟件特性可能存在或不存在在一個給定的android設備上,例如攝像頭、光感器、藍牙、某種版本的OpenGL、或者是觸摸屏的精確性。你應該永遠不假設某種特性在Android設備上具有(不是說標準Android庫),所以你應該聲明任何特點你應用程序會使用到的通過<uses-feature>元素。

  4、Platform Version 
    不同的Android設備通常運行不同版本的Android平臺,例如Android1.6或Android 2..每個連續的版本通常包含不存在於版本的額外的APIs。爲了指定哪個API集合是可用的,每個平臺版本指定一個API Level(例如,Android 1.0 是API Level 1並且Android 2.3是 API Level 9)。如果你使用任何1.0版本以後的API,你應該聲明最小的API Level使用<uses-sdk>元素。

  你聲明所有的要求爲你的應用程序非常重要,因爲,當你發佈你的應用程序在Android Market時,Market使用這些聲明來過濾哪些程序在各個設備上是可用的。這校報話,你的應用程序將出現在符合你所有要求的設備上。



思源軟件:http://www.mysjtu.com/page/M0/S546/546957.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章