Android SDK簡明教程:專案清單

51CTO發表於2014-11-25

在本系列教程當中,我們將共同從零開始學習Android開發,同時瞭解與這套移動平臺協作所必需的基礎概念及實踐。到目前為止,我們已經熟悉了Android專案中的各個組成部分,包括其資源。在今天的文章中,我們將以專案清單檔案作為核心內容。

介紹

對於一個專案來說,清單既可以很簡單、也可以很複雜,其具體情況要視應用程式而定。我們首先看看清單中那些在所有應用中都不可或缺的組成部分,再進一步探索未來在專案開發中可能涉及的備選組成部分。

清單檔案當中可以包含眾多元素與屬性,我們不妨點選此處在Android開發者指南當中找到關於它們的詳細資訊。清單擁有幾大主要作用:它指定應用程式包、提供應用元件的形式化描述,此外還負責宣告許可權、必要的API級別以及連結庫等。我們目前只討論能夠在清單中列出的最為基礎的元素與屬性,但大家也要知道其中完全可以容納更多元素、並在所涵蓋的元素範圍之外使用更多附加屬性。

1. 清單元素

在Eclipse當中開啟我們的專案清單檔案——大家總能在專案的根目錄下找到這份清單。正如前面所提到,大家可以通過多種方式檢視清單內容。在底部的編輯器區域中,大家可以看到清單、應用、許可權、工具以及XML程式碼等多個標籤。現在快速瀏覽這些標籤——我們需要使用XML程式碼,所以請切換到“AndroidManifest.xml”標籤。

清單檔案中所顯示的元素是由Eclipse在我們建立專案的同時生成的。但這些只夠滿足簡單應用的需求,在大多數情況下、我們還需要在建立專案時向清單中新增更多元素。檔案中的根元素為manifest元素:

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

Eclipse會在專案建立時將大家所選擇的包名稱作為manifest元素的屬性。版本程式碼與名稱初始分別為1與1.0。當大家將應用程式提交到Play商店中並進行後續次級版本更新時,需要為每一次更新分配一個更新數字。版本名稱是使用者們在Play商店中所看到的應用程式的實際名稱,所以大家可以隨意使用自己喜歡的數字來表示。使用者們是無法看到版本程式碼的,而且新版本的數字必須高於舊版本——不過每一次遞增的幅度並不固定。如果大家嘗試向Google Play軟體商店上傳新的應用程式版本,但其版本程式碼並未高於之前版本的程式碼,那麼Play商店將拒絕這一上傳操作。

2. Uses-SDK元素

我們在manifest元素當中首先見到的應該是uses-sdk元素:

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

這一元素負責定義最低必要API級別以及大家在測試專案時所設定的目標級別。我們在建立應用程式時就需要選擇這些相關值。如果需要,大家也可以在專案建立完成後,通過修改清單檔案內容進行屬性變更。舉例來說,大家可能發現自己需要使用某些當前選定API級別無法實現的平臺功能,這時就需要通過清單檔案作出調整了。如果大家改變了SDK版本,Eclipse會重新建立整個專案。

如果使用者裝置所執行的API級別低於專案的最低要求,則無法下載並安裝我們的應用程式。列出目標API級別代表著我們已經對當前應用版本進行過測試。為保證應用產品的可靠性,大家應該在儘可能多的API級別之下進行應用程式測試。

3. Application元素

Eclipse還會向我們的清單中插入application元素。該元素中包含多種子元素,我們將在稍後逐一討論。現在先來看看開啟標籤後的內容:

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

需要注意的幾種主要屬性分別為圖示、標籤和主題條目。該元素還能夠承載多種附加屬性。圖示屬性代表應用可繪製資源中的某個檔案。在預設情況下專案會直接使用Android圖示,但大家可以新增自己的圖示檔案並將其引用到這裡。標籤圖示引用的同樣是來自應用程式資源的字串。開啟名稱中包含“res/values”字串XML檔案,大家會看到被引用的字串,內容如下所示:

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

這應該是一條可讀字串,因為它會顯示在使用者介面中的多個位置,包括緊靠著啟動圖示的裝置選單。大家通常需要變更上述字串內容,例如在表述中加入空格——即“My First App”。

回到清單檔案當中,請注意application元素的主題屬性。它同樣引用一種資源,大家可以在“res/values”型別的XML檔案中找到其具體引用關係,馬上去看看吧。接下來切換回清單標籤。如果大家稍後決定定義自己的應用程式風格,則可以在主題屬性當中對其加以引用。

4. Activity元素

在application元素當中,大家會看到一項activity元素——它對應著我們在專案開發中所建立的Activity類。在activity元素中包含有多種子元素,我們稍後再詳加討論。現在先來看看開啟後的標籤內容:

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

