2008年11月14日 星期五
深入淺出Android程式設計(22)-在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 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有幾個簡單設定讓程式更容易進行測試與除錯,首先,在Dos命令視窗執行Android SDK安裝目錄底下的tools目錄底下的模擬器執行檔emulator.exe,進入模擬器時,要先按下「MENU」按鈕來解除模擬器的Locked,回到Home預設畫面。如圖51所示。
圖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所示。
設定這個選項,要注意的是在模擬器重新啟動之後仍然有效果,如果要取消設定的選項,在取消設定後要重新啟動模擬器,才會生效。
深入淺出Android程式設計(18)-如何除錯
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所示。
二、下一步,選取選單「Run」中的選取「Debug」選項,來除錯應用程式。如圖48所示。
三、在Debug模式下,進行除錯時,就會出現整合時的DDMS視窗及LogCat視窗,如圖49、圖50所示。
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應用程式(中)
建置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
深入淺出Android程式設計(15)-如何在其他IDE或工具開發Android應用程式(上)
在開發工作上,雖然推薦以Eclipse平台加上Android外掛來開發應用程式(也同時整合了程式編輯、建置與除錯功能),但是,Android SDK還是提供工具讓其它IDE(包括intelliJ)來開發應用程式。
建立Android專案
在Android SDK包含一個activityCreator程式,這個程式可以為Android專案建立一些樣板程式與建置檔,也可以用該程式建立新專案或為已有的程式碼建立專案(如Android SDK內附的範例程式)。
這個程式在Linux與Mac系統,檔案名稱叫做activityCreator,Python則是activityCreator.py,Windows系統則是用activityCreator.bat批次檔,不管是那個平台,都可直接使用activityCreator來執行建立Android專案。
用以下步驟執行activityCreator建立專案(以Windows平台為例):
1.在Windows系統上,執行Dos命令視窗,先變更切換到Android SDK安裝目錄底下的tools目錄,並為專案建立一個新目錄;如果要為已經存在的程式碼建立專案,請變更目錄到應用程式的目錄。
命令列參數還包括:
--out <目錄>:要設定輸出目錄,預設是現在所在的目錄,如果您要將專案檔案放在其它目錄,請用這個參數來指定。
--ide intellij:在建立專案時產生 intellij相關檔案。
Project Name:專案名稱
Package Name:套件名稱
Activity Name:Activity名稱
範例如下:
~/android_linux_sdk/tools $ ./activityCreator.py --out myproject your.package.name.ActivityName
package: your.package.name
out_dir: myproject
activity_name: ActivityName
~/android_linux_sdk/tools $
在Windows系統上,執行Dos命令視窗。執行如圖44所示的命令:
activitycreator -out HelloAndroid com.android.HelloAndroid
2. libs/ Android libs。
3. res/ 資源檔案目錄。
3.1 layout:版面配置目錄,以XML格式顯示。
3.2 values:參數值目錄,記錄所有使用XML格式的參數值。
4.src/ 原始碼目錄,包含所有Android應用程式中的原始程式碼。
5.AndroidManifest.xml:Android程式的功能清單。
6. build.xml:ant 建置檔案,可以建置/安裝程式。
現在可以帶著建立好的目錄到處開發了,但是不要忘了,使用tools目錄內的adb程式把檔案送給模擬器。但是,應當避免移動Android SDK所在的目錄,因為這會破壞建立檔案的設定。
圖45
深入淺出Android程式設計(14)-如何在Eclipse上開發Android應用程式(下)
在這個章節中,接續上一個章節,來介紹如何進行應用程式的執行與除錯工作。
當依照之前的章節將應用程式設定好專案與載入配置,就可以依下述步驟來進行應用程式執行與除錯:
在進入Eclipse平台,選取選單「Run」中的「Run」選項或是選取「Debug」選項,來執行或除錯應用程式。如圖43所示。
圖43
若要修改或設定有效的載入配置,請依上一個章節的描述來設定。
執行或除錯應用程式會觸發以下動作:
A. 模擬器如尚未執行則啟動模擬器,並執行應用程式。
B. 如果程式建置完成,但是,又有過修改,則會重新編譯專案,並將程式安裝到模擬器。
C. 執行時,如果啟動程式除錯,則將程式啟動為"Wait for debugger"模式,並開啟Eclipse平台的除錯檢視功能。
在這個章節中,陸續介面了有關Android專案在Eclipse平台上操作步驟。接下來要介紹的是如果沒有Eclipse這樣的IDE操作介面是不是也可以像Java或C語言那樣,用純手工的方式來寫程式碼,在Dos視窗來執行呢?
答案是可以的,Android SDK有提供一些工具來使用,例如:執行一些批次檔來建立專案、執行模擬器等工作。
後續也會開始介紹一些簡單的範例程式,來了解程式是如何執行的。
深入淺出Android程式設計(13)-如何在Eclipse上開發Android應用程式(中)
建立載入配置
當建立好新的專案後,必須再建立載入配置以便能讓Eclipse執行與除錯應用程式,載入配置指定專案載入、啟動Activit,使用模擬器選項等作業。
請依下述步驟建立載入配置:
1. 在進入Eclipse平台,選取選單「Run」中的「Run Configurations…」選項或是選取「Debug Configurations…」選項。如圖38所示。
圖38
2. 進入Run Configurations視窗,選取左邊的專案型態為「Android Application」的項目,按下滑鼠右鍵,選取「New」選項,建立新的配置設定,預設會依目前的專案,自動建立所屬的配置設定。如圖39所示。
圖39
3. 在新的配置設定視窗,在「Name」欄位上輸入這個應用程式的配置名稱。如圖40所示。
4. 在新的配置設定視窗,切換到「Android」頁標籤,點選「Browse...」來選擇所屬的專案與設定Launch Action,讓Eclipse了解目前要執行那個專案。如圖40所示。
圖40
5.在新的配置設定視窗,切換到「Target」頁標籤,設定所屬專案想要執行的螢幕格式(Screen Size)與網路屬性(Network options),和其它的模擬器啟動選項。如圖41所示。一些細部的設定,可以參考下述網址:http://code.google.com/android/reference/emulator.html#skins
6.在新的配置設定視窗,切換到「Common」頁標籤,設定其它想要的選項,如圖42所示。
7. 最後,按下「apply」按鈕,來儲存載入配置或是酌情按Run或Debug選項。
深入淺出Android程式設計(12)-如何在Eclipse上開發Android應用程式(上)
在進行本章節時,是假設您已安裝好Eclipse相關的執行環境,如果您還未安裝Eclipse開發環境,請參考之前的章節。
建立Android專案
Eclipse的ADT外掛有提供專案精靈,讓我們可以快速為已經存在的程式碼或是建立全新的專案,請依下述步驟建立Android專案:
1. 在進入Eclipse平台,選取選單「File」中的「New」選項,再選取「Project...」選項,進入開啟新專案的視窗。如圖34所示。
圖35
3. 在這個步驟中,主要為Android專案選擇是要新建立專案或是開啟已存在的程式碼而建立專案,如圖36所示。
A. 選擇Create new project in workspace:
建立新的專案,要輸入Project name(專案名稱)、屬性方面也要設定Package name(套件名稱)、Application name(應用程式名稱)與Activity name(主要類別的名稱),來建立專案樣板的.java檔案。相關說明,會在後續的節章提出。
B. 選擇Create project from existing source:
為已存在的程式碼建立專案,可以使用這個選項來執行Android SDK所附的範例程式,這些程式放在Android SDK的安裝路徑底下的samples目錄。按下「Browse…」按鈕來瀏覽已存在的程式碼。
4. 按下「Finish」按鈕,完成專案的建立。
圖36
依上述的專案設定,ADT(Android Development Tools)外掛會為建立下述的目錄與檔案,如圖37所示:
1. src/原始碼目錄,包含所有Android應用程式中的原始程式碼。
2. res/資源檔案目錄。
A. drawable:儲存靜態的圖片目錄,在程式使用到的.png、.gif、.jpg等格式的檔案,都會放在這個目錄中。
B. layout:版面配置目錄,以XML格式顯示。
C. values:參數值目錄,記錄所有使用XML格式的參數值。
3. AndroidManifest.xml:Android程式的功能清單。