2008年10月31日 星期五

深入淺出Android程式設計(11)-如何進行Android的開發與除錯

在之前發佈了一列系的深入淺出Android程式設計中,從Android的架構、如何安裝相關軟體、安裝時的操作步驟。相信讀書已經可以進行基本的程式設計了。

後續將開始介紹如何在Eclipse上或是利用Android SDK來設計、除錯程式。預計大概章節如下所述:
A. 如何在Eclipse上開發Android應用程式
B. 如何在其他IDE或工具開發Android應用程式
C. 如何數位簽署應用程式
D. 如何使用ApiDemos範例應用程式
E. 如何除錯
F. 如何除錯及測試模擬裝置設定
G. 有關在除錯時的提示
H. 如何建置與安裝Android應用程式
I. 如何移除Android應用程式
J. 在Eclipse開發上的提示

接下來,將從基本的一個Hello Android程式專案,來了解一個Android程式如何在Eclipse平台開發的開始到結束。會自動建立那些檔案及檔案的程式結構如何等章節。

A. 如何建立專案
B. 如何建立介面
C. 執行程式碼

D. 如何將介面升級到以XML方式來排版
E. 如何進行專案除錯
F. 如何以Eclipse建立專案

最後,再介紹一個設計Android介面的小工具DroidDraw(參考網址如下:
http://www.droiddraw.org/ ),方便設計出好用的Android介面。也會提到如何將Eclipse開發平台中文化...等小技巧。

深入淺出Android程式設計(10)-安裝ADT疑難雜症及如何更新ADT

在這個章節中,將介紹有關安裝ADT疑難雜症及如何更新ADT,可以讓ADT(Android Development Tools)外掛程式可以即時更新版本。

如果依上一個章節安裝ADT出現了問題,有二點建議可以來參考是否為環境及防火牆設定上出了問題。
A. 在新增外掛的網址輸入視窗,如圖29所示,在Location欄位輸入「https://dl-ssl.google.com/android/eclipse/」,再按下「OK」按鈕。如果出現了錯誤,在原安裝畫面沒有連結到安裝網址,可以將「hppts://」修正成「hppt://」,再試試看。


圖29

B. 如果您安裝的電腦是在防火牆後面(例如:公司的防火牆),那就請確保您已正確的設定代理伺服器在Eclipse上。設定的方式,請選取選單「Window」中的「Preferences」選項,再選取「General」面版,選取「Network Connections」,如圖30所示。設定代理伺服器,方便安裝檔案的下載。


圖30

如果依在上述排除安裝ADT疑難雜症,還是不能安裝ADT的話,那只能先下載ADT的壓縮檔案,再用本機安裝的方式來安裝ADT。步驟如下所述:
A. 先連接到網址:http://code.google.com/android/adt_download.html,儲存下載檔案「ADT-0.8.0.zip」到您指定的目錄。如圖31所示。


圖31

B. 在進入Eclipse平台,選取選單「Help」中的「Software Updates....」選項,進入Software Updates的視窗,切換頁標籤至「Available Software」,再點選「Add Site...」按鈕,如圖32所示。再點選「Archive…」按鈕,選取上一個步驟下載的檔案位置,按下「OK」,進行安裝即可。


圖32

如果ADT外掛元件有新的版本時,可以在Eclipse平台,選取選單「Help」中的「Software Updates....」選項。

進入Software Updates的視窗,在「Installed Software」頁標籤,就會顯示出所有安裝的軟體,如圖33所示。

再選取「Android Editors」,按下「Update…」按鈕來進行軟體更新的動作。


圖33

深入淺出Android程式設計(9)-如何安裝Eclipse外掛(ADT)

在這個章節中,將進一步的來介紹如何安裝Eclipse外掛(ADT),全名是:「Android Development Tools」,讓我們有良好的介面來在開發Android的程式。

首先,先啟動Eclipse,如同上一個章節所述,接下來在選取選單「Help」中的「Software Updates....」選項,如圖21所示。


圖21

在點選「Software Updates....」選項後,就會出現Software Updates的視窗,如圖22所示,切換頁標籤至「Available Software」,再點選「Add Site...」按鈕。就會出現要新增外掛的網址輸入視窗。


圖22

在新增外掛的網址輸入視窗,如圖23所示,在Location欄位輸入「https://dl-ssl.google.com/android/eclipse/」,再按下「OK」按鈕。就會回到原來的Software Updates視窗。


圖23

在Software Updates視窗,就會多出剛才輸入的網址而產生出來的選項,點選開來,再勾選「Android Developer Tools」及「Android Editors」等二個選項,再按下「Install」按鈕,進行安裝動作,如圖24所示。


圖24

選取「Android Developer Tools」及「Android Editors」選項後就會如圖25所示。按下「Finish」按鈕,進行安裝作業,如圖26所示。


圖25



圖26

完成所有安裝後,就會出現是否要重新啟動Eclipse的視窗,如圖27所示。按下「Yes」按鈕,就會重新啟動Eclipse,完成安裝。下一步再設定Android SDK路徑即可。



圖27

重新進入Eclipse,設定Android SDK路徑。選取選單「Window」中的「Preferences」選項,再選取「Android」面版,如圖28所示。在SDK Location欄位,點選「Browse…」按鈕,來選取您之前安裝的Android SDK路徑,依上一個章節的步驟,設定值為「C:\android」。
再按下「Apply」套用您的設定,再點選「OK」按鈕,完成所有的設定。


圖28

完成上述的設定,我們就可以來開發Android的程式了。

深入淺出Android程式設計(8)-如何下載與安裝Eclipse

在這個章節中,將要介紹如何安裝Eclipse,讓我們有良好的介面來在開發Android的程式。

首先,進入下載網址:http://www.eclipse.org/downloads/,如圖16所示,點選「Eclipse Class 3.4.1」版本的連結下載的網址。(如果有更新的版本,請下載最新版本。)


圖16

進入顯示全球可以下載地方,如圖17所示。選取Asia地區中的Taiwan連結網址「National Sun Yat-sen University (http)」,進行下載動作。儲存下載檔案到您指定的目錄。


圖17

用解壓縮軟體來解壓縮下載檔案,如圖18所示。解壓縮到您指定的路徑下。例如:解壓縮到C:\Eclipse目錄。再點選eclipse.exe執行檔就可以執行Eclipse開發工具。


圖18

執行Eclipse開發工具,會出現建立工作空間(workspace)的選項,如圖19所示。使用預設值即可,您也可以設計不同的工作空間目錄。以後,在開發任何程式時,會將所有程式依專案名稱儲存在您設定的工作空間中。
您也可以勾選「Use this as the default and do net ask again」選項,那下一次再進入Eclipse就不用再設定工作空間,而是用預設的工作空間即可。
設定好工作空間後,按下「OK」,進入Eclipse開發平台的Welcome畫面,如圖20所示。


圖19

進入Eclipse開發平台的Welcome畫面,可以先瀏覽有關Eclipse的Overview(概述)、What’s New(最新消息)、Samples(程式範例)、Tutorials(訓練文件)等類似Help的說明。


圖20

上述為如何安裝Eclipse的步驟,下一個章節介紹如何安裝外掛Android的開發元件ADT到Eclipse中。

深入淺出Android程式設計(7)-如何安裝Android SDK

要開發安裝Android SDK(軟體開發套件),首先,要了解它需要的作業系統及要先安裝的軟體需求,而Android SDK(軟體開發套件)是以Java語言為開發語言,所以,也要先下載安裝JDK。

所需的作業系統與軟體需求如下所述:

支援的作業系統
Windows XP或Windows Vista
Mac OS X 10.4.8版本或之後的版本
Linux

支援的開發環境
*Eclipse IDE
*Eclipse3.3版本(Europa)或3.4版本(Ganymede)。
*JDK5或JDK6版本。
*Android Development Tools外掛(選擇項目,不一定要安裝)。
*其它開發環境或IDE
*JDK5或JDK6版本。
*Apache Ant 1.6.5版本或之後的版本。

首先,先下載與安裝JDK。
進入下載網址:http://java.sun.com/javase/downloads/index.jsp,如圖6所示,點選JKD 6 Update 7版本的Download按鈕。(如果有更新的版本,請下載最新版本


圖6

點選進入下載畫面後,請選取Platform為Windows平台,Language為Multi-language版本即可,勾選同意書選項,再按下「Continue」按鈕。進行下載動作,如圖7所示。儲存下載檔案到您指定的目錄。


圖7

執行下載檔案執行檔,如圖8所示。依預設值,下一步完成所有安裝動作。下一步設定環境變數。


圖8

在檔案總管中,選取「我的電腦」,點選滑鼠右鍵,出現選單。再選取「內容」選項,就會出現系統內容,選取「進階」頁標籤,再選取「環境變數」按鈕來設定環境變數。如圖9所示。


圖9

進入環境變數,如圖10所示。選取「編輯」按鈕編輯環境變數,在編輯環境變數的變數值的最後,加入「;C:\Program Files\Java\jdk1.6.0_07\bin」變數值。如圖11所示。


圖10



圖11

接下來,就是下載與安裝Android SDK
進入下載網址:http://code.google.com/android/download.html,如圖12所示,勾選同意書選項,再按下「Continue」按鈕。進行下載動作,如圖13所示。儲存下載檔案到您指定的目錄。(如果有更新的版本,請下載最新版本。)


圖12


圖13

用解壓縮軟體來解壓縮下載檔案,如圖14所示。解壓縮到您指定的路徑下。例如:解壓縮到C:\Android目錄,下一步設定所需的環境變數。


圖14

依之前的步驟進入編輯環境變數,如圖10所示。選取「編輯」按鈕編輯環境變數,在編輯環境變數的變數值的最後,加入「;C:\Android\tools」變數值。如圖15所示。(依您解壓縮的目錄加上\tools即可。)


圖15

上述為安裝JDK及Android SDK的步驟,撰寫Android程式,可以用Eclipse所提供的IDE環境,方便進行程式畫面的設計及除錯。但是,Android SDK也有提供比較手動的方式來開發程式。
在後續的章節中,我們會提到一些如何用Android SDK手動的方式來開發程式,但是會將重心放在Eclipse所提供的IDE環境。所以,下一個章節介紹如何安裝Eclipse及如何外掛Android的開發元件。

深入淺出Android程式設計(6)-什麼是Dalvik Virtual Machine?

在這個章節中,要來單獨討論什麼是Dalvik Virtual Machine,它是包含在Android Runtime中的元件,如圖5所示。




圖5

Dalvik Virtual Machine(Dalvik虛擬機器)是一種暫存器型態的虛擬機器。簡稱DVM,DVM在撰寫開發時就已經設想用最少的記憶體資源來執行,以及同時可執行多個VM為前提來開發的。

不過,上述的特性需要Linux作業系統的協助才能實現,例如程序問執行的控制、多執行緒的支援、記憶體管理等。事實上不僅Dalvik虛擬機器如此,Java虛擬機器也一樣有作業系統相依性,不同的作業系統需要不同的Java虛擬機器,而虛擬機器會針對其支援的作業系統再進行各項調整,以便能最佳化執行。

Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是執行一種特有的檔案格式,稱為.dex。

Java的類別檔要先透過一套叫dx的編譯工具轉換成.dex檔後,才能讓Dalvik虛擬機器執行。而Delvik虛擬機器則改用Register Based的方式,變數皆存放於暫存器中,相較之下Delvik虛擬機器的指令就會少一點,速度也就會再加快一點。

有興趣的讀者,可以參考今年在台灣Google Developer Day 2008中,有關程本中先生所講述的Android:Dalvik VM Internals。網址:
http://sites.google.com/site/developerdaytaiwan/google-developer-day-2008-taiwan/android-dalvik-vm-internals

有關Android架構的部份就介紹到這個章節為止,下一個章節將要介紹有關如何下載安裝Android SDK、Eclipse、ADT套件等開發工具。

深入淺出Android程式設計(5)-Android架構說明(下)

在這個章節中,最後要討論就是負責跟硬體溝通的底層核心同時也是最重要的Android Runtime(Android執行環境)及Linux Kernel(Linux核心)部份。
Android Runtime(Android執行環境)及Linux Kernel(Linux核心),如圖4所示。下述為各層級的描述。




圖4
Android Runtime
在Android SDK(軟體開發套件)的Android Runtime分成二個重要的元件來執行系統,雖然Android是用Java來開發、撰寫應用程式,但卻不使用Java Runtime來執行Java程式,而是自行研發Android Runtime來執行程式。
這二個重要元件分別是Core Libraries(核心函式庫),另一個是Dalvik Virtual Machine(Dalvik 虛擬機器)。

A. Core Libraries(核心函式庫)
Core Libraries(核心函式庫)裡頭已經包含了絕大多數Java所需要呼用的函式,接著每一個Android應用程式都會以自屬的process(程序)。而且Android不是用一個Dalvik虛擬機器來同時執行多個Android應用程式,而是每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行。

B.Dalvik Virtual Machine(Dalvik 虛擬機器)
Dalvik Virtual Machine(Dalvik虛擬機器)是一種暫存器型態的虛擬機器。在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。這樣的設計,讓系統在執行程式可以最佳化的方式來執行,節省更多的資源。有關Dalvik Virtual Machine(Dalvik虛擬機器),會在下一個章節,做更詳細的說明。

Linux Kernel(Linux核心)
在Android SDK(軟體開發套件)的作業系統是用Linux,其版本為2.6版。而所提供的核心系統服務,如下所述:
A.安全性(Security)
B.記憶體管理(Memory Management)
C.行程管理(Process Management)
D.網路堆疊(Network Stack)
E.驅動程式模型(Driver Model)包含下述這些常規的驅動程式:
(1) Display Driver
(2) Keypad Driver
(3) Camera Driver
(4) WiFi Driver
(5) Flash Memory Driver
(6) Audio Driver
(7) Binder(IPC) Driver
(8) Power Management

此系統核心同樣是作為硬體與軟體架構之間的抽象層(Abstraction Layer)。來做為相互溝通的工作。

深入淺出Android程式設計(4)-Android架構說明(中)

在這個章節中,承接上一個章節,再來討論Libraries (函式庫)的部份。

在這個章節中,承接上一個章節,再來討論Libraries (函式庫)的部份。而Libraries (函式庫)的圖形,如圖3所示。下述為各層級的描述。



圖3

Libraries (函式庫)
在Android SDK(軟體開發套件)包含一組系統元件,可以讓開發者呼叫來使用,而這一組系統元件使用的是C/C++的函式庫,開發者可以透過應用程式架構使用這些功能。
而這些核心函式庫列表如下:

A. Surface Manager(外觀管理員):主要的功能是讓開發者可以去存取顯示系統及管理的功能,在「顯示」與「存取操作」間的對應、互動以及實現無接縫的2D/3D多應用程式之間的整合。例如:在2D、2D顯示上的合成、疊合動作。

B. Open GL ES:主要是依OpenGL ES 1.0規範所定義的3D繪圖引擎。可以將硬體的3D功能做最佳化的處理顯示。

C. SGL:主要是處理有關顯示2D方面的繪圖引擎。

D.Media Framework:主要是以PacketVideo公司的OpenCORE為基礎所發展成多媒體函式庫,有支援多種聲音及影像格式。例如:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式。

E. Free Type:主要是處理有關顯示點陣圖及向量字形方面的處理。

F.SSL:是Secure Socket Layer的縮寫,主要是處理有關保護網頁通訊的協定。

G. SQLite:SQLite也是一套開放性原始碼的關連式資料庫,其特點在於輕量性方面的設計結構,更適合在手機上使用。

H.Web Kit:是一個的網頁瀏覽器引擎,讓Android發展出專屬的瀏覽器,也可以讓開發者利用這個引擎來做不同的應用。

I. libc:就是BSD標準系統C函式庫。但是,針對Linux嵌入式裝置進行過最佳化的調整。

深入淺出Android程式設計(3)-Android架構說明(上)

在Android架構,總共是由5個部份來組成。分別是:
(1)Applications(應用程式)
(2)Application Framework(應用程式架構)
(3)Libraries(函式庫)
(4)Android Runtime(Android執行環境)
(5)Linux Kernel(Linux核心)

在這個章節中,首先,依由上而下的順序來討論Applications(應用程式)及Application Framework(應用程式架構),後續再討論Libraries(函式庫)、Android Runtime(Android執行環境)及Linux Kernel(Linux核心)。

Applications(應用程式)及Application Framework(應用程式架構)的圖形,如圖2所示。下述為各層級的描述。



圖2


Application(應用程式)
在Android SDK(軟體開發套件)所用的手機模擬器及未來實體的手機中,都會有一系列以Java語言撰寫的核心應用程式,包含電子郵件程式、簡訊程式、日曆、地圖、瀏覽器、聯絡人與其它應用程式。讓使用者一開始就可以使用這些基本的功能來操作應用手機。

Application Framework (應用程式架構)
在Android SDK(軟體開發套件),也定義了能讓開發者可以完整使用與核心應用程式相同的應用程式標準介面(API),應用程式架構是為了要簡化元件的重新利用而設計的,應用程式可以發佈功能並為其它應用程式所使用,但是,要受限於應用程式架構的安全限制,使用者也用同樣的機制用來新增、置換元件。

目前所有的應用程式是由Services(服務)及Systems(系統)來組成,包含有:
A.Views System(建構程式原件):用來建構一個應用程式的基本原件,包含了在開發系統畫面時,常用的lists、grids、text boxes、buttons控制項,甚至是嵌入式的瀏覽器。有興趣想要看程式控制項的讀者可以參考下述網址:http://code.google.com/android/reference/view-gallery.html


B.Content Providers(內容提供者):可以用來讓應用程式可以存取或分享資料給其它應用程式。
C.Resource Manager(資源管理員):提供各種非程式碼的資源讓應用程式去使用,例如:本地化字串、圖形或排版相關檔案。


D.Notification Manager(訊息管理員):提供應用程式在狀態列(Status Bar)的地方顯示應用程式自定的警示訊息(Alert)。


E.Activity Manager(活動管理員):管理所有應用程式的生命週期及一般性的回溯導航處理(navigation backstack)。例如:開啟應用程式要用到的資源準備及關閉應用程式時,釋放出記憶體及相關資源等工作。


F. Window Manager(視窗管理員):用來管理所有開啟的視窗程式。


G. Location Manager:用來管理地圖服務的相關功能。


H. Telephony Manager:用來管理有關使用者撥打與接收電話的相關功能。


I. Package Manager:管理所有安裝在Android系統內的程式。

2008年10月9日 星期四

深入淺出Android程式設計(2)-什麼是Android?

首先,讓我們先來了解什麼是Android,Android是一個包含作業系統、中介架構層及應用程式所產生出來的軟體堆疊(Software Stack)架構。如圖1所示。

由下而上,其核心為嵌入式Linux 2.6作業系統,向上搭配Google為Android開發的Libraries(函式庫)及Android Runtime,再配合Application Framework(應用程式架構)。來開發各種不同的Application(應用程式)。


圖1

Android所發表的Android SDK(軟體開發套件),提供必要的API(應用程式開發介面)與開發工具以使用Java語言為主體來開發在Android平台上開發應用軟體。

目前所提供的功能如下:

A. 應用程式架構:在應用程式架構內已經具備多種不同的基礎軟體元件(如圖1所示),在開發應用程式時,就可以直接呼叫這些元件來使用,可以節省在開發應用程式的心力及時間。


B. Dalvik虛擬機器:在Android平台上所使用虛擬機器,不是標準的Java虛擬機器(Java Virtual Machine),雖然它是用Java語言來開發,而是使用Google為了要再節省手機上的資源而開發出獨有的Dalvik虛擬機器(Dalvik Virtual Machine)。


C. 整合瀏覽器:整合瀏覽器是Android內建的瀏覽器,是用WebKit的瀏覽引擎為基礎所開發成的。配合Android手機的功能,可以在瀏覽網頁時,達到更好的效果,例如:局部性的縮放網頁上的資訊、觸控式的操作等效果。


D. 最佳化的繪圖能力:在程式可以用到的繪圖功能分為2D與3D兩個方面,在2D方面,Android提供了一套特有的函式庫(SGL),而在3D方面則是使用OpenGL ES 1.0(OpenGL for Embedded Systems)規範的函式庫。


E. SQLite資料庫:SQLite也是一套開放性原始碼的關連式資料庫,其特點在於輕量性方面的設計結構,更適合在手機上使用。


F. 多媒體的支援能力:在Android平台上支援多種不同的多媒體格式,例如:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等格式。


G. GSM通話能力:GSM手機的通話能力是屬於手機硬體方面的展現,也是在開發Android應用程式可以強調的特點。


H. Bluetooth、EDGE、3G及Wi-Fi:這些通訊能力也是屬於手機硬體方面的展現,也是在開發Android應用程式可以強調的特點。


I. Camera、GPS、電子羅盤(compass)、加速度感測裝備(accelerometer):這些同樣也是屬於手機硬體方面的展現,也是在開發Android應用程式可以強調的特點。


J. 豐富的開發環境:在Android SDK(軟體開發套件)提供相當完善的程式開發環境,其開發環境包括裝置模擬器(Emulator)、除錯工具、程式執行所耗用記憶體、效能等方面的評估功能,另外也有提供可用於Eclipse IDE的外掛程式(Plug-in)介面(ADT套件,後續會有詳細安裝說明)。

上述為Android目前所提供的功能,目前Android SDK的版本已經到1.0的版本,在後續幾個章節會介紹Android的架構說明以及如何下載安裝Android SDK、Eclipse、ADT套件等開發工具。

深入淺出Android程式設計(1)-前言

在去年11月,Google這一家讓人模不透的創新公司,又在市場上引爆了一顆震撼彈,聯合HTC、Motorola、T-Mobile、LG、Marvell、Intel與TI等33家在手機產業具影響力的業者一同組成開放手機聯盟,以發展開放平台的Android為目標。想要從目前成功的搜尋引擎龍頭再進一步進入手機這個比電腦平台更大的市場。

在發表Android SDK(軟體開發套件)的同時,又為此舉辦了一場獎金高達一千萬美金的比賽,來尋找最有趣、最具創新的Android應用程式。詳細的比賽可以參考下述網址:http://code.google.com/android/adc.html

在最近看到iT邦幫忙在進行為期30天的分享知識鐵人賽(請參考網址:http://ithelp.ithome.com.tw/event/ironmanvote)。在希望能增加自己知識的同時,也能幫別人了解這個有趣平台的刺激下。報名參考這個比賽。在未來的30天中,將以Google目前所提供有關Android SDK文件(請參考網址:http://code.google.com/android/documentation.html )為基礎上,加上實際操作的詳細步驟。圖文並茂來說明Android這個平台有提供了那些有趣的功能及機制。

最近,成立了部落格。也會將鐵人賽的文章分享到部落格這邊。也會增加有關Eclipse這個開發平台的介紹。