鍍金池/ 教程/ Android/ Android SDK 上手指南:項(xiàng)目清單
Android SDK 上手指南:Java 應(yīng)用程序編程
Android SDK 上手指南:下一步學(xué)習(xí)方向
Android SDK 上手指南:用戶交互
Android SDK 上手指南:項(xiàng)目清單
Android SDK 上手指南:虛擬與物理設(shè)備
Android SDK 上手指南:Activity 與生命周期
Android SDK 上手指南:示例項(xiàng)目
剖析 Android SDK:Android 組件詳解
Android SDK 上手指南:應(yīng)用程序數(shù)據(jù)
Android SDK 上手指南:應(yīng)用程序資源
Android SDK 上手指南:應(yīng)用程序發(fā)布
Android SDK 上手指南:應(yīng)用程序結(jié)構(gòu)
Android SDK 上手指南:知識(shí)測(cè)試(1)
Android SDK 上手指南:用戶界面設(shè)計(jì)
Android SDK 上手指南:運(yùn)行與調(diào)試

Android SDK 上手指南:項(xiàng)目清單

對(duì)于一個(gè)項(xiàng)目來(lái)說(shuō),清單既可以很簡(jiǎn)單、也可以很復(fù)雜,其具體情況要視應(yīng)用程序而定。我們首先看看清單中那些在所有應(yīng)用中都不可或缺的組成部分,再進(jìn)一步探索未來(lái)在項(xiàng)目開發(fā)中可能涉及的備選組成部分。

在本系列教程當(dāng)中,我們將共同從零開始學(xué)習(xí) Android 開發(fā),同時(shí)了解與這套移動(dòng)平臺(tái)協(xié)作所必需的基礎(chǔ)概念及實(shí)踐。到目前為止,我們已經(jīng)熟悉了 Android 項(xiàng)目中的各個(gè)組成部分,包括其資源。在今天的文章中,我們將以項(xiàng)目清單文件作為核心內(nèi)容。

介紹

對(duì)于一個(gè)項(xiàng)目來(lái)說(shuō),清單既可以很簡(jiǎn)單、也可以很復(fù)雜,其具體情況要視應(yīng)用程序而定。我們首先看看清單中那些在所有應(yīng)用中都不可或缺的組成部分,再進(jìn)一步探索未來(lái)在項(xiàng)目開發(fā)中可能涉及的備選組成部分。

清單文件當(dāng)中可以包含眾多元素與屬性,我們不妨點(diǎn)擊此處在 Android 開發(fā)者指南當(dāng)中找到關(guān)于它們的詳細(xì)信息。清單擁有幾大主要作用:它指定應(yīng)用程序包、提供應(yīng)用組件的形式化描述,此外還負(fù)責(zé)聲明權(quán)限、必要的 API 級(jí)別以及鏈接庫(kù)等。我們目前只討論能夠在清單中列出的最為基礎(chǔ)的元素與屬性,但大家也要知道其中完全可以容納更多元素、并在所涵蓋的元素范圍之外使用更多附加屬性。

1. 清單元素

在 Eclipse 當(dāng)中打開我們的項(xiàng)目清單文件——大家總能在項(xiàng)目的根目錄下找到這份清單。正如前面所提到,大家可以通過(guò)多種方式查看清單內(nèi)容。在底部的編輯器區(qū)域中,大家可以看到清單、應(yīng)用、權(quán)限、工具以及 XML 代碼等多個(gè)標(biāo)簽?,F(xiàn)在快速瀏覽這些標(biāo)簽——我們需要使用 XML 代碼,所以請(qǐng)切換到“AndroidManifest.xml”標(biāo)簽。

http://wiki.jikexueyuan.com/project/android-sdk/images/10.png" alt="" />

清單文件中所顯示的元素是由 Eclipse 在我們創(chuàng)建項(xiàng)目的同時(shí)生成的。但這些只夠滿足簡(jiǎn)單應(yīng)用的需求,在大多數(shù)情況下、我們還需要在創(chuàng)建項(xiàng)目時(shí)向清單中添加更多元素。文件中的根元素為 manifest 元素:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.myfirstapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 
</manifest> 

