編輯:Android開發環境
我們進行Android開發往往需要用到DDMS,它在開發過程中能起到很好的輔助作用。
DDMS簡介
DDMS 的全稱是Dalvik Debug Monitor Service,它為我們提供例如:為測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理坐標等等。DDMS為IDE和emultor及真正的android設備架起來了一座橋梁。開發人員可以通過DDMS看到目標機器上運行的進程/現成狀態,可以android的屏幕到開發機上,可以看進程的heap信息,可以查看logcat信息,可以查看進程分配內存情況,可以像目標機發送短信以及打電話,可以像android開發發送地理位置信息。可以像GDB一樣attach某一個進程調試。 SDK-tools目錄下提供了ddms的完整版,直接雙擊ddms.bat運行即可。下面以Eclipse的DDMS perspective為例簡單介紹DDMS的功能。
跟debug,java的perspective一樣,安裝好adt後會有一個DDMS得perspective,打開即可。
如果perspective裡沒有顯示DDMS,剛按如下步驟執行:
點擊上圖中DDMS圖標左邊的那個圖標,然後在下圖中如果有DDMS,剛選擇,如果沒有,剛選擇“其他”,然後在出現的窗口中雙擊“DDMS”即可。
注意:DDMS對Emulator和外接測試機有同等效用。如果系統檢測到它們(VM)同時運行,那麼DDMS將會默認指向 Emulator。以上2種啟動後的操作有些不一樣,建議分別嘗試下。
DDMS 的工作原理
DDMS將搭建起IDE與測試終端(Emulator 或者connected device)的鏈接,它們應用各自獨立的端口監聽調試器的信息,DDMS可以實時監測到測試終端的連接情況。當有新的測試終端連接後,DDMS將捕捉到終端的ID,並通過adb建立調試器,從而實現發送指令到測試終端的目的。
DDMS監聽第一個終端App進程的端口為8600,APP進程將分配8601,如果有更多終端或者更多APP進程將按照這個順序依次類推。DDMS通過8700端口(“base port”)接收所有終端的指令。
打開後的窗口為:
通過GUI詳細了解DDMS的一些功能
在GUI的左上角可以看到標簽為”Devices”的面板,這裡可以查看到所有與DDMS連 接的終端的詳細信息,以及每個終端正在運行的APP進程,每個進程最右邊相對應的是與調試器鏈接的端口。因為Android是基於Linux內核開發的操 作平台,同時也保留了Linux中特有的進程ID,它介於進程名和端口號之間。
device窗口羅列模擬器中所有的進程,右上角那一排按鈕分別為:調試某個進程,更新某個進程,更新進程堆棧信息,停止某個進程,最後一個圖片按鈕時抓取android目前的屏幕。
當你選中某個進程,並按下調試進程按鈕時,如果eclipse中有這個進程的代碼,那就可以進行源代碼級別的調試。有點像GDB attach。圖片抓取按鈕可以把當前android的顯示桌面抓到你的機器上,也是非常有用。
右邊那個窗口中有threads,heap,file explorer選項卡。分別顯示線程統計信息,棧信息,以及android的文件系統。
file explorer非常有用,他可以把文件上傳到android手機,或者從手機下載下來,也可以進行刪除操作。選中file explorer選項卡後,按下面三個按鈕便可實現對android手機文件系統的上傳,下載,刪除操作。
emulator control也是非常重要的,通過它可以像手機發送短信, 打電話,已經更新手機位置信息。
Telephony Status: 通過選項模擬語音質量以及信號連接模式。
Telephony Actions: 模擬電話接聽和發送SMS到測試終端。
Location Control: 模擬地理坐標或者模擬動態的路線坐標變化並顯示預設的地理標識,可以通過以下3種方式:
Manual: 手動為終端發送二維經緯坐標。
GPX: 通過GPX文件導入序列動態變化地理坐標,從而模擬行進中GPS變化的數值。
KML: 通過KML文件導入獨特的地理標識,並以動態形式根據變化的地理坐標顯示在測試終端。
LogCat:顯示輸出的調試信息。
Console(控制台):是Android模擬器輸出的信息,加載程序等信息。
總結
eclipse adt目前提供的的ddms功能只是真正ddms的一小部分,你可以直接使用tools下面的ddms來使用所有功能。其中有一個查看進程內存分配的功能比較有用。
另個要注意的是,在DDMS中模擬發送短信時,中文顯示為亂碼,在未來的開發中,我們必須要注意中文字符的問題。