Android 程序的主要組成部分 和 Manifest 文件html
Android由鬆耦合的組件組成,並使用Manifest 綁定在一塊兒;Manifest描述了每一個組件和他們之間的交互關係,還用於應用程序的元數據、其硬件和平臺的要求、外部庫以及必需的權限。android
如下幾個組件提供了應用程序的基本結構模塊:安全
Activity : 主要用於跟用戶交互,顯示界面,是android程序的表示層app
Service :Android的幕後工做者,不可見,不能交互,能夠更新數據源和Activity,觸發通知和廣播Intent。框架
Content Provider :顧名思義,內容提供者,就是向別的應用程序提供數據的。用來管理和持久化應用程序數據,一般會與SQL數據交互。ide
Intent :強大到沒法想象的牛逼人物,Android 幾乎無時無刻不在應用它,他是一個強大的應用程序間的消息傳遞框架。他能夠用來啓動中止Activity和Service,在系統範圍內活想目標Activity。Service或BroadcastReceiver 廣播消息,以及請求對特定的一條數據執行操做。佈局
BroadCast Receiver :Intent 監聽器。BroadCast Receiver使應用程序能夠監聽到那些匹配指定的過濾的Intent廣播。BroadCast Receiver會自動啓動應用程序來響應某個收到的Intent,這個特色使他們成爲了事件驅動的應用程序的最佳選擇。單元測試
Widget :一般添加到設備主屏幕的可視化應用程序組件。Widget是BroadCast Receiver的特殊變體,可用於建立動態的交互式應用程序控件。用戶能夠把這些組件添加主屏幕上。測試
Manifest 簡介ui
每一個Android項目都包含一個Manifest文件------Android Manifest.xml ,它存儲在項目層次的最底部。Manifest文件能夠定義應用程序及其組建和需求的結構和元數據。
它包含了組成應用程序的米一個Activity,Service,Content Provider 和 Broadcast Receiver的節點。並使用Intent Filter 和 權限來肯定這些組件之間以及這些組件和其餘應用程序的是如何交互的。
Manifest 文件還能夠指定應用程序的元數據(如它的圖標,版本號或主題)以及額外的頂層節點,這寫節點可用來指定必需的安全權限和單元測試,以及定義硬件、屏幕和平臺支持。
Manifest文件由一個跟manifest標籤組成,該標籤帶有一個被設爲項目名包的package屬性。它一般包含一個xmlns:android 屬性 來提供文件內使用的某些系統屬性。
下面介紹幾個Manifest幾個節點和屬性:
在<manifest>根節點下的幾個屬性
versionCode:將當前的應用程序版本定義爲一個整數。每次版本迭代式,這個數字都會增長。
versionName:可定義一個顯示給用戶的公共版本號。
installLocation:指定程序安裝的優先的位置。屬性值:internalOnly(僅安裝在內部存儲器上)。 preferExternal (只要有可能就安裝到外部存儲卡上) 。 auto (要求系統穩定,而後選擇安裝位置)
在manifest節點下的子節點標籤:
1.uses-sdk :用於定義要想正確安裝,必須指定最高版本(maxSDKVersion)、最低版本(minSDKVersion)和程序設計的目標版本(targetSDKVersion)。
2.Uses-configuation:指定應用程序支持的每一個輸入機制的組合,通常不須要包含這個節點,對於須要特殊輸入控制的遊戲來講,他頗有用,能夠指定如下輸入設備的任意組合:
android:reqTouchScreen :選擇notouch,stylus,finger 或者undefined之一,以指定必須的觸摸屏輸入。
android:reqKeyboardType :將鍵盤類型指定爲nokeys、qwerty、twelevekey 或 undefined,中的一種。
android:reqHardKeyboard :若是應用程序須要硬件鍵盤,設爲true
android:reqNavigation :指定爲nonav、dapad、trackball、wheel或undefined之一,做爲必須的導航設備。
android:reqFiveWayNav : 若是要求輸入設備可以向上,向下,向左和向右導航,而且可以單機當前的選項,那麼須要設爲true.這包括跟蹤球和D-pad
3.uses-feature: 指定應用程序須要的每一個硬件功能。能夠避免將應用程序安裝到不包含必要的硬件功能的設備上。
以nfc爲例:
<uses-feature android:name="android.hardware.nfc"/>
4.具體完整的硬件列表請看http://developer.android.com/guide/topics/manifest/uses-feature-element.html
5.supports-screens 用於指定程序針對哪些屏幕進行設計和測試。當程序支持某個設備的屏幕是,通常會使用開發人員提供的佈局文件中的縮放屬性來佈局。當在不支持的設備上運行時,系統可能會應用「兼容模式」來顯示應用程序,例如像素縮放,建立可擴展的佈局來適應全部的屏幕尺寸是一種最佳實踐。
其中的屬性有
<supports-screens
android:smallScreens="true"
分辨率比傳統的HVGA小的屏幕,一般爲QVGA屏幕
android:normalScreens="true"
指定典型的手機屏幕,至少是HVGA ,包括 WVGA和 WQVGA
android:largeScreens="true"
比普通屏幕大的屏幕,在這裏認爲大屏幕比手機的顯示屏大不少
android:xlargeScreens="true"
比普通的大屏幕更大的屏幕,一般是平板電腦屏幕的屏幕
在Honeycomb MR2(API level 13)引入額外的屬性,更細緻的控制程序佈局能夠支持屏幕的尺寸。若是程序要支持運行着API level 13之前的平臺版版本的設備,一邊來講最是把這些額外的屬性與早期的屬性結合使用
android:requiresSmallestWidthDp="480"
容許用設備無關的像素指定支持的最小屏幕寬度(值屏幕高度與寬度中較小的一個),這個屬性用來在Google Play Store上過濾不知他們的屏幕的應用程序,so 使用時應指定爲提供能夠接受的用戶體驗。佈局所需的最小絕對像素數。
android:compatibleWidthLimitDp="600"
指定一個上限,超出此值後應用程序可能無擴展。使用該屬性能夠使系統在屏幕分辨率大於你指定的值的設備上啓動兼容模式。
android:largestWidthLimitDp="720"
指定一個絕度上限,超出這個上限後,程序將沒法掐當的擴展。一般,在屏幕分辨率大於你指定的值的設備上,這會致使系統強制應用程序在兼容模式下運行(而用戶沒法禁用此模式)
強制應用程序進入兼容模式 被認爲是一種糟糕的用戶體驗,只要可能,就應該讓佈局可以恰當的擴展,從而在更大的設備上也能夠使用。
/>
6.support-gl-texture:用於聲明程序可以一種特定的GL紋理格式壓縮的文理資源。若是程序可以支持多種紋理壓縮格式,就必須使用多個support-gl-texture元素。如要了解更多,能夠看http://developer.android.com/guide/topics/manifest/supports-gl-texture-element.html
7.Uses-permission 做爲安全模型一部分,它聲明瞭應用程序的須要。安裝程序時,設定的權限會所有告訴用戶,由他們來決定贊成與否,對不少API是必須聲明權限,特別是付費和安全問題的服務。
例如:<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
8.permission: 應用程序組件能夠建立權限來限制對共享應用程序的訪問。可定製權限,也能夠用系統現有的。
9.instrument: instrument 類提供的一個測試框架,用來在測試應用程序運行時測試應用程序組件。
10.application: Manifest只能包含一個application節點。它使用各類屬性來指定應用程序的各個元數據(包含圖標,標題,主題等),通常會在開發時設置一個爲true的debugable屬性來啓動測試,但在發佈時應該禁用該屬性。
11.uses-library :用於指定該應用程序須要的共享庫。例如,地圖API被打包爲一個獨立的庫,它不是自動的連接。能夠指定一個包是必需的仍是可選的。指定必需時,在缺乏指定的設備上沒法安裝應用程序;指定爲可選時,應用程序在使用庫前,必需使用反射機制檢查該庫是否存在。
Example: <uses-library android:name="com.google.android.maps" android:required="false"/>