Eclipse 會(huì)在項(xiàng)目創(chuàng)建時(shí)將大家所選擇的包名稱作為 manifest 元素的屬性。版本代碼與名稱初始分別為 1 與 1.0。當(dāng)大家將應(yīng)用程序提交到 Play 商店中并進(jìn)行后續(xù)次級(jí)版本更新時(shí),需要為每一次更新分配一個(gè)更新數(shù)字。版本名稱是用戶們?cè)?Play 商店中所看到的應(yīng)用程序的實(shí)際名稱,所以大家可以隨意使用自己喜歡的數(shù)字來(lái)表示。用戶們是無(wú)法看到版本代碼的,而且新版本的數(shù)字必須高于舊版本——不過(guò)每一次遞增的幅度并不固定。如果大家嘗試向 Google Play 軟件商店上傳新的應(yīng)用程序版本,但其版本代碼并未高于之前版本的代碼,那么 Play 商店將拒絕這一上傳操作。

2. Uses-SDK 元素

我們?cè)?manifest 元素當(dāng)中首先見(jiàn)到的應(yīng)該是 uses-sdk 元素:

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 

這一元素負(fù)責(zé)定義最低必要 API 級(jí)別以及大家在測(cè)試項(xiàng)目時(shí)所設(shè)定的目標(biāo)級(jí)別。我們?cè)趧?chuàng)建應(yīng)用程序時(shí)就需要選擇這些相關(guān)值。如果需要,大家也可以在項(xiàng)目創(chuàng)建完成后,通過(guò)修改清單文件內(nèi)容進(jìn)行屬性變更。舉例來(lái)說(shuō),大家可能發(fā)現(xiàn)自己需要使用某些當(dāng)前選定 API 級(jí)別無(wú)法實(shí)現(xiàn)的平臺(tái)功能,這時(shí)就需要通過(guò)清單文件作出調(diào)整了。如果大家改變了 SDK 版本,Eclipse 會(huì)重新建立整個(gè)項(xiàng)目。

如果用戶設(shè)備所運(yùn)行的 API 級(jí)別低于項(xiàng)目的最低要求,則無(wú)法下載并安裝我們的應(yīng)用程序。列出目標(biāo) API 級(jí)別代表著我們已經(jīng)對(duì)當(dāng)前應(yīng)用版本進(jìn)行過(guò)測(cè)試。為保證應(yīng)用產(chǎn)品的可靠性,大家應(yīng)該在盡可能多的 API 級(jí)別之下進(jìn)行應(yīng)用程序測(cè)試。

3. Application 元素

Eclipse 還會(huì)向我們的清單中插入 application 元素。該元素中包含多種子元素,我們將在稍后逐一討論?,F(xiàn)在先來(lái)看看打開標(biāo)簽后的內(nèi)容:

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" >

需要注意的幾種主要屬性分別為圖標(biāo)、標(biāo)簽和主題條目。該元素還能夠承載多種附加屬性。圖標(biāo)屬性代表應(yīng)用可繪制資源中的某個(gè)文件。在默認(rèn)情況下項(xiàng)目會(huì)直接使用 Android 圖標(biāo),但大家可以添加自己的圖標(biāo)文件并將其引用到這里。標(biāo)簽圖標(biāo)引用的同樣是來(lái)自應(yīng)用程序資源的字符串。打開名稱中包含“res/values”字符串 XML 文件,大家會(huì)看到被引用的字符串,內(nèi)容如下所示:

<string name="app_name">MyFirstApp</string> 

這應(yīng)該是一條可讀字符串,因?yàn)樗鼤?huì)顯示在用戶界面中的多個(gè)位置,包括緊靠著啟動(dòng)圖標(biāo)的設(shè)備菜單。大家通常需要變更上述字符串內(nèi)容,例如在表述中加入空格——即“My First App”。

回到清單文件當(dāng)中,請(qǐng)注意 application 元素的主題屬性。它同樣引用一種資源,大家可以在“res/values”類型的 XML 文件中找到其具體引用關(guān)系,馬上去看看吧。接下來(lái)切換回清單標(biāo)簽。如果大家稍后決定定義自己的應(yīng)用程序風(fēng)格,則可以在主題屬性當(dāng)中對(duì)其加以引用。

