Android清单AndroidManifest详细说明
Android清單AndroidManifest詳細(xì)說明
在初見Intent一章中,我們已嘗試過使用「startActivity」函式,傳入適當(dāng)?shù)摹窱ntent」,來呼叫瀏覽器的Activity。
到目前為止,我們可以由學(xué)習(xí)Android 應(yīng)用程式的經(jīng)驗(yàn)中歸納得出:所有Android 程式的運(yùn)作流程,都定義在Activity 中。
Android 系統(tǒng)與其他系統(tǒng)很不一樣的地方是:它的應(yīng)用程式并不直接與底層系統(tǒng)緊密結(jié)合,而是跑在Android 框架中。?這意思是設(shè)計(jì)Android 應(yīng)用程式時(shí),我們并不需要關(guān)心實(shí)際上運(yùn)作的機(jī)器是哪一牌的手機(jī)或是哪一種嵌入式系統(tǒng),或使用哪一種架構(gòu)(ARM、x86、MIPS)。?我們要關(guān)心的只有Android 框架提供了那些功能,好讓我們能操作這臺(tái)設(shè)備。?具體來說就是我們只要知道這臺(tái)機(jī)器的螢?zāi)淮笮 ⒂袥]有鍵盤,有沒有支援GPS 等等訊息,就知道我們寫的應(yīng)用程式是否能在這臺(tái)機(jī)器上順暢地運(yùn)作。?Android 框架與底層系統(tǒng)的整合的問題完全可以留給軔體工程師來操心。
在執(zhí)行「startActivity」函式時(shí),應(yīng)用程式并不是直接呼叫另一個(gè)Activity,而是將「Intent」(意圖)傳進(jìn)Android 框架中。?Android 框架會(huì)查看「startActivity」 呼叫所傳入的動(dòng)作與Intent 內(nèi)容是否在注冊(cè)表中,如果符合,就啟動(dòng)對(duì)應(yīng)的服務(wù)或Activity。
Android 系統(tǒng)中的每一個(gè)應(yīng)用程式,在安裝的過程里,都得事先在Android 框架中注冊(cè)、登記這個(gè)應(yīng)用程式所建立的Activity,并事先注明會(huì)使用到的服務(wù)。?譬如當(dāng)我們?cè)贏ndroid 上安裝我們撰寫的BMI 應(yīng)用程式時(shí),BMI 應(yīng)用程式就會(huì)向Android 框架登記相關(guān)資訊:BMI 應(yīng)用程式將會(huì)用到「Bmi」這個(gè)Activity。
這份訊息存在于每個(gè)Android應(yīng)用程式專案根目錄下的「?AndroidManifest?.xml」檔案中。?如果我們?cè)诔淌嚼?#xff0c;要用到其他應(yīng)用程式或服務(wù)所提供的功能,也需一并在此列出。
在安裝應(yīng)用程式的時(shí)候,Android 框架會(huì)根據(jù)應(yīng)用程式提供的這份清單,將資訊注冊(cè)于Android 框架的注冊(cè)表中。
備注:
這么說其實(shí)是不太精確的。?Android 應(yīng)用程式的運(yùn)作流程,存在于四種載體中:各種載體的相關(guān)內(nèi)容會(huì)在后續(xù)章節(jié)提到時(shí)作解說。
預(yù)設(shè)的Activity 清單
我們使用eclipse Android開發(fā)工具打開「BMI/?AndroidManifest?.xml」檔案。?切換到「?AndroidManifest?.xml」分頁標(biāo)簽,查看預(yù)設(shè)的「BMI/AndroidManifest?.xml」檔案原始碼:
? 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.demo.android.bmi" 4 android:versionCode="1" 5 android:versionName="1.0"> 6 <application android:icon="@drawable/icon"> 7 <activity android:name=".Bmi" android:label="@string/app_name"> 8 <intent-filter> 9 <action android:name="android.intent.action.MAIN" /> 10 <category android:name="android.intent.category.LAUNCHER" /> 11 </intent-filter> 12 </activity> 13 </application> 14 <uses-sdk android:minSdkVersion="X" /> 15 </manifest>我們分行講解如下:
? <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" ....> .... </manifest>「?AndroidManifest?.xml」這個(gè)檔案也是以XML格式描述,每個(gè)Android應(yīng)用程式都需要一個(gè)「?AndroidManifest?.xml」檔案,每份「AndroidManifest?.xml」檔案的開頭都會(huì)出現(xiàn)這段敘述。?而整個(gè)「?AndroidManifest?.xml」檔案的敘述,都包含在「manifest」(清單)這個(gè)主要標(biāo)簽中。
? package="com.demo.android.bmi"「package」 是「manifest」(清單)標(biāo)簽的一個(gè)特別屬性,范例中的內(nèi)容可用來標(biāo)明,這個(gè)應(yīng)用程式的進(jìn)入點(diǎn)存在于「com.demo.android.bmi」這個(gè)名稱空間/路徑中。
? android:versionCode="1" android:versionName="1.0"「android:versionCode」和「android:versionName」是應(yīng)用程式版本號(hào)。?這兩個(gè)屬性是可選的(非必要)。?「android:versionName」是給使用者看的版本號(hào),如「1.0」、「2.0」。?「android:versionCode」則是開發(fā)者用的內(nèi)部版本號(hào),一般使用流水號(hào)。
? <application android:icon="@drawable/icon" android:label="@string/app_name"> ... </application>「manifest」標(biāo)簽中主要包含一個(gè)「application」標(biāo)簽(備注1)。?「application」標(biāo)簽里面,定??義了所有這個(gè)應(yīng)用程式用到的Activity、服務(wù)等資訊。「application」標(biāo)簽中的「android:icon」屬性,定義了這個(gè)應(yīng)用程式將顯示在Android 主畫面中的應(yīng)用程式圖示。「android:icon="@drawable/icon"」表示應(yīng)用程式圖示的資源檔存在于「res/drawable/icon」 中。?圖示的大小必須超過64x64 像素(Pixel)。「application」標(biāo)簽中的「android:label」屬性可用來指定應(yīng)用程式將顯示在Home 主畫面上的名稱??。?也就是預(yù)設(shè)剛開好機(jī)時(shí),可以從桌面下方拉出的應(yīng)用程式列表。
? <activity android:name=".Bmi" android:label="@string/app_name"> ... </activity>「application」標(biāo)簽中所有用到的Activity ,都要包含在一個(gè)個(gè)「activity」標(biāo)簽中(備注2)。?Activity 是Android 應(yīng)用程式與使用者互動(dòng)的主要元素,當(dāng)使用者開啟一個(gè)應(yīng)用程式,第一個(gè)看到的畫面就是一個(gè)Activity。?若是一個(gè)應(yīng)用程式中包含多個(gè)畫面時(shí),會(huì)定義多個(gè)不同的Activity,我們也必須在「application」標(biāo)簽中,使用多個(gè)「activity」標(biāo)簽,為不同的Activity 添加描述。?如果我們已經(jīng)在程式碼中定義好了Activity ,卻忘了在「AndroidManifest?.xml」檔案中加入對(duì)應(yīng)的「activity」標(biāo)簽,那么在執(zhí)行中呼叫到這個(gè)Activity的時(shí)候,將無法開啟這個(gè)Activity。
「activity」標(biāo)簽的「android:name」屬性,指出了這個(gè)Activity 所對(duì)應(yīng)的類別(class)。?「activity」標(biāo)簽中的「android:label」屬性可用來指定應(yīng)用程式將顯示在Activity 畫面上方的名稱。?也可以在程式碼中透過「setTitle(“名稱”)」來動(dòng)態(tài)修改。
因?yàn)樵谏弦粚印窶anifest」標(biāo)簽屬性中已經(jīng)定義了「package="com.demo.android.bmi"」,因此在「activity」標(biāo)簽的「android:name」屬性中,「.Bmi」代表著「com .demo.android.bmi.Bmi」的簡寫。?也可以寫成「Bmi」,一樣是代表「com.demo.android.bmi.Bmi」這個(gè)類別。
? <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>「intent-filter」標(biāo)簽定義了這個(gè)「activity」的性質(zhì)。?「intent-filter」中主要包含了兩個(gè)標(biāo)簽:「action」跟「category」標(biāo)簽。?「action」標(biāo)簽中的「android:name」屬性,其內(nèi)容「android.intent.action.MAIN」表示:這個(gè)Activity 是此應(yīng)用程式的進(jìn)入點(diǎn)(就像程式中常見的main 主程式),開啟這個(gè)應(yīng)用程式時(shí),應(yīng)先執(zhí)行這個(gè)Activity。?。?常見的還有「android.intent.action.EDIT」等標(biāo)簽,會(huì)在之后章節(jié)用上的時(shí)候講解。?「category」標(biāo)簽中的「android:name」屬性,其內(nèi)容「android.intent.category.LAUNCHER」表示:這個(gè)Activity 將顯示在Launcher 的應(yīng)用程式列表中。
我們把整個(gè)檔案合到一起看,可以總結(jié)出這個(gè)檔案所傳達(dá)的訊息:在「com.demo.android.bmi」路徑下的「Bmi.java」這個(gè)檔案中,已定義了一個(gè)主要的Activity; 當(dāng)我們打??開Android 的時(shí)候,顯示的是位于「res/drawable/icon」的圖示。?一旦我們按下圖示來啟動(dòng)這個(gè)應(yīng)用程式,Android 應(yīng)用程式框架會(huì)去尋找到定義了「android.intent.action.MAIN」內(nèi)容的「.Bmi」activity,并呼叫執(zhí)行。
? <uses-sdk android:minSdkVersion="X" />Android SDK 1.1 版之后引入了這條敘述,「X」代表了目標(biāo)版本代號(hào)。?透過指定這個(gè)參數(shù),系統(tǒng)可以依此辨別應(yīng)用程式是否使用相容的SDK 版本,好決定能否在這臺(tái)機(jī)器上安裝執(zhí)行。?這也是一個(gè)可選填的選項(xiàng)。?但如果我們的應(yīng)用程式要發(fā)布出去,一些強(qiáng)勢(shì)的通路如Google Android Market 已規(guī)定所有新發(fā)布的應(yīng)用程式必須指定「android:minSdkVersion」這個(gè)參數(shù)。
各目標(biāo)版本與代號(hào)對(duì)應(yīng)表如下:
| 目標(biāo)版本 | 代號(hào) |
| 3.0 | 11 |
| 2.3.3 | 10 |
| 2.3 | 9 |
| 2.2 | 8 |
| 2.1 | 7 |
| 2.0.1 | 6 |
| 2.0 | 5 |
| 1.6 | 4 |
| 1.5 | 3 |
| 1.1 | 2 |
| 1.0 | 1 |
目前各版本占有率可以參考官方的版本占有率圖表:?http://developer.android.com/resources/dashboard/platform-versions.html
這個(gè)圖表是根據(jù)最近2 周間連上Android Market 設(shè)備的比率來繪制。
備注1
除了「application」標(biāo)簽外,還有「uses-permission」(例如允不允許存取SMS、能否存取聯(lián)絡(luò)簿、相機(jī)功能)、「permission」、「instrumentation」等主要標(biāo)簽。?相關(guān)的內(nèi)容在后續(xù)章節(jié)用到時(shí)再一并解說。
備注2
除了「activity」標(biāo)簽外,對(duì)應(yīng)于Android 應(yīng)用程式的運(yùn)作流程,還有「service」、「receiver」、「provider」等主要元件。?相關(guān)內(nèi)容會(huì)在后續(xù)章節(jié)提到時(shí)作解說。
參考資料
- Android manifest?http://developer.android.com/reference/android/R.styleable.html#AndroidManifest
- Intent Action?http://developer.android.com/reference/android/content/Intent.html
總結(jié)
以上是生活随笔為你收集整理的Android清单AndroidManifest详细说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse调试Logcat类的说明
- 下一篇: Android中build target