天天看點

Android基本概念之_Android 架構

一:前言

  Android 是一種基于 Linux V2.6 核心的綜合操作環境。最初,Android 的部署目标是行動電話領域,包括智能電話和更廉價的翻蓋手機。但是, Android 全面的計算服務和豐富的功能支援完全有能力擴充到行動電話市場以外。Android 也可以用于其他的平台和應用程式。

  黑莓和 iPhone 都提供了受歡迎的、高容量的移動平台,但是卻分别針對兩個不同的消費群體。黑莓是企業業務使用者的不二選擇。但是,作為一種消費裝置,它在易用性和 “新奇特性” 方面難以和 iPhone 抗衡。Android 則是一個年輕的、有待開發的平台,它有潛力同時涵蓋行動電話的兩個不同消費群體,甚至可能縮小工作和娛樂之間的差别。

  如今,很多基于網絡或有網絡支援的裝置都運作某種 Linux 核心。這是一種可靠的平台:可經濟有效地進行部署和提供支援,并且可直接作為面向部署的良好的設計方法。這些裝置的 UI 通常是基于 HTML 的,可通過 PC 或 Mac 浏覽器檢視。但并不是每個裝置都需要通過一個正常的計算裝置來控制。想象一下傳統的家用電器,例如電爐、微波爐或面包機。如果您的家用電器由 Android 控制,并且有一個彩色觸摸屏,會怎麼樣?如果電爐上有一個 Android UI,那麼操控者甚至可以烹饪點什麼東西。

  二:Android 平台

  Android 是一個分層的環境,建構在 Linux 核心的基礎上,它包括豐富的功能。UI 子系統包括:

  1、視窗視圖

  用于顯示一些常見元件(例如編輯框、清單和下拉清單)的小部件。

  Android 包括一個建構在 WebKit 基礎上的可嵌入浏覽器,iPhone 的 Mobile Safari 浏覽器同樣也是以 WebKit 為基礎。

  Android 提供多種連接配接選項,包括 WiFi、藍牙和通過蜂窩(cellular)連接配接的無線資料傳輸(例如 GPRS、EDGE 和 3G)。Android 應用程式中一項流行的技術是連結到 Google 地圖,以便在應用程式中顯示位址。Android 軟體棧還提供對基于位置的服務(例如 GPS)和加速計的支援,不過并不是所有的 Android 裝置都配備了必需的硬體。另外還有攝像支援。

  過去,移動應用程式努力向桌面應用程式看齊的兩個領域分别是圖形/媒體和資料存儲方法。Android 通過提供對 2D 和 3D 圖形的内置支援,包括 OpenGL 庫,解決了圖形方面的挑戰。由于 Android 平台包括流行的開源 SQLite 資料庫,是以緩解了資料存儲的負擔。圖 1 顯示一個簡化的Android 軟體層次結構。

Android基本概念之_Android 架構

圖 1. Android 軟體層次結構

  2、應用程式架構

  如前所述,Android 運作在 Linux 核心上。Android 應用程式是用 Java 程式設計語言編寫的,它們在一個虛拟機(VM)中運作。需要注意的是,這個 VM 并非您想象中的 JVM,而是 Dalvik Virtual Machine,這是一種開源技術。每個 Android 應用程式都在 Dalvik VM 的一個執行個體中運作,這個執行個體駐留在一個由 Linux 核心管理的程序中,如下圖所示。

Android基本概念之_Android 架構