4. Activity 元素

在 application 元素當(dāng)中,大家會(huì)看到一項(xiàng) activity 元素——它對(duì)應(yīng)著我們?cè)陧?xiàng)目開發(fā)中所創(chuàng)建的 Activity 類。在 activity 元素中包含有多種子元素,我們稍后再詳加討論?,F(xiàn)在先來(lái)看看打開后的標(biāo)簽內(nèi)容:

<activity 
    android:name="com.example.myfirstapp.MainActivity" 
    android:label="@string/app_name" > 

名稱屬性利用應(yīng)用程序包中所限定的路徑引用對(duì)應(yīng)類。標(biāo)簽允許我們控制 Activity 啟用時(shí)、窗口標(biāo)題中的顯示內(nèi)容。在默認(rèn)情況下,窗口標(biāo)題往往就是應(yīng)用程序名稱,因此大家一般不需要再進(jìn)行額外調(diào)整。不過(guò)隨著應(yīng)用程序復(fù)雜性的提高,大家將向項(xiàng)目中添加更多 Activity——每一個(gè)對(duì)應(yīng) UI 中的一套屏幕顯示方案。每一次向應(yīng)用程序中添加新的 Activity 類時(shí),大家都需要在 application 元素中添加一個(gè)對(duì)應(yīng)子元素,如下所示:

<activity android:name=".About" > 
</activity> 

如大家所見(jiàn),我們并不總是需要使用完整的應(yīng)用包名稱。上面展示的簡(jiǎn)寫形式也能正常起效,只要 Activity 類(名稱為‘About’)仍然處于 manifest 元素所定義的應(yīng)用包當(dāng)中即可。Activity 元素能夠容納多種屬性,從而決定用戶如何與其進(jìn)行交互。

5. 意圖過(guò)濾器

在主 activity 元素當(dāng)中,大家會(huì)看到一個(gè) intent-filter 元素:

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

這里的 Intent Filter 用于描述主 activity 能夠響應(yīng)哪些“意圖”。在 Android 系統(tǒng)中,所謂意圖是指在 Activity 啟動(dòng)時(shí)向其傳遞的數(shù)據(jù)對(duì)象。當(dāng)大家在自己的應(yīng)用程序中啟用一個(gè)又一個(gè) Activity 時(shí),就需要使用到意圖機(jī)制了——不過(guò)意圖也可以在不同應(yīng)用之間進(jìn)行傳遞。

針對(duì)主 activity 的意圖過(guò)濾器代表前者應(yīng)該在應(yīng)用程序運(yùn)行時(shí)被一并啟用。意圖是通過(guò) action 元素實(shí)現(xiàn)這一效果的,也就是上述代碼中的“MAIN”操作。另外,category 元素旨在通過(guò)分類名稱描述意圖過(guò)濾器,在我們的示例中就是“LAUNCHER”。這兩種元素相結(jié)合意味著我們的應(yīng)用程序應(yīng)該利用 Activity 作為其主入口點(diǎn),而且該入口點(diǎn)將在應(yīng)用程序運(yùn)行時(shí)一并啟動(dòng)。

意圖過(guò)濾器當(dāng)中可以包含多種子元素,其中包括數(shù)據(jù)規(guī)范。如果大家希望了解更多信息,可以點(diǎn)擊此處查看 Android 開發(fā)者指南中的“意圖與意圖管理器”章節(jié)。在 activity 元素中,除了 intent-filter 之外還可以包含其它子元素——例如 metadata,其作用是定義一個(gè)數(shù)據(jù)條目的名值對(duì)。

6. 用戶權(quán)限