名稱屬性利用應用程式包中所限定的路徑引用對應類。標籤允許我們控制Activity啟用時、視窗標題中的顯示內容。在預設情況下,視窗標題往往就是應用程式名稱,因此大家一般不需要再進行額外調整。不過隨著應用程式複雜性的提高,大家將向專案中新增更多Activity——每一個對應UI中的一套螢幕顯示方案。每一次嚮應用程式中新增新的Activity類時,大家都需要在application元素中新增一個對應子元素,如下所示:

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

如大家所見,我們並不總是需要使用完整的應用包名稱。上面展示的簡寫形式也能正常起效,只要Activity類(名稱為‘About’)仍然處於manifest元素所定義的應用包當中即可。Activity元素能夠容納多種屬性,從而決定使用者如何與其進行互動。

5. 意圖過濾器

在主activity元素當中,大家會看到一個intent-filter元素:

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

這裡的Intent Filter用於描述主activity能夠響應哪些“意圖”。在Android系統中,所謂意圖是指在Activity啟動時向其傳遞的資料物件。當大家在自己的應用程式中啟用一個又一個Activity時,就需要使用到意圖機制了——不過意圖也可以在不同應用之間進行傳遞。

針對主activity的意圖過濾器代表前者應該在應用程式執行時被一併啟用。意圖是通過action元素實現這一效果的,也就是上述程式碼中的“MAIN”操作。另外,category元素旨在通過分類名稱描述意圖過濾器,在我們的示例中就是“LAUNCHER”。這兩種元素相結合意味著我們的應用程式應該利用Activity作為其主入口點,而且該入口點將在應用程式執行時一併啟動。

意圖過濾器當中可以包含多種子元素,其中包括資料規範。如果大家希望瞭解更多資訊,可以點選此處檢視Android開發者指南中的“意圖與意圖管理器”章節。在activity元素中,除了intent-filter之外還可以包含其它子元素——例如metadata,其作用是定義一個資料條目的名值對。

6. 使用者許可權

我們已經瞭解了建立專案時Eclipse當中所包含的所有清單元素,現在再來看看今後開發複雜應用時需要涉及的其它元素。某些應用程式需要判斷使用者是否有權執行特定操作或者檢視特定內容,這種與許可權相關的功能要靠uses-permission元素來實現。當使用者在Play軟體商店中檢視我們的應用時,該平臺會在應用下載前顯示使用全部功能所必需的許可權。如果使用者選擇繼續,則需要接受許可權控制提示,而後應用才能正常執行。 在清單當中必須強制要求的許可權包括使用內部資料、寫入外部儲存以及訪問攝像頭等裝置功能。我們通過以下示例程式碼演示這一概念:

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

應用程式還可以強制要求其它幾種潛在許可權,請大家點選此處檢視API引用說明中的“Manifest.permission”部分。

7. 使用者裝置

有這樣一類清單元素可以被用於描述應用程式執行所必需的硬體及軟體功能,其中包括uses-configuration元素。在該元素中,大家可以為導航、鍵盤以及觸控式螢幕選項指定相關要求。在uses-feature元素中,大家可以通過功能名稱與布林標記列舉關於硬體或者軟體的單一功能要求。這些功能包括藍芽與攝像頭選項,例如快閃記憶體、位置檢測以及感測器。而supports-screens元素則允許大家為應用程式定義所支援的螢幕尺寸,所指定的元素可同時涉及尺寸與畫素密度。

8. 其它元素

我們前面所探討的元素主要圍繞著自己的初始應用展開,但其它不同型別的應用中也有一些元素值得關注。我們為標準應用所建立的初始專案在啟動後只涉及使用者選單併為使用者提供一個或者多個Activity螢幕。然而其它型別的應用還可能包括功能部件以及持續執行的後臺程式——旨在處理資料訪問或者接收系統通知。

應用程式通常會利用Android系統中的Service類來處理後臺程式,這就要求我們在清單當中新增service元素——與Activity類似,service元素與Service類之間一一對應。Android應用中的內容提供器負責管理對資料來源的訪問,具體內容被列入provider元素當中。最後,清單中的receiver元素旨在幫助應用接收來自其它應用或者作業系統本身的意圖。

結論

到這裡,我們已經闡述了Android應用的清單檔案中,最為基礎的各項功能。當大家建立應用程式時,Eclipse都會同時向清單檔案中新增初始專案必需的主要元素。隨著在應用中引入更多功能,我們需要不斷向清單內增加新內容以確保應用程式整體能夠順利起效。如果大家在開發過程中的實機或者虛擬裝置測試出現了問題,很可能是因為清單中缺少某些必要元素。在下一篇系列教程中,我們將一同瞭解Android應用如何儲存及訪問資料。

相關文章