圖 2. Dalvik VM

  3、Android 應用程式由一個或多個元件組成:

  3.1 活動

  具有可視 UI 的應用程式是用活動實作的。當使用者從主螢幕或應用程式啟動器選擇一個應用程式時,就會開始一個動作。

  3.2 服務

  服務應該用于任何需要持續較長時間的應用程式,例如網絡螢幕或更新檢查應用程式。

  3.3 内容提供程式

  可以将内容提供程式看作資料庫伺服器。内容提供程式的任務是管理對持久資料的通路,例如 SQLite 資料庫。如果應用程式非常簡單,那麼可能不需要建立内容提供程式。如果要建構一個較大的應用程式,或者建構需要為多個活動或應用程式提供資料的應用程式,那麼可以使用内容提供程式實作資料通路。

  3.4 廣播接收器

  Android 應用程式可用于處理一個資料元素,或者對一個事件(例如接收文本消息)做出響應。

  Android 應用程式是連同一個 AndroidManifest.xml 檔案一起部署到裝置的。AndroidManifest.xml 包含必要的配置資訊,以便将它适當地安裝到裝置。它包括必需的類名和應用程式能夠處理的事件類型,以及運作應用程式所需的許可。例如,如果應用程式需要通路網絡 例如為了下載下傳一個檔案 — 那麼 manifest 檔案中必須顯式地列出該許可。很多應用程式可能啟用了這個特定的許可。這種聲明式安性有助于減少惡意應用程式損害裝置的可能性。

  三:建構 Android 應用程式所需的開發環境

  1、所需的工具

  開始開發 Android 應用程式的最簡捷的方式是下載下傳 Android SDK 和 Eclipse IDE(參見 參考資料)。Android 開發可以在 Microsoft® Windows®、Mac OS X 或 Linux 上進行。

  本文假設您使用的是 Eclipse IDE 和用于 Eclipse 的 Android Developer Tools 插件。Android 應用程式是用 Java 語言編寫的,但是是在 Dalvik VM(非 Java 虛拟機)中編譯和執行的。在 Eclipse 中用 Java 語言程式設計非常簡單;Eclipse 提供一個豐富的 Java 環境,包括上下文敏感幫助和代碼提示。Java 代碼通過編譯後,Android Developer Tools 可確定适當地将它打包,包括 AndroidManifest.xml 檔案。

  雖然沒有 Eclipse 和 Android Developer Tools 插件也可以開發 Android 應用程式,但是那樣就需要熟悉 Android SDK

  Android SDK 是作為一個 ZIP 檔案釋出的,可以将該檔案解壓到硬碟上的一個目錄中。由于有多個 SDK 更新,建議有意識地組織開發環境,以便在不同的 SDK 安裝之間輕松地切換。SDK 包括:

  1.1 android.jar

  Java 歸檔檔案,其中包含建構應用程式所需的所有的 Android SDK 類。

  1.2 documention.html 和 docs 目錄

  本地和網上提供的 SDK 文檔。這些文檔的主要形式為 JavaDocs,以便于在 SDK 中導航大量的包。文檔還包括一個進階開發指南和 Android 社群的連結。

  1.3 Samples 目錄

  samples 子目錄包含各種應用程式的源代碼,包括 ApiDemo,該應用程式示範了很多 API。這個示例應用程式可以作為 Android 應用程式開發的良好起點。

  1.4 Tools 目錄

  包含所有用于建構 Android 應用程式的指令行工具。最常用、最有用的工具是 adb 實用程式(Android Debug Bridge)。

  1.5 usb_driver

  該目錄包含将開發環境連接配接到支援 Android 的裝置(例如 G1 或 Android Dev 1 解鎖開發手機)所需的驅動程式。隻有 Windows 平台的開發人員才需要這些檔案。

  Android 應用程式可以在實際的裝置上運作,也可以在 Android SDK 附帶的 Android Emulator 上運作。圖 3 顯示 Android Emulator 的主螢幕。

Android基本概念之_Android 架構

圖 3. Android Emulator

  

Android Debug Bridge

adb 實用程式支援一些可選指令行參數,以提供強大的特性,例如複制檔案到裝置或從裝置複制檔案。可以使用 shell 指令行參數連接配接到手機本身,并發送基本的 shell 指令。圖 4 顯示在通過 USB 線連接配接到 Windows 筆記本電腦的一個實際裝置上運作的 adb shell 指令。

圖 4. 使用 adb shell 指令

Android基本概念之_Android 架構

在這個 shell 環境中,可以:

顯示網絡配置,網絡配置可顯示多個網絡連接配接。注意這多個網絡連接配接:

lo 是本地或 loopback 連接配接。

tiwlan0 是 WiFi 連接配接,該連接配接由本地 DHCP 伺服器提供一個位址。

顯示 PATH 環境變量的内容。

執行 su 指令,以成為超級使用者。

将目錄改為 /data/app,其中存放使用者應用程式。

列出包含某個應用程式的目錄。Android 應用程式檔案實際上是歸檔檔案,可通過 WinZip 之類的軟體檢視。擴充名為 apk。

發出 ping 指令,檢視 Google.com 是否可用。

從相同的指令提示符環境中,還可以與 SQLite 資料庫互動,啟動程式以及執行許多其他系統級任務。想像一下您正在連接配接到電話,是以這是非常了不起的功能。

在下一節,您将建立一個簡單的 Android 應用程式。

編寫一個基本的應用程式

