2009年7月24日 星期五

深入淺出Android程式設計(23)-如何建立專案,以「Hello,Android!」專案說明

很抱歉,之前公司比較忙碌。所以,預計八月份會陸續更新文章。而且,會以Android 1.5的版本來更新文章。

在之前的章節中,從如何安裝Android SDK、如何安裝Eclipse等開發工作,到如何在Eclipse平台上建立Android專案並設定載入配置、如何執行程式、如何進行除錯程式的動作。
但是,都是分別來說明,沒有將這些步驟連接起來。所以,從這個章節開始,會以一個簡單的「Hello,Android!」專案,來將所有步驟連接起來講解,也會將程式結構內一些重要的屬性、方法來加以描述。

「Hello,Android!」專案,主要的功能,只有在模擬器上顯示「Hello,Android!」等字串的作用,也許會覺得很簡單,但是,卻可以讓讀者了解Android的基本程式架構,為後續更複雜的範例專案打下基礎。
主要的操作步驟及內容說明,如下所述:
A. 如何建立專案
B. 如何建立介面
C. 執行程式碼

後續再說明比較詳細的說明:
D. 如何將介面升級到XML方式來排版
E. 如何進行專案除錯
F. 如何用非Eclipse平台來建立專案


如何建立專案

要建立一個專案再簡單不過了,在Eclipse平台,使用ADT外掛讓Android開發在一瞬間就可以建立了,相關的安裝,請參考之前的章節。下述為建立專案的步驟:

1.進入Eclipse平台,選取選單「File」中的「New」選項,再選取「Project...」選項,進入開啟新專案的視窗,如圖63所示。


圖63

進入開啟新專案的視窗,如圖63所示。在專案類別中,選取「Android」裡面的「Android Project」,然後按下「Next」按鈕,進行下一個步驟。

2. 填入Android專案所需要的明細資料,如下所述:
在建立新專案的視窗填入這個專案的相關細節,所屬欄位意義:
輸入欄位意義如下:
欄位名稱
欄位描述
Project Name
專案名稱,包含這個專案的檔案夾或是目錄的名稱。
Package Name
套件名稱,Java的習慣是用套件名稱來區分不同的類別(class),依照專案的不同,會起不同的路徑名稱。
Activity Name
這個專案的主要類別的名稱,這個類別是一個Android的Activity類別的子類別。一個Activity類別是一個簡單的啟動程式和控制程式的類別。它可以根據需要建立介面。
Application Name
顯示在應用程式上的標題名稱。

要輸入的欄位值如下:
欄位名稱
欄位輸入值
Prjoect Name
HelloAndroid
Package Name
com.android.hello
Activity Name
HelloAndroid
Application Name
Hello,Android

圖64

3. 當按下「Finish」按鈕後,Eclipse ADT就會自動產生的樣版程式HelloAndroid.java,內容如下所述:

public class HelloAndroid extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
}
}

再下一個章節,再來修改程式碼,來顯示字串「Hello,Android!」。

參考資料:
Android SDK Document http://code.google.com/android/documentation.html

2008年11月14日 星期五

深入淺出Android程式設計(22)-在Eclipse開發上的提示

在這個章節要來介紹有關在Eclipse開發上的提示。

在Eclipse除錯模式下執行任意Java表達語法
開發人員可以在Eclipse設定中斷點,當中斷時可以執行、測試任何程式碼或變數,例如:在某一個函式中,有一個字串參數叫做「zip」,開發人員想要知知道是屬於那個套件的資訊並叫用類別方法,也可以叫用任何靜態方法,例如鍵入android.os.Debug.startMethodTracing(),將會啟動dmTrace。

在中斷程式時,選取選單「Window」中的「Show View」選項裡面的Display視窗,來顯示要觀察的參數或變數。如圖59、圖60所示。


圖59


圖60

