AndroidManifest.xml是每個android程式中必須的檔案。它位於工程的根目錄,描述了package中的全域資料,包括了package中暴露的組件(activities, services, 等等),他們各自的實作類別,各種能被處理的資料和啟動位置。
此檔案一個重要的地方就是它所包含的intent-filters。這些filters描述了activity啟動的位置和時間。每當一個activity(或者作業系統)要執行一個操作,例如:開啟網頁或聯絡簿時,它建立出一個intent的對象,這個對象承載一些資訊描述了你想做什麼,你想處理什麼資料,資料的類型,和一些其他資訊。Android比較這個intent對象和每個application所暴露的intent-filter中的資訊,來找到最合適的activity來處理調用者所指定的資料和操作。
在AndroidManifest.xml檔案中,除了能聲明你程式中的Activities, Content Providers, Services, 和Intent Receivers,你還能指定permissions和instrumentation(安全控制和測試)。這是一個簡單的AndroidManifest.xml。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.my_domain.app.helloactivity"> <application android:label="@string/app_name"> <activity class=".HelloActivity"> <intent-filter> <action android:value="android.intent.action.MAIN"/> <category android:value="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application></manifest>
值得一提一些常用之處:幾乎所有的AndroidManifest.xml在第一個元素中包含了命名空間的聲明,xmlns:android="http://schemas.android.com/apk/res/android"。這樣使得Android中各種標準屬效能在檔案中使用,它提供了大部分元素中的資料。
大部分manifests包含了單個<application>的元素,它定義了所有的application層級組件和屬性,並能在package中使用。任何被使用者看作頂層應用程式,並能被程式啟動器所用的package,需要包含至少一個Activity組件來支援MAIN操作和LAUNCHER種類,如上述代碼中所見。
這裡是AndroidManifest.xml檔案結構的一個詳細的列表,描述了所有能被使用的標記。
manifest: 根節點,描述了package中所有的內容。在它之下能放置:
uses-sdk : 編譯SDK的要求。比如:<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="16" />
前者是最小的SDK版本要求,後者是目標編譯版本要求,跟project.properties中的target的API層級要一致,否則該應用不會運行在相應版本OS上。
uses-permission: 請求你的package正常運作所需賦予的安全許可。一個manifest能包含零個或更多此元素。執行個體:如果自己編寫的camera app在運行時提示fail,請在XML檔案中先加入以下語句看看是否可以解決
<uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" />
instrumentation: 聲明了用來測試此package或其他package指令組件的代碼。一個manifest能包含零個或更多此元素。
application: 包含package中application層級組件聲明的根節點。此元素也可包含application中全域和預設的屬性,如標籤,icon, 主題,必要的許可權,等等。一個manifest能包含零個或一個此元素(不允許多餘一個)。在它之下能放置零個或更多下列組件聲明:
activity: 是用來與使用者互動的主要工具。當使用者開啟一個應用程式的初始頁面就是一個activity,大部分被使用到的其他頁面也由不同的activity所實現並聲明在另外的activity標記中。注意:每一個activity必須要一個<activity>標記對應,無論它給外部使用或是只用於自己的package中。如果一個activity沒有對應的標記,你將不能運行它。另外,為了支援運行時尋找你的activity,你能包含一個或多個<intent-filter>元素來描述你activity所支援的操作:
intent-filter: 聲明了指定的一組組件支援的Intent值,從而形成了IntentFilter。除了能在此元素下指定不同類型的值,屬性也能放在這裡來描述一個操作所需的唯一的標籤,icon和其它資訊。action 組件支援的Intent action。category 組件支援的Intent Category.
receiver: IntentReceiver能使得application獲得資料的改變或者發生的操作,即使它當前不在運行。利用activity標記,你能選擇地包含一個或多個receiver所支援的<intent-filter>元素;
service: Service是能在後台運行任意時間的組件;
provider: ContentProvider是用來管理持久化資料並發布給其他應用程式使用的組件。
參考原文:http://www.cnblogs.com/jocc/archive/2007/11/25/971511.html
參考原文:http://stackoverflow.com/questions/9718526/i-am-getting-java-lang-runtimeexception-fail-to-connect-to-camera-service-in-an