本節展示如何建構一個 Android 應用程式。示例應用程式非常簡單:一個修改後的 “Hello Android” 應用程式。您将進行一個微小的修改,使螢幕背景全部變為白色,以便把手機用作手電筒。這個例子不是很有創意,但是可以作為一個有用的例子。請 下載下傳 完整的源代碼。

為了在 Eclipse 中建立應用程式,選擇 File > New > Android project,這将啟動 New Android Project 向導。

圖 5. New Android project 向導

Android基本概念之_Android 架構

接下來,建立一個簡單的應用程式,該應用程式有一個活動,并且在 main.xml 中有一個 UI 布局。布局包含一個文本元素,您将修改這個文本元素,以顯示 Android FlashLight。下面的清單顯示了這個簡單的布局。

清單 1. Flashlight 布局

<?xml version=”1.0″ encoding=”utf-8″?><LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android“    android:orientation=”vertical”    android:layout_width=”fill_parent”    android:layout_height=”fill_parent”    android:background=”@color/all_white”><TextView      android:layout_width=”fill_parent”     android:layout_height=”wrap_content”     android:text=”@string/hello” android:textColor=”@color/all_black”    android:gravity=”center_horizontal”/></LinearLayout>

在 strings.xml 中建立兩個顔色資源。

清單 2. strings.xml 中的顔色

<?xml version=”1.0″ encoding=”utf-8″?><resources>    <string name=”hello”>Android FlashLight</string>    <string name=”app_name”>FlashLight</string>    <color name=”all_white”>#FFFFFF</color>    <color name=”all_black”>#000000</color></resources>

主螢幕布局有一個定義為 all_white 的背景色。在 strings.xml 檔案中,可以看到 all_white 被定義為一個值為 #FFFFFF 的 RGB 三元組,即純白。

布局包含一個 TextView,這實際上是一塊靜态文本。它是不可編輯的。文本被設為黑色,并通過 gravity 屬性設為水準居中。

該應用程式有一個名為 FlashLight.java 的 Java 源檔案,如以下清單所示。

清單 3. Flashlight.java

package com.msi.flashlight;import android.app.Activity;import android.os.Bundle;public class FlashLight extends Activity {        public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }}

該代碼是直接來自 New Project 向導的模闆代碼:

它是 Java 包 com.msi.flashlight 的一部分。

它有兩個 import:

一個用于 activity 類

一個用于 bundle 類

當該活動發起後,onCreate 方法被調用,傳入一個 savedInstanceState。對于我們來說,不必關心這個 bundle。隻有在暫停然後恢複活動時才會用到。

onCreate 方法覆寫了同名的 activity 類方法。它調用超類的 onCreate 方法。

對 setContentView() 的調用将關聯 main.xml 檔案中定義的 UI 布局。main.xml 和 strings.xml 中的任何内容都自動映射到 R.java 源檔案中定義的常量。任何時候都不要直接編輯這個檔案,因為它随着每次建構而改變。

運作該應用程式可以看到一個白色螢幕,其中有黑色文本。

圖 6. flashlight 的白色螢幕

Android基本概念之_Android 架構

下面顯示用于 FlashLight 應用程式的 AndroidManifest.xml 檔案。

清單 4. 用于 FlashLight 的 AndroidManifest.xml

<?xml version=”1.0″ encoding=”utf-8″?><manifest xmlns:android=”http://schemas.android.com/apk/res/android“      package=”com.msi.flashlight”      android:versionCode=”1″      android:versionName=”1.0.0″>    <application android:icon=”@drawable/icon” android:label=”@string/app_name”>        <activity android:name=”.FlashLight”                  android:label=”@string/app_name”>            <intent-filter>                <action android:name=”android.intent.action.MAIN” />                <category android:name=”android.intent.category.LAUNCHER” />            </intent-filter>        </activity>    </application></manifest>

該檔案是由用于 Eclipse 的 Android Developer Tools 插件自動建立的。您不需要做任何事情。

當然,這個應用程式并不是很強大。但是如果希望讀點書,又不想打擾正在睡覺的夫妻,或者如果需要在斷電時去地下室檢視保險絲盒,那麼這個應用程式還是很友善的。

結束語

在本文中,您閱讀了對 Android 的簡介,并建構了一個小型的應用程式。希望本文中的例子能激起您進一步探索 Android 平台的興趣。Android 有望成為對市場産生深遠影響的開源平台,它的用處将遠遠超越行動電話。