程式語法執行於中斷點(或Single-stop)相同的執行緒(如果要手動中斷執行緒,就必須要單步執行程式碼(按「F6」功能鍵)。

如果現在停在中斷點,開發人員可以選取要觀察的參數或變數,按組合鍵CTRL + SHIFT + D執行。就會出現目前變數的值,如圖61所示。再按組合鍵CTRL + SHIFT + D,就會將變數值顯示在Display視窗。如圖62所示。


圖61


圖62

開發人員可以使用組合鍵ALT +SHIFT + ↑選取更大範圍的大括號區塊或是使用組合鍵ALT +SHIFT + ↓選取更小範圍的大括號區塊

下面是一些使用Eclipse Display視窗輸入與回應的範例
輸入:Zip 回應:(java.lang.String)
/work/device/out/linux-x86-debug/android/app/android_sdk.zip

輸入:zip.endsWith(“.zip”) 回應:(boolean) true
輸入:zip.endsWith(“.jar”) 回應:(boolean) false

手動執行DDMS
雖然建議使用ADT外掛,但是,也可以手動啟動DDMS,然後設定Eclipse於8700埠位來除錯(要先執行DDMS,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/ddms.html )

深入淺出Android程式設計(21)-有關建置、安裝及移除Android應用程式的建議

在這個章節要來說明有關建置、安裝及移除Android應用程式的建議。

Android SDK需要用自訂的建置工具正確地建置出資源檔與Android程式的其它部分(例如:程式樣版等),所以開發人員必須為應用程式指定一個建立的環境。

而特定的Android編譯步驟包含編譯XML與其它資源檔,並產出正確的格式。編譯完成的Android程式為一個.apk檔案,是一個壓縮了.dex檔案、資源檔、資料檔與其它相關檔案。開發人員可以從無到有、或是從現有的檔案建立正確的Android專案結構。

Android目前尚未支援第三方使用原生語言(C/C++)來開發程式。

所以,目前最佳的開發方式還是建議在Eclipse平台上開發Android應用程式,這種方式提供建立、執行與除錯Android程式的整合式開發環境。

如果要使用其它IDE開發介面,則Android提供其它IDE開發工具建立與除錯Android程式,但是它們尚未加以整合在一起,所以,再使用時,可能要分成建立專案、撰寫程式碼、執行與除錯都要分開來進行。

移除Android應用程式的方式

要移除安裝在模擬器上的程式,必須執行adb刪除送往模擬器並安裝的.apk檔案,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/adb.html ,使用「adb shell」進入模擬器裝置的Shell,移到data/app/,用「rm 應用程式.apk」移除檔案。

2008年11月4日 星期二

深入淺出Android程式設計(20)-有關在除錯時的提示



在這個章節要來說明有關在進行應用程式除錯時的有那些有用的提示。如下文所述:

A.Quick stack dump(快速堆疊轉儲)
如何從模擬器中取得堆疊轉儲的資訊,開發人員可以在進入Dos視窗,在Android SDK安裝目錄底下的tools目錄底下執行「adb shell」登錄,用「ps」找到應用程式的行程,然後下「kill-3」,則堆疊追蹤會出現在log檔案,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/adb.html#shellcommands

B.在模擬器螢幕顯示有用資訊
在模擬器裝置可以顯示有用的資訊,例如:顯示CPU使用率或是顯示螢幕更新,開啟或關閉這些開發設定,請參考之前的章節「如何除錯及測試模擬裝置的設定」。

C.取得模擬器系統狀態資訊(dumstate)
開發人員可從Dalvik Debug Monitor Service 工具存取系統資訊,請參考adb主題頁的dumpsys and dumpstate,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/adb.html#dumpsys
上述網址,所述的動作,主要是啟動Dalvik Debug Monitor Server (DDMS)工具,在Android SDK安裝目錄底下的tools目錄的ddms.bat批次檔。
進入DDMS視窗後,先選取「Device」選單,就會出現下拉選單,再點選「Dump device state…」選項,開發人員可以取得模擬器系統狀態資訊,如圖57所示。

D. 取得模擬器程式狀態資訊(dumsys)
開發人員可從Dalvik Debug Monitor Service 工具存取程式資訊,請參考adb主題頁的dumpsys and dumpstate,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/adb.html#dumpsys
上述網址,所述的動作,主要是啟動Dalvik Debug Monitor Server (DDMS)工具,在Android SDK安裝目錄底下的tools目錄的ddms.bat批次檔。
進入DDMS視窗後,先選取「Device」選單,就會出現下拉選單,再點選「Run logcat…」選項,開發人員可以取得模擬器系統狀態資訊,如圖57所示。

E.Getting wireless connectivity information(取得無線連接資訊):
首先,啟動Dalvik Debug Monitor Server (DDMS)工具,在Android SDK安裝目錄底下的tools目錄的ddms.bat批次檔。
進入DDMS視窗後,先選取「Device」選單,就會出現下拉選單,再點選「Dump radio state」選項,開發人員可以取得無線連接資訊,如圖57所示。



圖57

F.記錄追蹤資料
在Activity內叫用android.os.Debug.startMethodTracing()記錄追蹤資料,請參考Running the Traceview Debugging Program,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/traceview.html

G.記錄無線資料
原則上系統不會記錄無線連接的資料,但是開發人員可以在Dos視窗使用以下命令來記錄無線資料:
adb shell
logcat -b radio

H.執行adb
Android SDK提供一款工具叫做adb,提供不同功能,包含了模擬器上的檔案同步與移動、傳送埠與在模擬器上執行一個UNIX Shell,請參考Using adb,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/adb.html

I.捕捉模擬器螢幕
首先,啟動Dalvik Debug Monitor Server (DDMS)工具,在Android SDK安裝目錄底下的tools目錄的ddms.bat批次檔。
進入DDMS視窗後,先選取「Device」選單,就會出現下拉選單,再點選「Screen capture…」選項,就可以捕捉模擬器螢幕的資訊,如圖58所示。



圖58

J.使用除錯輔助類別
Android SDK有提供二種除錯輔助類別,來協助開發人員進行除錯工作,可以讓開發人員,事半功倍。
例如:util.Log類別,有關此類別在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/android/util/Log.html
以及Debug類別,有關此類別在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/android/os/Debug.html,供您使用

深入淺出Android程式設計(19)-如何除錯及測試模擬裝置的設定


在這個章節要來說明如何利用Android SDK內建的模擬器來進行程式的除錯方面的設定。

在Android SDK有幾個簡單設定讓程式更容易進行測試與除錯,首先,在Dos命令視窗執行Android SDK安裝目錄底下的tools目錄底下的模擬器執行檔emulator.exe,進入模擬器時,要先按下「MENU」按鈕來解除模擬器的Locked,回到Home預設畫面。如圖51所示。


圖51

在模擬器的Home畫面,按下開啟系統選單的按鈕,如圖52所示。選取「DevTools」選項,如圖53所示。


圖52


圖53

進入「DevTools」選項,再選取「Development Settings」設定選單,如圖54所示,就會開啟開發設定畫面,再設定下述明細開發除錯選項:


圖54

● 在Debug app選項中,是要選擇要除錯的應用程式是那一個程序,點選下方「(none)」的按鈕,就會顯示目前在執行的程序,請選取您要除錯的應用程式的程序名稱即是「Package Name(套件名稱)」即可,如圖55所示。這個選項不是除錯相關的選項,但是設定這個值,可以有兩個作用:
○ 讓Android SDK除錯時,如果在中斷點暫停太久時,不致於會拋出錯誤訊息。
○ 讓開發人員可以選擇阻斷程式啟動,直到開發人員的除錯機制加入時,相關描述可以參考下一個選項說明。


圖55

● Wait for debugger(阻斷程式啟動)選項:阻斷所選程式載入,直到開發人員的除錯機制加入,這樣開發人員就可以在OnCreate()事件設定中斷,這對於要除錯Activity啟動過程是很重要的。
在執行中的程式,若是變更除錯選項,則會導致系統關閉目前所有該執行的程式,要啟用這個選項,必須要先使用上一段所提的Debug app選項或是在應用程式的程式碼加入Wait for debugger(),也可以阻斷程式啟動。如圖55所示。

● Immediately destroy activities(立即銷毀activities)選項:當activity動作停止時,就要立即銷毀activity(例如:Android必須回收記憶體時)。這對於在測試onFreeze()或onCreate()事件時是很有作用的,否則會非常困難加以強制。如果應用程式的程序沒有儲存起來的話,選用這個選項可能會引起一些問題。如圖56所示。

● Show screen updates(顯示螢幕更新)選項:在螢幕任何區塊被重繪時,閃現一個短暫的粉紅色矩形,來找出不必要的螢幕繪製時是很用的選項。如圖56所示。

● Show CPU usage(顯示中央處理器使用率)選項:在螢幕上層顯示CPU的使用率,上方的紅色棒顯示全部的CPU使用率,下方的綠色棒則顯示組成這個畫面花了多少CPU時間。如圖56所示。

備註:一旦開啟這個選項,要重新啟動模擬器才能關閉顯示。

● Show background(顯示背景)選項:當沒有Activity螢幕時,就會顯示背景模式,實際上,一般是不會出現這種情況,除非是正在除錯時才有可能會出現。如圖56所示。

設定這個選項,要注意的是在模擬器重新啟動之後仍然有效果,如果要取消設定的選項,在取消設定後要重新啟動模擬器,才會生效。


圖56

深入淺出Android程式設計(18)-如何除錯

在這個章節要來說明如何利用工具來進行程式的除錯,在Android SDK有大量的工具來幫助程式進行除錯,目前有下述工具可以進行程式上的除錯。

A.DDMS工具-圖形介面程式支援埠位傳送(如此要在IDE開發工具設定程式中斷點),模擬器的螢幕擷取,執行緒與堆疊資訊,以及其它功能,也可以執行Logcat取得Log資訊,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/ddms.html

B.Logcat工具–轉儲系統訊息log,訊息包含模擬器發生錯誤時的堆疊追蹤,和Log訊息,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/ddms.html#logcat

產生出來的訊息,如下述訊範例:
I/MemoryDealer( 763): MemoryDealer (this=0x54bda0): Creating 2621440
bytes heap at 0x438db000
I/Logger( 1858): getView() requesting item number 0
I/Logger( 1858): getView() requesting item number 1
I/Logger( 1858): getView() requesting item number 2
D/ActivityManager( 763): Stopping: HistoryRecord{409dbb20
com.google.android.home.AllApps}

C. Android的Log類別–在Android SDK有提供一個log類別可以在模擬器上將Log訊息輸出到檔案,如果執行Logcat工具,那可以及時讀取訊息。在撰寫程式碼加入少量的log方法叫用:
使用Log類別,要依訊息需求狀況來使用,可以應用的方式如下所述:
Log.v() (verbose等級)
Log.d() (debug等級)
Log.i() (information等級)
Log.w() (warning等級)
Log.e() (error等級)
等方法,如何使用此類別,如下述範例:
Log.i("MyActivity", "MyClass.getView() — Requesting item number " +position)

有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/android/util/Log.html

D.TraceView工具–可以使用TraceView這個圖形化介面讀取器來讀取Android所儲存檔案的log檔案,有關此工具在Android SDK 如何運作,請參考下述網址:http://code.google.com/android/reference/traceview.html

E. 在Eclipse使用ADT外掛–Eclipse的ADT外掛包含一些整合好的除錯工具(例如:ADB,DDMS,Logcat輸出與其它功能)。下述為在ADT外掛時,如何簡單的進行除錯:

一、在專案的程式碼列的左邊設定程式中斷點(Toggle Breakpoint),先選取一段程式碼,在程式碼列的左邊的地方,按下滑鼠右鍵,就會出現選單,選取「Toggle Breakpoint」選項,那在程式碼列的左邊的地方就會出現一個中斷點的符號,如圖47所示。


圖47

二、下一步,選取選單「Run」中的選取「Debug」選項,來除錯應用程式。如圖48所示。


圖48

三、在Debug模式下,進行除錯時,就會出現整合時的DDMS視窗及LogCat視窗,如圖49、圖50所示。

圖49


圖50

F. 除錯與測試裝置設定-Android SDK也有提供多種重要訊息的設定,例如:中央處理器使用率與顯示頻率,可以參考下一章節的說明。

2008年11月1日 星期六

深入淺出Android程式設計(17)-如何在其他IDE或工具開發Android應用程式(下)

在上一個章節,將在Dos命令列利用activityCreator.bat建立Android專案,再利用ant來建置Android應用程式,在這個章節要來繼續說明如果執行Android應用程式。

執行Android應用程式
要執行編譯好Android應用程式,可以依照以下的步驟,來用Android SDK 安裝目錄底下的tools目錄中執行adb.exe執行檔工具將上一個章節產生的.apk檔案上載到手機模擬器的/data/app目錄。

A. 在Dos命令視窗執行Android SDK 安裝目錄底下的tools目錄底下的手機模擬器執行檔emulator.exe。如圖46所示。進入模擬器時,要先按下「MENU」按鈕來解除模擬器的Locked,回到Home預設畫面。



圖46

B. 在模擬器內,回到home螢幕(最好不要在應用程式執行時重新安裝應用程式,按Home按鍵離開應用程式)。
C. 執行 adb install專案目錄底下/bin/應用程式安裝.apk檔案,上載可執行檔。例如,安裝Lunar Lander範例,在命令列上切換到 <您的SDK目錄>/sample/LunarLander後鍵入../../tools/adb install bin/LunarLander.apk
D. 在模擬器內,開啟可執行程式,捲動並選擇程式啟動

備註:安裝好Activity後,最好重新啟動模擬器,因為套件管理員只會在模擬器啟動時完整檢核AndroidManifest.xml(Android程式的功能清單)。

下一步,要為Android應用程式加入除錯器,方便進行除錯。這一段說明如何在螢幕上顯示除錯資訊(如中央處理器使用率),和如何讓IDE除錯模擬器的應用程式。
使用Eclipse外掛會自動加入除錯器,但也可以設定其它的IDE來取得除錯資訊。請用以下步驟來進行除錯:

A. 啟動Dalvik Debug Monitor Server (DDMS)工具,在Android SDK 安裝目錄底下的tools目錄的ddms.bat批次檔,提供IDE開發工具與模擬器間的埠位(Port)之間的傳送服務。
B. 在模擬器設定除錯選項,如阻斷程式啟動直到除錯器加入,請注意,很多除錯選項並非需要DDMS才能使用,如顯示中央處理器使用率或是模擬器的螢幕的更新頻率。
C. 設定IDE開發工具聆聽除錯埠位到8700,相關資訊可以參考下一個章節說明。

設定IDE開發工具聆聽除錯埠位
DDMS會為模擬器上的每一個虛擬機器指定特定的除錯埠,必須設定IDE開發工具取得該埠位或是連上預設的8700埠位。
執行中的程式,若是變更除錯選項或是「Wait for debugger(阻斷程式啟動)」選項,會導致系統關閉目前執行的程式。