昨天我們已經成功利用模擬器執行了我們的程式,今天我們則會針對「Android Device Monitor」做更詳細的說明。打開 Android Device Monitor 後,熟悉 ADT Bundle 的使用者,會發現以前 Eclipse 中 DDMS Perspective 的所有功能都出現在 Android Device Monitor 了,包含除錯時需要用到的 LogCat 視窗:
為了讓讀者能和前幾天介紹的資料庫連結起來,筆者修改了 CalendarActivity 的 onCreate,內容如下所示:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calendar);
// For DB Test
BabyDB.addBaby(this, -1, "John", "J", "", 20141004, Baby.GENDER_MALE);
BabyDB.addBaby(this, -1, "Marry", "M","",20131004,Baby.GENDER_FEMALE);
ArrayList<Baby> babylist = BabyDB.getAllBabies(this);
for (int i = 0; i < babylist.size(); i++) {
Baby baby = babylist.get(i);
Log.d("LINCYU", "ID: " + baby.babyid + ", Name: " + baby.name +
"NickName: " + baby.nickname);
}
}
其中第 6, 7, 9 行的 BabyDB 類別的 addBaby 和 getAllBabies 就是我們數天前實作的方法,用途是新增記錄和讀取記錄,讀取的記錄會存在一個 Baby 的動態陣列 (ArrayList),接著 12 ~ 13 行,程式利用 Log [1] 將記錄的值印出來,Log 訊息依重要度由小到大可分成五類:冗長訊息 (Verbose)、除錯訊息 (Debug)、通知訊息 (Info)、警告訊息 (Warning)與錯誤訊息 (Error),這五類訊息分別對應到 Log 類別的五個 Methods: v, d, i, w, e,這五個 Methods 需要兩個字串參數,第一個參數是標籤 (TAG),這個標籤之後可用來過濾訊息,第二個參數則是訊息的內容。
接下來回到「Android Device Monitor」,執行「寶寶生活記錄 App」,就可於 LogCat 視窗看到呼叫 Log.d 產生的訊息 (請參考上圖),事實上 Log 產生的訊息非常的多 (包含系統自己產生的),上圖之所以只有呈現我們的訊息,是因為筆者使用了過濾器 (filter),設定只有標籤 (TAG) 為 “LINCYU” 的訊息才會出現:
更多過濾器 (filter) 的設定,可參考筆者的書籍 [2]。接著來看「Android Device Monitor」右上方的視窗中一些筆者常用的功能,「Emulator Control」能讓我們對模擬器進行一些控制,例如手動輸入經緯度座標,這對於開發 LBS (Location-based Service) App 非常的實用,下圖則是送個簡訊給模擬器的實例:
另外「File Explorer」能讓我們看到模擬器內的所有檔案,先前提到資料庫會存放在 /data/data/<package name>/databases 下,透過 File Explorer,我們確實於該資料夾看到 babylog.db,我們亦可利用 File Explorer 右上的「Pull a file from the device」下載該檔案:
「Android Device Monitor」的介紹先到此為止,更多除錯工具的使用以及模擬器的進階控制 (我們可透過 telnet 連線到模擬器) 可參考筆者的書籍 [2]。
參考資料
[1] Log | Android Developers, http://developer.android.com/reference/android/util/Log.html
[2] 林致宇, Android程式設計入門與應用(附範例光碟), 全華出版社, ISBN: 9789572194126, http://www.opentech.com.tw/search/bookinfo.asp?isbn=9789572194126&companyID=04383129