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(阻斷程式啟動)」選項,會導致系統關閉目前執行的程式。


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

在上一個章節,在Dos命令列利用activityCreator.bat建立Android專案,所要用的一些檔案。在這個章節中,來介紹如何建置Android應用程式。

建置Android應用程式
在上一個章節,使用activityCreator建立的ant 建置檔案(build.xml)來建置Android應用程式。請用以下步驟建置Android應用程式:

A. 如果系統沒有安裝Ant,可以從Apache Ant(http://ant.apache.org/ )的網頁下載,安裝並確定它在您的執行路徑上。
B. 使用Ant前,要先需要宣告JAVA_HOME環境變數指定到JDK的安裝路徑。請參考之前的章節來設定環境變數。

備註:在Windows安裝JDK預設路徑會裝到"Program Files"目錄下,因為中間有空白的關係,會導致Ant失敗,修正這個問題的方式就是指定JAVA_HOME環境變數,例如:Set JAVA_HOME=c:\Progra~1\Java. 更簡單的方法則是將JDK安裝到沒有空白的路徑如:c:\java\jdk1.6.02

C. 如果尚未完成,請照上述建立新專案的方式設定專案。
D. 您現在可以在build.xml同在的目錄下鍵入ant指令執行建置,每次改變程式碼或是資源檔,您應該重新執行ant以打包最新的發佈檔案。

在Eclipse平台,已經有內建ant。相關的用法,後續的章節會陸續介紹。有興趣的讀者可以參考下述網址資訊:
http://ysl-paradise.blogspot.com/2008/09/eclipse-ant-android.html