我們已經(jīng)了解了創(chuàng)建項(xiàng)目時(shí) Eclipse 當(dāng)中所包含的所有清單元素,現(xiàn)在再來(lái)看看今后開發(fā)復(fù)雜應(yīng)用時(shí)需要涉及的其它元素。某些應(yīng)用程序需要判斷用戶是否有權(quán)執(zhí)行特定操作或者查看特定內(nèi)容,這種與權(quán)限相關(guān)的功能要靠 uses-permission 元素來(lái)實(shí)現(xiàn)。當(dāng)用戶在 Play 軟件商店中查看我們的應(yīng)用時(shí),該平臺(tái)會(huì)在應(yīng)用下載前顯示使用全部功能所必需的權(quán)限。如果用戶選擇繼續(xù),則需要接受權(quán)限控制提示,而后應(yīng)用才能正常運(yùn)行。 在清單當(dāng)中必須強(qiáng)制要求的權(quán)限包括使用內(nèi)部數(shù)據(jù)、寫入外部存儲(chǔ)以及訪問(wèn)攝像頭等設(shè)備功能。我們通過(guò)以下示例代碼演示這一概念:

<uses-permission android:name="android.permission.INTERNET" /> 

應(yīng)用程序還可以強(qiáng)制要求其它幾種潛在權(quán)限,請(qǐng)大家點(diǎn)擊此處查看 API 引用說(shuō)明中的“Manifest.permission”部分。

7. 用戶設(shè)備

有這樣一類清單元素可以被用于描述應(yīng)用程序運(yùn)行所必需的硬件及軟件功能,其中包括 uses-configuration 元素。在該元素中,大家可以為導(dǎo)航、鍵盤以及觸摸屏選項(xiàng)指定相關(guān)要求。在 uses-feature 元素中,大家可以通過(guò)功能名稱與布爾標(biāo)記列舉關(guān)于硬件或者軟件的單一功能要求。這些功能包括藍(lán)牙與攝像頭選項(xiàng),例如閃存、位置檢測(cè)以及傳感器。而 supports-screens 元素則允許大家為應(yīng)用程序定義所支持的屏幕尺寸,所指定的元素可同時(shí)涉及尺寸與像素密度。

8. 其它元素

我們前面所探討的元素主要圍繞著自己的初始應(yīng)用展開,但其它不同類型的應(yīng)用中也有一些元素值得關(guān)注。我們?yōu)闃?biāo)準(zhǔn)應(yīng)用所創(chuàng)建的初始項(xiàng)目在啟動(dòng)后只涉及用戶菜單并為使用者提供一個(gè)或者多個(gè) Activity 屏幕。然而其它類型的應(yīng)用還可能包括功能部件以及持續(xù)運(yùn)行的后臺(tái)進(jìn)程——旨在處理數(shù)據(jù)訪問(wèn)或者接收系統(tǒng)通知。

應(yīng)用程序通常會(huì)利用 Android 系統(tǒng)中的 Service 類來(lái)處理后臺(tái)進(jìn)程,這就要求我們?cè)谇鍐萎?dāng)中添加 service 元素——與 Activity 類似,service 元素與 Service 類之間一一對(duì)應(yīng)。Android 應(yīng)用中的內(nèi)容提供器負(fù)責(zé)管理對(duì)數(shù)據(jù)源的訪問(wèn),具體內(nèi)容被列入 provider 元素當(dāng)中。最后,清單中的 receiver 元素旨在幫助應(yīng)用接收來(lái)自其它應(yīng)用或者操作系統(tǒng)本身的意圖。

結(jié)論

到這里,我們已經(jīng)闡述了 Android 應(yīng)用的清單文件中,最為基礎(chǔ)的各項(xiàng)功能。當(dāng)大家創(chuàng)建應(yīng)用程序時(shí),Eclipse 都會(huì)同時(shí)向清單文件中添加初始項(xiàng)目必需的主要元素。隨著在應(yīng)用中引入更多功能,我們需要不斷向清單內(nèi)增加新內(nèi)容以確保應(yīng)用程序整體能夠順利起效。如果大家在開發(fā)過(guò)程中的實(shí)機(jī)或者虛擬設(shè)備測(cè)試出現(xiàn)了問(wèn)題,很可能是因?yàn)榍鍐沃腥鄙倌承┍匾?。在下一篇系列教程中,我們將一同了?Android 應(yīng)用如何存儲(chǔ)及訪問(wèn)數(shù)據(jù)。

原文鏈接: http://mobile.tutsplus.com/tutorials/android/android-sdk-project-manifest/