Android 開發簡介

來源:互聯網
上載者:User

http://www.ibm.com/developerworks/cn/opensource/os-android-devel/

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

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

在本文中,瞭解 Android 平台,以及如何將它用於移動和非行動裝置 App程式。安裝 Android SDK,並構建一個簡單的應用程式。下載 本文中的應用程式範例的原始碼。

回頁首

Android 簡史

Android 平台是 Open Handset Alliance 的成果,Open Handset Alliance 組織由一群共同致力於構建更好的行動電話的公司組成。這個組織由 Google 領導,包括行動電信業者、手持功能製造商、零組件製造商、軟體解決方案和平台供應商以及市場營銷公司。從軟體開發的觀點看,Android 正處在開源領域的中心位置。

市場上第一款支援 Android 的手機是由 HTC 製造並由 T-Mobile 供應的 G1。這款裝置從設想到推出花了大約一年的時間,惟一可用的軟體開發工具是一些實行增量改進的 SDK 發行版。隨著 G1 發行日的臨近,Android 團隊發布了 SDK V1.0,用於這個新平台的應用程式也浮出水面。

為了鼓勵創新,Google 舉辦了兩屆 “Android Developer Challenges”,為優勝的參賽作品提供數百萬美金的獎勵。G1 問世幾個月之後,隨後就發布了 Android Market,它使使用者可以瀏覽應用程式,並且可以將應用程式直接下載到他們的手機上。經過大約 18 個月,一個新的移動平台進入公眾領域。

回頁首

Android 平台

Android 有豐富的功能,因此很容易與案頭作業系統混淆。Android 是一個分層的環境,構建在 Linux 核心的基礎上,它包括豐富的功能。UI 子系統包括:

  • 視窗
  • 視圖
  • 用於顯示一些常見組件(例如編輯框、列表和下拉式清單)的小組件

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

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

過去,行動裝置 App程式努力向傳統型應用程式看齊的兩個領域分別是圖形/媒體和資料存放區方法。Android 通過提供對 2D 和 3D 圖形的內建支援,包括 OpenGL 庫,解決了圖形方面的挑戰。由於 Android 平台包括流行的開源 SQLite 資料庫,因此緩解了資料存放區的負擔。圖 1 顯示一個簡化的 Android 軟體階層。

圖 1. Android 軟體階層

回頁首

應用程式架構

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

圖 2. Dalvik VM

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

活動
具有可視 UI 的應用程式是用活動實現的。當使用者從主畫面或應用程式啟動器選擇一個應用程式時,就會開始一個動作。
服務
服務應該用於任何需要持續較長時間的應用程式,例如網路監視器或更新檢查應用程式。
內容提供者
可以將內容提供者看作資料庫伺服器。內容提供者的任務是管理對持久資料的訪問,例如 SQLite 資料庫。如果應用程式非常簡單,那麼可能不需要建立內容提供者。如果要構建一個較大的應用程式,或者構建需要為多個活動或應用程式提供資料的應用程式,那麼可以使用內容提供者實現資料訪問。
廣播接收器
Android 應用程式可用於處理一個資料元素,或者對一個事件(例如接收簡訊)做出響應。

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

下一節討論構建 Android 應用程式所需的開發環境。

回頁首

所需的工具

開始開發 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 包括:

android.jar
Java 歸檔檔案,其中包含構建應用程式所需的所有的 Android SDK 類。
documention.html 和 docs 目錄
本地和網上提供的 SDK 文檔。這些文檔的主要形式為 JavaDocs,以便於在 SDK 中導航大量的包。文檔還包括一個進階開發指南和 Android 社區的連結。
Samples 目錄
samples 子目錄包含各種應用程式的原始碼,包括 ApiDemo,該應用程式示範了很多 API。這個應用程式範例可以作為 Android 應用程式開發的良好起點。
Tools 目錄
包含所有用於構建 Android 應用程式的命令列工具。最常用、最有用的工具是 adb 公用程式(Android Debug Bridge)。
usb_driver
該目錄包含將開發環境串連到支援 Android 的裝置(例如 G1 或 Android Dev 1 解鎖開發手機)所需的驅動程式。只有 Windows 平台的開發人員才需要這些檔案。

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

圖 3. Android Emulator

Android Debug Bridge

adb 公用程式支援一些可選命令列參數,以提供強大的特性,例如複製檔案到裝置或從裝置複製檔案。可以使用 shell 命令列參數串連到手機本身,並發送基本的 shell 命令。圖 4 顯示在通過 USB 線串連到 Windows 膝上型電腦的一個實際裝置上啟動並執行 adb shell 命令。

圖 4. 使用 adb shell 命令

在這個 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 嚮導

接下來,建立一個簡單的應用程式,該應用程式有一個活動,並且在 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 {    /** Called when the activity is first created. */    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 的白色螢幕

下面顯示用於 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 有望成為對市場產生深遠影響的開源平台,它的用處將遠遠超越行動電話。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.